5 years agoAdd `$allMatch` selector master
Lucas Satabin [Tue, 7 Feb 2017 16:40:09 +0000 (17:40 +0100)] 
Add `$allMatch` selector

This selector is similar to the existing `$elemMatch` one but requires
all elements of an array value to match the inner selector.

5 years agoIgnore design docs when using _all_docs
Garren Smith [Wed, 22 Mar 2017 12:47:31 +0000 (14:47 +0200)] 
Ignore design docs when using _all_docs

This stops design docs from being returns when using the special
all_docs index

5 years agoDo not allow empty field name 32/head
Tony Sun [Tue, 18 Oct 2016 21:01:48 +0000 (14:01 -0700)] 
Do not allow empty field name

Currently, the indexer crashes when a field name is empty. Even though
it's valid json, we should disallow empty field names to coincide
with selector syntax that requires a non-empty field name for queries.


5 years agoAdd config parameter to reject index all text indexes upstream 33/head 47/head
Tony Sun [Tue, 6 Dec 2016 08:46:51 +0000 (00:46 -0800)] 
Add config parameter to reject index all text indexes

Text indexes that index all fields can sometimes lead to OOM issues
when users have documents with nested array fields. This change adds
in a config parameter to provide the ability to log users who do this
and also reject new requests. Note that we need to pass in a db
record to validate_new because it contains user and db name info that
will be logged.


5 years agoAdd .rebar/ to gitignore
katsel [Tue, 11 Oct 2016 10:41:45 +0000 (12:41 +0200)] 
Add .rebar/ to gitignore

5 years agoTiny improvements for test README
katsel [Tue, 11 Oct 2016 10:41:27 +0000 (12:41 +0200)] 
Tiny improvements for test README

5 years agoremove docs for missing_is_null as the feature was removed
Robert Newson [Wed, 19 Oct 2016 11:21:13 +0000 (12:21 +0100)] 
remove docs for missing_is_null as the feature was removed

6 years agoConfigurable default limit 30/head
Robert Newson [Fri, 30 Sep 2016 11:40:31 +0000 (12:40 +0100)] 
Configurable default limit

6 years agoMerge remote-tracking branch 'cloudant/3143-fix-default-limit'
Jan Lehnardt [Mon, 12 Sep 2016 06:13:29 +0000 (08:13 +0200)] 
Merge remote-tracking branch 'cloudant/3143-fix-default-limit'

* cloudant/3143-fix-default-limit:
  Fix test suite check for text indexes
  Set default limit to 25

6 years agoFix test suite check for text indexes 29/head
Paul J. Davis [Sun, 11 Sep 2016 19:08:51 +0000 (14:08 -0500)] 
Fix test suite check for text indexes

This was passing by accident on travis because the $CWD is set
differently so the test would always fail. If however you tried to run
the tests locally then it would fail. Obviously the test is just wrong
since we're moving the mango_cursor_text.erl file in rebar.config, and
not mango_cursor.erl which is required for every index type.


6 years agoSet default limit to 25
Paul J. Davis [Sun, 11 Sep 2016 18:38:12 +0000 (13:38 -0500)] 
Set default limit to 25

The docs claim the limit is 25 and this was the intention but this value
was never updated. The reason to set it at 25 is in case we add other
index types that are unable to stream results to the client (ie,
anything Lucene based). This allows us to maintain the same API across
all calls regardless of index type used.


6 years agoAdd op_field term to fix special $or case 28/head
Tony Sun [Fri, 29 Jul 2016 01:36:37 +0000 (18:36 -0700)] 
Add op_field term to fix special $or case

We're missing the term op_field when recursively calling
indexable_fields in a special case. This leads to a function_clause
error when specifically two elements are used in a $or query. It works
when they index all fields because indexable_fields is not called.
However, when the user specifically indexes a field, we encounter this
error. Inserting the op_field term  allows the function to be called

BugzId: 71037

6 years agoadd mango catch-all feature
Robert Kowalski [Mon, 4 Jan 2016 12:05:25 +0000 (13:05 +0100)] 
add mango catch-all feature

fall back on the all_docs index if a index for the currently
searched field does not exist.

warn about slower execution and advise to create an index.

