Just toying around looking at the code but I think implementing this
wouldn't actually be that difficult.

The two important functions are: parse_view_query and
make_view_fold_fun in couch_httpd.erl

The basic idea would be to change the key, startkey, endkey behavior
to be a list of keys instead of just two values. (Currently, key=blah
translates to startkey=key and endkey=key. Changing this to a list and
then adding a flag to emit all docs between the first and last key vs.
only docs that match one of the keys). The only gotchya here I think
would be making sure that the list is sorted properly based in the
direction argument. Also, this list would have to be sorted in
parse_view_query because the beginning fold needs to know the start
key. (Not sure on erlang specifics, but I imagine there's a standard
"sort_list_using_func_as_comparator that you could just pass the
couch_view:less_json function)

Then in the make_view_fold_fun in the PosCount and NegCount functions
in the case block that appends a new object to the response you would
just check that the key is in your list which could be done fairly
efficiently in a merge sort manner.

I don't know about Damien's comment on using a post body code wise.
But I  would imagine that passing the post data to the
parse_view_query should be fairly easy.

Now all I need is an erlang hacker.... Damn it Jim!

HTH,
Paul

On Thu, Jul 3, 2008 at 4:18 PM, Bradford Winfrey <[EMAIL PROTECTED]> wrote:
> So it's not something so simple as to do...
>
> http://...?keys[]="val1"&keys[]="val2"; as the request.  Meaning keys is an 
> array and then checking to see if the key being emitted exists within the 
> array that we passed in?  I'm totally firing this off before looking at the 
> code, so bear with me...
>
>
>
> ----- Original Message ----
> From: Damien Katz <[EMAIL PROTECTED]>
> To: [email protected]
> Sent: Thursday, July 3, 2008 1:51:38 PM
> Subject: Re: Views using JSON Arrays
>
>
> On Jul 3, 2008, at 2:34 PM, Jan Lehnardt wrote:
>
>>
>> On Jul 3, 2008, at 20:17, Jan Lehnardt wrote:
>>
>>>
>>> On Jul 3, 2008, at 20:07, Paul Bonser wrote:
>>>
>>>> On Thu, Jul 3, 2008 at 8:01 AM, Bradford Winfrey <[EMAIL PROTECTED]
>>>> > wrote:
>>>>
>>>>> We would get back each one of our tags as a key, yea?  Only if we
>>>>> supplied one at a time.  So how does one go about supplying a
>>>>> range, array (not sure what we'd call it here) of keys to be
>>>>> searched on?  http://...?key=["octopus","hockey";] maybe?  I'm
>>>>> unsure of the plan of attack for such a thing.  Maybe I'm just
>>>>> going about it in the wrong direction.  Any thoughts?
>>>>
>>>> Hey everyone. I've pretty much just been watching the mailing list
>>>> here myself.
>>>>
>>>> This is the second time somebody has asked about this since I've
>>>> started watching this mailing list. I could see it being a valuable
>>>> feature.
>>>>
>>>> Would it be valuable to add the ability to query a view with
>>>> multiple
>>>> keys, getting the results for each of those keys back? Something
>>>> like
>>>> http://...?key_list=["octopus","hockey";]
>>>>
>>>> If I were interested in investigating how hard it would be to add
>>>> that
>>>> feature, where would I start looking in the code?
>>>
>>> This simply doesn't fit the way views work. They are single indexes
>>> that you
>>> can use for single-key or or key-range lookups. if you need random
>>> access
>>> you'd basically need to query the view as many times as you have keys
>>> to search. No matter if you do that in front or behind the API.
>>
>> Hey you smart-ass, on the one hand you are trying to recruit new
>> developers and on the other hand you discourage people from adding
>> useful features. Make up your mind man!
>>
>> Paul, if you come up with a nice solution, we'd be happy to look at
>> integrating it. Please give it a try. To investigate the code it is
>> probably
>> best to start at src/couchdb/couch_http.erl as it defines the HTTP API
>> and handles the requests you already know and just drill down from
>> there.
>
> :)
>
> The view indexes can indeed do multiple lookups at once. The only
> thing is I don't think a GET with all the keys are URL args is the way
> to go as it can get really long and cause problems with proxies and
> HTTP libs, a POST with the lookup keys as the body is probably better.
>
>
>>
>>
>> Cheers
>> Jan
>> --
>
>
>

Reply via email to