You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by ro...@apache.org on 2015/02/03 16:13:46 UTC
[39/50] [abbrv] couchdb-mango git commit: Fix queries that include
{"$exists": false}
Fix queries that include {"$exists": false}
We were incorrectly stripping documents for which a field didn't exist.
BugzId: 33294
Project: http://git-wip-us.apache.org/repos/asf/couchdb-mango/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mango/commit/bb91429c
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mango/tree/bb91429c
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mango/diff/bb91429c
Branch: refs/heads/master
Commit: bb91429c143d79e7c9a053233852ec2600ea23a0
Parents: 8f3b355
Author: Paul J. Davis <pa...@gmail.com>
Authored: Fri Jan 9 16:08:58 2015 -0600
Committer: Paul J. Davis <pa...@gmail.com>
Committed: Fri Jan 16 13:32:50 2015 -0600
----------------------------------------------------------------------
src/mango_selector.erl | 2 ++
test/03-operator-test.py | 10 ++++++++++
2 files changed, 12 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/bb91429c/src/mango_selector.erl
----------------------------------------------------------------------
diff --git a/src/mango_selector.erl b/src/mango_selector.erl
index 4da394d..56f2072 100644
--- a/src/mango_selector.erl
+++ b/src/mango_selector.erl
@@ -501,6 +501,8 @@ match({[{<<"$", _/binary>>=Op, _}]}, _, _) ->
% bad_path in which case matching fails.
match({[{Field, Cond}]}, Value, Cmp) ->
case mango_doc:get_field(Value, Field) of
+ not_found when Cond == {[{<<"$exists">>, false}]} ->
+ true;
not_found ->
false;
bad_path ->
http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/bb91429c/test/03-operator-test.py
----------------------------------------------------------------------
diff --git a/test/03-operator-test.py b/test/03-operator-test.py
index 27418a6..d8a7c29 100644
--- a/test/03-operator-test.py
+++ b/test/03-operator-test.py
@@ -80,3 +80,13 @@ class OperatorTests(mango.UserDocsTests):
assert len(docs) == 2
assert docs[0]["user_id"] == 2
assert docs[1]["user_id"] == 10
+
+ def test_exists_false(self):
+ docs = self.db.find({
+ "age": {"$gt": 0},
+ "twitter": {"$exists": False}
+ })
+ user_ids = [2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 14]
+ assert len(docs) == len(user_ids)
+ for doc in docs:
+ assert doc["user_id"] in user_ids