PR: #27
Reviewed-By: Alexander Shorin
Reviewed-By: Tony Sun <>
6 years agoAdd filter test 2913-port-missed-commits 26/head 44/head
Tony Sun [Wed, 28 Jan 2015 18:28:49 +0000 (10:28 -0800)] 
Add filter test

BugzID: 43810

6 years agoReturn fields provided by user only
Tony Sun [Wed, 28 Jan 2015 18:26:33 +0000 (10:26 -0800)] 
Return fields provided by user only

When the user specifies Fields with his or her selector, filter out
fields that are not in the Fields list.

BugzId: 43810

6 years agoFix user defined index selection 2835-fix-index-selection 25/head 43/head
Tony Sun [Fri, 30 Oct 2015 22:02:50 +0000 (15:02 -0700)] 
Fix user defined index selection

This fix modifies indexable_fields to remove extraneous fields
that are created by the mango_selector_text:convert function so that
the index can now be used when accessing arrays, $in operations, and
$size operations.


6 years agoAdd tests to verify the effect of enabling/disabling index_array_lengths 24/head
brkolla [Mon, 26 Oct 2015 01:53:46 +0000 (21:53 -0400)] 
Add tests to verify the effect of enabling/disabling index_array_lengths
Skip the array-length-field tests if text service is not running
Skip creating the index doc if the text service is not up

6 years agoProvide an ability to disable the indexing of array lengths.
brkolla [Fri, 23 Oct 2015 00:16:42 +0000 (20:16 -0400)] 
Provide an ability to disable the indexing of array lengths.

Depending on the data shape, cloudant query would end up creating many
thousands of unique fields and this is leading to JVM heap exhaustion
as Lucene tries to cache information about fields and Lucene is not
designed to handle many thousands fields.
This change allows the user to disable the indexing of array lengths
field. So that they don’t need to take the hit on performance if they
don’t plan to use that field in their queries ($size operator)

Array length field is a single extra field per unique path to an array. The case where we found this was a client that had data that used arbitrary data as keys which exploded the number of fields in Lucene. The obvious fix was to switch to only indexing what they wanted to query on. Unfortunately that didn't prevent the automatically created array length fields from being created. This patch is a big hammer to remove the auto generated array length fields which may be generally useful. Though we're also planning on another patch that removes array length fields for anything that's not specified in the index's field list.

Add index_array_lengths to the list of valid fields in the index
document so that the index document with this field will pass and
enforce the boolean value.

6 years agoCorrectly handle unsupported HTTP methods per resource 21/head
Alexander Shorin [Mon, 12 Oct 2015 16:22:23 +0000 (19:22 +0300)] 
Correctly handle unsupported HTTP methods per resource

6 years agovalidate that all POST requests with json body must have also have valid 22/head
Mayya Sharipova [Fri, 16 Oct 2015 19:29:16 +0000 (15:29 -0400)] 
validate that all POST requests with json body must have also have valid
json header: {"Content-Type": "application/json"}
This ensures a basic protection against CSRF


7 years agoFix $nin operator 2844-fix-nin 20/head
Tony Sun [Wed, 7 Oct 2015 20:07:58 +0000 (13:07 -0700)] 
Fix $nin operator

This fixes $nin when the field is an array.


7 years agoHandle malformed manual design docs. 2816-malformed-docs 17/head
Tony Sun [Wed, 16 Sep 2015 23:42:47 +0000 (16:42 -0700)] 
Handle malformed manual design docs.

We separate index validation into three phases. The first phase is
index creation via our _index api. This validation piece will throw
an error for invalid index definitions. The second phase is during
the indexing of documents. If an index definition is not valid, we
will not use the definition to index documents. We silently log the
error. Finally, during the query phase, design documents are again
validated to ensure correct indexes are used. Again, we log an error
but silently ignore invalid index definitions. Our validation will
integrate into a consolidated validation of all indexers.


7 years agoUpdate Erlang releases for build matrix
Alexander Shorin [Mon, 5 Oct 2015 19:54:36 +0000 (22:54 +0300)] 
Update Erlang releases for build matrix

7 years agoPass supervisor's children to couch_epi 19/head
ILYA Khlopotov [Tue, 29 Sep 2015 20:05:25 +0000 (13:05 -0700)] 
Pass supervisor's children to couch_epi

