You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ga...@apache.org on 2017/05/10 06:35:07 UTC
[couchdb] branch master updated: Mango $allMatch return false for
empty list (#511)
This is an automated email from the ASF dual-hosted git repository.
garren pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/couchdb.git
The following commit(s) were added to refs/heads/master by this push:
new 0460a70 Mango $allMatch return false for empty list (#511)
0460a70 is described below
commit 0460a70d1499d805388fc14edcc4e1e7c57e0be4
Author: garren smith <ga...@gmail.com>
AuthorDate: Wed May 10 08:35:04 2017 +0200
Mango $allMatch return false for empty list (#511)
The $allMatch selector returns false for a document with an empty list
---
src/mango/src/mango_selector.erl | 2 +-
src/mango/test/03-operator-test.py | 18 +++++++++++++++---
2 files changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/mango/src/mango_selector.erl b/src/mango/src/mango_selector.erl
index 691aac7..13e7d88 100644
--- a/src/mango/src/mango_selector.erl
+++ b/src/mango/src/mango_selector.erl
@@ -461,7 +461,7 @@ match({[{<<"$elemMatch">>, _Arg}]}, _Value, _Cmp) ->
% Matches when all elements in values match the
% sub-selector Arg.
-match({[{<<"$allMatch">>, Arg}]}, Values, Cmp) when is_list(Values) ->
+match({[{<<"$allMatch">>, Arg}]}, Values, Cmp) when is_list(Values), length(Values) > 0 ->
try
lists:foreach(fun(V) ->
case match(Arg, V, Cmp) of
diff --git a/src/mango/test/03-operator-test.py b/src/mango/test/03-operator-test.py
index 56c2862..edfd95f 100644
--- a/src/mango/test/03-operator-test.py
+++ b/src/mango/test/03-operator-test.py
@@ -20,7 +20,6 @@ class OperatorTests(mango.UserDocsTests):
"manager": True,
"favorites": {"$all": ["Lisp", "Python"]}
})
- print docs
assert len(docs) == 4
assert docs[0]["user_id"] == 2
assert docs[1]["user_id"] == 12
@@ -59,7 +58,6 @@ class OperatorTests(mango.UserDocsTests):
"bam": True
}}
})
- print docs
assert len(docs) == 1
assert docs[0]["user_id"] == "b"
@@ -94,7 +92,6 @@ class OperatorTests(mango.UserDocsTests):
]
self.db.save_docs(amdocs, w=3)
docs = self.db.find({
- "_id": {"$gt": None},
"bang": {"$allMatch": {
"foo": {"$mod": [2,1]},
"bar": {"$mod": [2,0]}
@@ -102,6 +99,21 @@ class OperatorTests(mango.UserDocsTests):
})
assert len(docs) == 1
assert docs[0]["user_id"] == "a"
+
+ def test_empty_all_match(self):
+ amdocs = [
+ {
+ "bad_doc": "a",
+ "emptybang": []
+ }
+ ]
+ self.db.save_docs(amdocs, w=3)
+ docs = self.db.find({
+ "emptybang": {"$allMatch": {
+ "foo": {"$eq": 2}
+ }}
+ })
+ assert len(docs) == 0
def test_in_operator_array(self):
docs = self.db.find({
--
To stop receiving notification emails like this one, please contact
['"commits@couchdb.apache.org" <co...@couchdb.apache.org>'].