Merge pull request #3116 from apache/fix-explain-text-indexes

fix bookmark passing with text indexes
diff --git a/src/mango/src/mango_cursor_text.erl b/src/mango/src/mango_cursor_text.erl
index 43ef84e..5989f34 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 @@
             ?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 @@
         opts = Opts,
         limit = Limit,
         skip = Skip,
-        fields = Fields
+        fields = Fields,
+        bookmark = Bookmark
     }}.
 
 
@@ -90,7 +91,8 @@
         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 @@
         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 @@
 
 
 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 @@
             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 ae82781..ef0509f 100644
--- a/src/mango/test/08-text-limit-test.py
+++ b/src/mango/test/08-text-limit-test.py
@@ -133,3 +133,13 @@
             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