You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by to...@apache.org on 2020/01/25 00:33:30 UTC

[couchdb] branch mango-whitespace created (now adfb472)

This is an automated email from the ASF dual-hosted git repository.

tonysun83 pushed a change to branch mango-whitespace
in repository https://gitbox.apache.org/repos/asf/couchdb.git.


      at adfb472  quote strings for all text values

This branch includes the following new commits:

     new adfb472  quote strings for all text values

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[couchdb] 01/01: quote strings for all text values

Posted by to...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

tonysun83 pushed a commit to branch mango-whitespace
in repository https://gitbox.apache.org/repos/asf/couchdb.git

commit adfb472b6c22821737c34cd4fde6aeb08849e9f6
Author: Tony Sun <to...@gmail.com>
AuthorDate: Fri Jan 24 16:20:56 2020 -0800

    quote strings for all text values
    
    When a user issues a range query $lt, $lte, $gt, $gte for text indexes,
    the query is translated into a MIN, MAX range query against clouseau.
    If not quoted, an error occurs:
    
    {"error":"text_search_error","reason":"Cannot parse
    '(a_3astring:[\"\" TO string\\ containing\\ space})'..}
    
    This is because the string is broken up into 3 tokens which the parser
    cannot parse. If we add quotes to the string, the the range query works
    correctly.
---
 src/mango/src/mango_selector_text.erl |  3 ++-
 src/mango/test/06-basic-text-test.py  | 18 ++++++++++++++++++
 src/mango/test/user_docs.py           |  1 +
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/src/mango/src/mango_selector_text.erl b/src/mango/src/mango_selector_text.erl
index 9e1116d..b3b61ff 100644
--- a/src/mango/src/mango_selector_text.erl
+++ b/src/mango/src/mango_selector_text.erl
@@ -366,7 +366,8 @@ value_str(Value) when is_binary(Value) ->
         true ->
             <<"\"", Value/binary, "\"">>;
         false ->
-            mango_util:lucene_escape_query_value(Value)
+            Escaped = mango_util:lucene_escape_query_value(Value),
+            <<"\"", Escaped/binary, "\"">>
     end;
 value_str(Value) when is_integer(Value) ->
     list_to_binary(integer_to_list(Value));
diff --git a/src/mango/test/06-basic-text-test.py b/src/mango/test/06-basic-text-test.py
index db7cf32..a3fe383 100644
--- a/src/mango/test/06-basic-text-test.py
+++ b/src/mango/test/06-basic-text-test.py
@@ -95,6 +95,9 @@ class BasicTextTests(mango.UserDocsTextTests):
         assert len(docs) == 1
         assert docs[0]["company"] == "Affluex"
 
+        docs = self.db.find({"foo": {"$lt": "bar car apple"}})
+        assert len(docs) == 0
+
     def test_lte(self):
         docs = self.db.find({"age": {"$lte": 21}})
         assert len(docs) == 0
@@ -113,6 +116,10 @@ class BasicTextTests(mango.UserDocsTextTests):
         for d in docs:
             assert d["user_id"] in (0, 11)
 
+        docs = self.db.find({"foo": {"$lte": "bar car apple"}})
+        assert len(docs) == 1
+        assert docs[0]["user_id"] == 14
+
     def test_eq(self):
         docs = self.db.find({"age": 21})
         assert len(docs) == 0
@@ -156,6 +163,13 @@ class BasicTextTests(mango.UserDocsTextTests):
         docs = self.db.find({"company": {"$gt": "Zialactic"}})
         assert len(docs) == 0
 
+        docs = self.db.find({"foo": {"$gt": "bar car apple"}})
+        assert len(docs) == 0
+
+        docs = self.db.find({"foo": {"$gt": "bar car"}})
+        assert len(docs) == 1
+        assert docs[0]["user_id"] == 14
+
     def test_gte(self):
         docs = self.db.find({"age": {"$gte": 77}})
         assert len(docs) == 2
@@ -178,6 +192,10 @@ class BasicTextTests(mango.UserDocsTextTests):
         assert len(docs) == 1
         assert docs[0]["company"] == "Zialactic"
 
+        docs = self.db.find({"foo": {"$gte": "bar car apple"}})
+        assert len(docs) == 1
+        assert docs[0]["user_id"] == 14
+
     def test_and(self):
         docs = self.db.find({"age": 22, "manager": True})
         assert len(docs) == 1
diff --git a/src/mango/test/user_docs.py b/src/mango/test/user_docs.py
index e049535..f6a3396 100644
--- a/src/mango/test/user_docs.py
+++ b/src/mango/test/user_docs.py
@@ -343,6 +343,7 @@ DOCS = [
             "city": "Axis",
             "address": {"street": "Brightwater Avenue", "number": 1106},
         },
+        "foo" : "bar car apple",
         "company": "Pharmex",
         "email": "faithhess@pharmex.com",
         "favorites": ["Erlang", "Python", "Lisp"],