7 years agoUpdate to new couch_epi API
ILYA Khlopotov [Mon, 28 Sep 2015 16:53:20 +0000 (09:53 -0700)] 
Update to new couch_epi API

7 years agoFix crypto deprecations 18/head
Robert Newson [Wed, 23 Sep 2015 18:38:33 +0000 (19:38 +0100)] 
Fix crypto deprecations


7 years agoFix comparison operators for strings 2808-fix-comparison 16/head 42/head
Tony Sun [Tue, 15 Sep 2015 00:57:28 +0000 (17:57 -0700)] 
Fix comparison operators for strings

The comparison operators $lt, $lte, $gt, and $gte were incorrectly
using lower bound and upper bound values when comparing text.
For strings, we modify the the lower bound limit to be an empty string,
and the upper bound to be the highest unicode value.


7 years agoAlso append quotes for specific numeric string field 2806-numeric-string-field 15/head
Tony Sun [Thu, 10 Sep 2015 21:44:57 +0000 (14:44 -0700)] 
Also append quotes for specific numeric string field

We appended quotes for numeric_strings for $text. However, we did not
do this for specific fields. Note that we don't escape the field value
when it's a numeric string because that provides an incorrect string
value for clouseau.


7 years agoShorten tests
Tony Sun [Thu, 10 Sep 2015 18:34:45 +0000 (11:34 -0700)] 
Shorten tests


7 years agoUse hypothesis instead of random values for num_string tests
Tony Sun [Wed, 9 Sep 2015 22:10:21 +0000 (15:10 -0700)] 
Use hypothesis instead of random values for num_string tests


7 years agoMake testcases skip automatically when no text service
Tony Sun [Wed, 9 Sep 2015 07:12:41 +0000 (00:12 -0700)] 
Make testcases skip automatically when no text service


7 years agoWhitespace 2787-merge-repos 12/head 13/head
Tony Sun [Tue, 8 Sep 2015 18:22:03 +0000 (11:22 -0700)] 

7 years agoReinstate skip tests
Tony Sun [Tue, 8 Sep 2015 18:13:49 +0000 (11:13 -0700)] 
Reinstate skip tests


7 years agoRemove extraneous error message
Tony Sun [Thu, 3 Sep 2015 22:30:19 +0000 (15:30 -0700)] 
Remove extraneous error message


7 years agoUse short circuit operators
Tony Sun [Thu, 3 Sep 2015 22:26:59 +0000 (15:26 -0700)] 
Use short circuit operators


7 years agoUse config:get_integer
Tony Sun [Thu, 3 Sep 2015 22:26:27 +0000 (15:26 -0700)] 
Use config:get_integer


7 years agoUse module_loaded instead of module_info
Tony Sun [Thu, 3 Sep 2015 20:01:33 +0000 (13:01 -0700)] 
Use module_loaded instead of module_info


7 years agoReturn 503 if dreyfus service does not exist
Tony Sun [Thu, 3 Sep 2015 01:51:40 +0000 (18:51 -0700)] 
Return 503 if dreyfus service does not exist

References to text will throw a 503 if the dreyfus_index module
does not exist.


7 years agoModify tests for skip
Tony Sun [Wed, 2 Sep 2015 20:30:28 +0000 (13:30 -0700)] 
Modify tests for skip


7 years agoRemove mango_cursor_text.erl from path if dreyfus does not exist
Tony Sun [Wed, 2 Sep 2015 18:08:39 +0000 (11:08 -0700)] 
Remove mango_cursor_text.erl from path if dreyfus does not exist

We create a new rebar.config.script for mango to rename
mango_cursor_text.erl so that compilation does not fail. If users
want to enable text search, they will manually have to clone
dreyfus and re-add the file (will be in README).


7 years agoRequest an EJSON body when opening documents
Tony Sun [Wed, 26 Aug 2015 16:35:34 +0000 (09:35 -0700)] 
Request an EJSON body when opening documents

7 years agoimprove regex test
Tony Sun [Wed, 26 Aug 2015 08:53:49 +0000 (01:53 -0700)] 
improve regex test

7 years agoadd tests
Tony Sun [Wed, 26 Aug 2015 08:52:19 +0000 (01:52 -0700)] 
add tests

