summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTony Sun <tony.sun427@gmail.com>2020-08-31 11:24:48 -0700
committerGitHub <noreply@github.com>2020-08-31 11:24:48 -0700
commit0c3c4b611326561867ef8752c417aacce644a901 (patch)
treedb283f71273e61b4fe1ec604b67cb3bbcdc4792b
parentac695208aa6fb2ee6ac6c7d55aa6abd82c16785e (diff)
parentc14569c9f4d568e45229641e31e5d3790a813a9f (diff)
downloadcouchdb-0c3c4b611326561867ef8752c417aacce644a901.tar.gz
Merge pull request #3116 from apache/fix-explain-text-indexes
fix bookmark passing with text indexes
-rw-r--r--src/mango/src/mango_cursor_text.erl17
-rw-r--r--src/mango/test/08-text-limit-test.py10
2 files changed, 19 insertions, 8 deletions
diff --git a/src/mango/src/mango_cursor_text.erl b/src/mango/src/mango_cursor_text.erl
index 43ef84e4c..5989f342e 100644
--- a/src/mango/src/mango_cursor_text.erl
+++ b/src/mango/src/mango_cursor_text.erl
@@ -43,7 +43,7 @@
}).
-create(Db, Indexes, Selector, Opts0) ->
+create(Db, Indexes, Selector, Opts) ->
Index = case Indexes of
[Index0] ->
Index0;
@@ -51,7 +51,7 @@ create(Db, Indexes, Selector, Opts0) ->
?MANGO_ERROR(multiple_text_indexes)
end,
- Opts = unpack_bookmark(couch_db:name(Db), Opts0),
+ Bookmark = unpack_bookmark(couch_db:name(Db), Opts),
DreyfusLimit = get_dreyfus_limit(),
Limit = erlang:min(DreyfusLimit, couch_util:get_value(limit, Opts, mango_opts:default_limit())),
@@ -66,7 +66,8 @@ create(Db, Indexes, Selector, Opts0) ->
opts = Opts,
limit = Limit,
skip = Skip,
- fields = Fields
+ fields = Fields,
+ bookmark = Bookmark
}}.
@@ -90,7 +91,8 @@ execute(Cursor, UserFun, UserAcc) ->
skip = Skip,
selector = Selector,
opts = Opts,
- execution_stats = Stats
+ execution_stats = Stats,
+ bookmark = Bookmark
} = Cursor,
Query = mango_selector_text:convert(Selector),
QueryArgs = #index_query_args{
@@ -104,7 +106,7 @@ execute(Cursor, UserFun, UserAcc) ->
dbname = couch_db:name(Db),
ddocid = ddocid(Idx),
idx_name = mango_idx:name(Idx),
- bookmark = get_bookmark(Opts),
+ bookmark = Bookmark,
limit = Limit,
skip = Skip,
query_args = QueryArgs,
@@ -282,7 +284,7 @@ pack_bookmark(Bookmark) ->
unpack_bookmark(DbName, Opts) ->
- NewBM = case lists:keyfind(bookmark, 1, Opts) of
+ case lists:keyfind(bookmark, 1, Opts) of
{_, nil} ->
[];
{_, Bin} ->
@@ -291,8 +293,7 @@ unpack_bookmark(DbName, Opts) ->
catch _:_ ->
?MANGO_ERROR({invalid_bookmark, Bin})
end
- end,
- lists:keystore(bookmark, 1, Opts, {bookmark, NewBM}).
+ end.
ddocid(Idx) ->
diff --git a/src/mango/test/08-text-limit-test.py b/src/mango/test/08-text-limit-test.py
index ae827813d..ef0509ff3 100644
--- a/src/mango/test/08-text-limit-test.py
+++ b/src/mango/test/08-text-limit-test.py
@@ -133,3 +133,13 @@ class LimitTests(mango.LimitDocsTextTests):
assert json["bookmark"] != bm
bm = json["bookmark"]
assert len(seen_docs) == len(limit_docs.DOCS)
+
+ def run_explain_check(self, size):
+ q = {"age": {"$gt": 0}}
+ seen_docs = set()
+ bm = None
+ results1 = self.db.find(q, limit=size, bookmark=bm, return_raw=True)
+ assert results1["bookmark"] != bm
+ bm = results1["bookmark"]
+ results2 = self.db.find(q, limit=size, bookmark=bm, explain=True)
+ assert results2["bookmark"] == bm