7 years agostash compiled regexs in mochiglobal
Tony Sun [Wed, 26 Aug 2015 08:50:27 +0000 (01:50 -0700)] 
stash compiled regexs in mochiglobal

7 years agoReplace element position with brackets
Tony Sun [Wed, 26 Aug 2015 08:30:27 +0000 (01:30 -0700)] 
Replace element position with brackets

To be consistent with view based indexes, we allow the user
to access array elements via position. We convert that position
to [] for the underlying indexed field. For example, myarray.0.1,
would be converted to myarray.[].[]. This converted field will then
be used for the text search. The results will then be filtered by
the match function.

Bugzid: 46268

7 years agoCorrectly choose index type
Tony Sun [Tue, 25 Aug 2015 20:44:47 +0000 (13:44 -0700)] 
Correctly choose index type

When users specify "$text" in the selector, json indexes should not be
used satisfy the query. We check the list of fields and look for
"$default". This implies that "$text" was used in the selector and
filter out all json indexes.

BugzId: 46498

7 years agoAdd text index field validator
Tony Sun [Tue, 25 Aug 2015 20:40:06 +0000 (13:40 -0700)] 
Add text index field validator

Our original text field validator let any list through. The new
validator makes text fields definitions more restrictive.

BugzID: 46817

7 years agoFix $size operator
Tony Sun [Tue, 25 Aug 2015 20:28:32 +0000 (13:28 -0700)] 
Fix $size operator

The convert function was missing an array reference "[]" in the path.

BugzID: 46731

7 years agoFix $all operator
Tony Sun [Tue, 25 Aug 2015 20:18:07 +0000 (13:18 -0700)] 
Fix $all operator

The $all operator was only returning docs where the field exactly
matched the array. It should return docs where the provided matching
array is a subset of the field's array.
Ex: {"field" :
        { "$all" : ["Bob", "Joe"] }
should match "field" : ["Bob", "Jane", "Joe"]


7 years agoList text indexes correctly
Tony Sun [Tue, 25 Aug 2015 20:15:47 +0000 (13:15 -0700)] 
List text indexes correctly

Text indexes are created in the form of {"name": "fieldname",
"type":"datatype"}. This differs from view based indexes that
are in the form of {"field":"sortdirection"}. When presenting
the text index fields, we display for each field "fieldname":"datatype".


7 years agoFix field_exists_query
Tony Sun [Tue, 25 Aug 2015 19:04:49 +0000 (12:04 -0700)] 
Fix field_exists_query

The mango_selector:field_exists_query/2 was incorrectly returning
the query. This change fixes this issue and consequently fixes operators
that depended on this function such as $regex, $mod, and $type.


7 years agoFix compilation error
Tony Sun [Tue, 25 Aug 2015 18:28:10 +0000 (11:28 -0700)] 
Fix compilation error

7 years agoHandle extra <<>> when elemMatch normalizes selector
Tony Sun [Tue, 25 Aug 2015 18:26:50 +0000 (11:26 -0700)] 
Handle extra <<>> when elemMatch normalizes selector

When $elemMatch is applied to non-objects such as:
{"results":{"$elemMatch": {"$gte": 80, "$lt": 85}}},
our normalizer modifies the selector to include <<>>. This
causes issues for our path_str and match functions. This
fix addresses those issues by removing the <<>> from the selector
and also not adding a period when a Part is <<>>.

BugzId: 44817

7 years agoAdd numeric string tests
Tony Sun [Tue, 25 Aug 2015 17:51:22 +0000 (10:51 -0700)] 
Add numeric string tests

BugzId: 45572

7 years agoAdd quotes to numeric strings
Tony Sun [Tue, 25 Aug 2015 17:26:02 +0000 (10:26 -0700)] 
Add quotes to numeric strings

For numeric strings, we surround them with quotes when passed to
$text. This way, Clouseau will use the QueryParser for tokenization
rather than TermQuery. This is currently a workaround until we add
json parser support to Clouseau.

BugzID: 45572

7 years agoRemove text search limit
Tony Sun [Tue, 25 Aug 2015 17:12:05 +0000 (10:12 -0700)] 
Remove text search limit

Rather than use hardcoded values for text search limit,
we fit the value within the configurable Dreyfus max_limit

FogBugzID: 44968

7 years agoRevert "Remove reference to _text indexes"
Tony Sun [Mon, 24 Aug 2015 21:17:01 +0000 (14:17 -0700)] 
Revert "Remove reference to _text indexes"

This reverts commit 955a42c3bbd0502f1623bec29edad59eddd7b2ea.


7 years agoMerge pull request #10 from kxepal/travis
Alexander Shorin [Sat, 1 Aug 2015 15:48:40 +0000 (18:48 +0300)] 
Merge pull request #10 from kxepal/travis

7 years agoReturn HTTP 501 index_not_implemented error for text indexes 10/head
Alexander Shorin [Wed, 29 Jul 2015 19:31:32 +0000 (22:31 +0300)] 
Return HTTP 501 index_not_implemented error for text indexes

This feature requires FTS service implementation which is not available

7 years agoFix index name check
Alexander Shorin [Wed, 29 Jul 2015 19:23:39 +0000 (22:23 +0300)] 
Fix index name check

7 years agoIntegrate with Travis CI
Alexander Shorin [Fri, 24 Jul 2015 03:03:25 +0000 (06:03 +0300)] 
Integrate with Travis CI

7 years agoAdd Makefile
Alexander Shorin [Fri, 24 Jul 2015 03:03:14 +0000 (06:03 +0300)] 
Add Makefile

7 years agoRemove a superfluous closing brace
Adam Kocoloski [Thu, 23 Jul 2015 17:42:55 +0000 (13:42 -0400)] 
Remove a superfluous closing brace

Thanks Robert Kowalski for spotting this.

7 years agoMerge branch '2724-chunked-buffering'
Adam Kocoloski [Wed, 22 Jul 2015 21:03:50 +0000 (17:03 -0400)] 
Merge branch '2724-chunked-buffering'

7 years agoBuffer rows to reduce number of chunks 2724-chunked-buffering 40/head 9/head
Adam Kocoloski [Mon, 20 Jul 2015 21:35:00 +0000 (17:35 -0400)] 
Buffer rows to reduce number of chunks

This patch reduces the number of chunks in an HTTP chunked response body
by coalescing multiple rows into a single transmission. The default
value is chosen to fill a standard Ethernet frame and can be configured
by setting

     chunked_response_buffer = 1490

Note that the same setting is several other streaming responses (e.g.
_changes, _all_docs, _views).


7 years agoUse a record for callback accumulator
Adam Kocoloski [Mon, 20 Jul 2015 21:26:12 +0000 (17:26 -0400)] 
Use a record for callback accumulator

This allows us to extend the state stored in the accumulator more

7 years agoUse dynamic handlers 8/head
ILYA Khlopotov [Wed, 15 Jul 2015 15:43:05 +0000 (08:43 -0700)] 
Use dynamic handlers

We use dynamic handlers for mango related calls which are:

 - `_index`
 - `_explain`
 - `_find`

7 years agoAdd `mango_app` and `mango_sup`
ILYA Khlopotov [Wed, 15 Jul 2015 15:42:14 +0000 (08:42 -0700)] 
Add `mango_app` and `mango_sup`

7 years agoAdd support for index pagination 2652-index-pagination 39/head 6/head
Tony Sun [Mon, 20 Apr 2015 00:47:10 +0000 (17:47 -0700)] 
Add support for index pagination

We add limit and skip parameters to GET so that the dashboard
can utilize these parameters for pagination.


7 years agoRemove write quorum 2663-remove-w-quorum 5/head
Tony Sun [Sat, 18 Apr 2015 19:48:20 +0000 (12:48 -0700)] 
Remove write quorum

The write quorum is saved in the index. We cosmetically remove it.


7 years agoEnable bulk deletes 4/head
Tony Sun [Wed, 1 Apr 2015 22:30:51 +0000 (15:30 -0700)] 
Enable bulk deletes

Add _bulk_delete path to _index so that users can bulk delete
indexes via POST. Users will pass in a list of docids via the POST body.
We delete each index one by one until an error is thrown or all indexes
in the list are deleted. We return a list of successful deletes
and failed deletes along with the ids. For a single delete, we still
throw the same errors as before to be backwards compatible
with any applications expecting an error.

Fixes COUCHDB-2651

7 years agoReturn ddoc id and index name 2645-return-doc-id 3/head 38/head
Tony Sun [Wed, 25 Mar 2015 23:29:31 +0000 (16:29 -0700)] 
Return ddoc id and index name

We return the ddoc id and index name for easier deletion
from the dashboard. We don't return the full design doc because
we want to hide that abstraction of dealing with design docs from
the user.


7 years agoUse different comparison function 2622-fix-cmp-function 2/head
Tony Sun [Wed, 25 Feb 2015 07:19:01 +0000 (23:19 -0800)] 
Use different comparison function

Our mango_json:cmp/2 function used couch_ejson_compare:less_json.
That function returned a boolean value, but we need a number.
Documents were not returned and tests were failing. Changed function
to use couch_ejson_compare:less instead.

Fixes COUCHDB-2622

7 years agoHandle unsatisfiable [empty] ranges tonysun83-start-end-key-issue 1/head
Tony Sun [Tue, 24 Feb 2015 06:23:45 +0000 (22:23 -0800)] 
Handle unsatisfiable [empty] ranges

Queries sometimes contain unsatisfiable ranges (i.e x < 0 and x > 0).
This is indicated by the [empty] value. In this case, we should not
perform a search and simply return 0 documents.

Fixes COUCHDB-2614

7 years agoFix `mango_util:load_ddoc/2`
Klaus Trainer [Fri, 13 Feb 2015 21:40:02 +0000 (22:40 +0100)] 
Fix `mango_util:load_ddoc/2`

Before this change, `mango_util:load_ddoc/2` would generate a
`function_clause` error.  The problem was that `check_lang/1` expects
the document body to be an EJSON object if the document has not been
deleted.  However, the document body would be a binary instead, as it is

We now make sure that the document body is an EJSON object by adding the
`ejson_body` option when retrieving the document.

7 years agoUpgrade to couch_mrview #2
Robert Newson [Sun, 8 Feb 2015 15:22:36 +0000 (15:22 +0000)] 
Upgrade to couch_mrview #2

7 years agoConvert from twig to couch_log
Robert Newson [Sun, 8 Feb 2015 13:56:28 +0000 (13:56 +0000)] 
Convert from twig to couch_log

7 years agoUpgrade to couch_mrview
Robert Newson [Sun, 8 Feb 2015 13:39:01 +0000 (13:39 +0000)] 
Upgrade to couch_mrview

7 years agoRemove reference to _text indexes
Robert Newson [Sun, 8 Feb 2015 13:34:46 +0000 (13:34 +0000)] 
Remove reference to _text indexes

7 years agoMerge pull request #21 from cloudant/43621-mango-escape-period
Tony Sun [Fri, 23 Jan 2015 23:43:42 +0000 (15:43 -0800)] 
Merge pull request #21 from cloudant/43621-mango-escape-period

43621 mango escape period

7 years agoAdd tests to test for field names with period
Tony Sun [Thu, 22 Jan 2015 02:21:19 +0000 (18:21 -0800)] 
Add tests to test for field names with period


7 years agoEscape field name with period correctly
Tony Sun [Thu, 22 Jan 2015 02:18:01 +0000 (18:18 -0800)] 
Escape field name with period correctly

Change period escaping mechanism during field indexing
and query building. Rather than escaping the whole field name
at the end, we separate the field name by periods and escape
each component.


7 years agoMerge pull request #20 from cloudant/43531-mango-text-sort-desc
Tony Sun [Wed, 21 Jan 2015 19:56:47 +0000 (11:56 -0800)] 
Merge pull request #20 from cloudant/43531-mango-text-sort-desc

Fix text sort desc

7 years agoFix text sort desc
Tony Sun [Mon, 19 Jan 2015 21:14:26 +0000 (13:14 -0800)] 
Fix text sort desc

Call append_sort_type on field name before appending "-" when the sort
is descending.

BugzId: 43531

7 years agoMerge pull request #19 from cloudant/33294-query-text-search
Tony Sun [Fri, 16 Jan 2015 19:43:18 +0000 (11:43 -0800)] 
Merge pull request #19 from cloudant/33294-query-text-search

Text Search In Mango

7 years agoSupport Text Index Creation
Tony Sun [Thu, 7 Aug 2014 20:11:09 +0000 (13:11 -0700)] 
Support Text Index Creation

Add support for new index type based on Lucene text indexes. This feature
allows users to perform full text search and also improves our ability to
answer complex queries that were preivously not possible.


7 years agoFix queries that include {"$exists": false}
Paul J. Davis [Fri, 9 Jan 2015 22:08:58 +0000 (16:08 -0600)] 
Fix queries that include {"$exists": false}

We were incorrectly stripping documents for which a field didn't exist.

BugzId: 33294

7 years agoIntroduce the $text operator to mango_selector
Paul J. Davis [Fri, 9 Jan 2015 21:49:36 +0000 (15:49 -0600)] 
Introduce the $text operator to mango_selector

This just allows us to handle the $text operator in a selector. There is
a bit of a subtlety in that we apply the $text operator against a field
called $default which looks like an operator. We do this becaus the
query syntax for $text doesn't include a field which confuses a bit of
our other logic which always expects a field name to be present.

BugzId: 33294

7 years agoImplement the use_index query parameter
Paul J. Davis [Fri, 9 Jan 2015 21:32:40 +0000 (15:32 -0600)] 
Implement the use_index query parameter

This adds the ability for users to specify a specific index to use when
responding to a query. There are a few places where its helpful to force
the index selection to a specific index. For instance choosing a more
sparse single column index over an available multi-column index.

BugzId: 33294

7 years agoImplement the _explain endpoint
Paul J. Davis [Fri, 9 Jan 2015 21:43:51 +0000 (15:43 -0600)] 
Implement the _explain endpoint

This returns a JSON blob describing a provided query. It accepts the
same exact POST body parameters as _find but instead of returning query
results it returns a description of the query that would be executed.
This is intended for debugging purposes.

BugzId: 33294

7 years agoMove view specific logic to mango_cursor_view
Paul J. Davis [Fri, 9 Jan 2015 20:21:12 +0000 (14:21 -0600)] 
Move view specific logic to mango_cursor_view

A good portion of mango_cursor turned out to be specific to view based
indexes. This moves the view related logic to mango_cursor_view and
updates mango_cursor to be more generic in preparation for the text
based indexing.

BugzId: 33294

7 years agoMove view specific logic to mango_view_idx
Paul J. Davis [Fri, 9 Jan 2015 18:03:29 +0000 (12:03 -0600)] 
Move view specific logic to mango_view_idx

A lot of the logic in mango_selector is view specific so this moves it
to mango_idx_view to make that more apparent.

BugzId: 33294

7 years agoMove key tests to their own test suite
Paul J. Davis [Fri, 9 Jan 2015 22:06:17 +0000 (16:06 -0600)] 
Move key tests to their own test suite

7 years agoAllow cursors to add KVs to the find response
Paul J. Davis [Thu, 8 Jan 2015 23:48:41 +0000 (17:48 -0600)] 
Allow cursors to add KVs to the find response

This change allows cursors to set top level key/value pairs in the
response to _find requests. This is ground work for Search based indexes
that will need to set a bookmark value for clients.

BugzId: 33294

7 years agoRefactor the test suite
Paul J. Davis [Thu, 8 Jan 2015 23:12:20 +0000 (17:12 -0600)] 
Refactor the test suite

This moves the test suite to using unittest classes so that we can
control the database creation more directly. This also creates randomly
named databases so that we have fewer race conditions during test runs.

BugzId: 33294

7 years agoFix trailing whitespace
Paul J. Davis [Tue, 13 Jan 2015 23:11:35 +0000 (17:11 -0600)] 
Fix trailing whitespace

7 years agoMerge pull request #17 from cloudant/license-headers
Robert Kowalski [Fri, 9 Jan 2015 17:22:57 +0000 (18:22 +0100)] 
Merge pull request #17 from cloudant/license-headers

add license headers to source files

7 years agoMerge pull request #18 from cloudant/change-description
Robert Kowalski [Fri, 9 Jan 2015 16:57:56 +0000 (17:57 +0100)] 
Merge pull request #18 from cloudant/change-description

change description

7 years agochange description
Robert Kowalski [Fri, 9 Jan 2015 13:34:39 +0000 (14:34 +0100)] 
change description

this will also be used in CouchDB after the ip-clearance

7 years agoadd license headers to source files
Robert Kowalski [Fri, 9 Jan 2015 13:29:03 +0000 (14:29 +0100)] 
add license headers to source files