This is an automated email from the ASF dual-hosted git repository. garren pushed a commit to branch fdb-mango-indexes in repository https://gitbox.apache.org/repos/asf/couchdb.git
commit 7376b6efbd46a69d24f48d138b443370d5d7a3bd Author: Garren Smith <[email protected]> AuthorDate: Mon Feb 3 13:19:22 2020 +0200 fix loading doc body in mango_idx:list --- src/mango/src/mango_cursor_view.erl | 4 ---- src/mango/src/mango_httpd.erl | 4 +++- src/mango/src/mango_idx.erl | 24 +++++++++++++++++++----- src/mango/src/mango_idx_view.hrl | 1 + src/mango/src/mango_indexer.erl | 1 - src/mango/test/11-ignore-design-docs-test.py | 4 +--- src/mango/test/12-use-correct-index-test.py | 2 +- 7 files changed, 25 insertions(+), 15 deletions(-) diff --git a/src/mango/src/mango_cursor_view.erl b/src/mango/src/mango_cursor_view.erl index 9669b5f..15eb55d 100644 --- a/src/mango/src/mango_cursor_view.erl +++ b/src/mango/src/mango_cursor_view.erl @@ -61,10 +61,6 @@ create(Db, Indexes, Selector, Opts) -> explain(Cursor) -> - #cursor{ - opts = Opts - } = Cursor, - #{ start_key := StartKey, end_key := EndKey, diff --git a/src/mango/src/mango_httpd.erl b/src/mango/src/mango_httpd.erl index b046229..d5e9cfa 100644 --- a/src/mango/src/mango_httpd.erl +++ b/src/mango/src/mango_httpd.erl @@ -34,7 +34,9 @@ handle_req(#httpd{} = Req, Db) -> try - handle_req_int(Req, Db) + fabric2_fdb:transactional(Db, fun (TxDb) -> + handle_req_int(Req, TxDb) + end) catch throw:{mango_error, Module, Reason} -> case mango_error:info(Module, Reason) of diff --git a/src/mango/src/mango_idx.erl b/src/mango/src/mango_idx.erl index 3a579dc..cf3f507 100644 --- a/src/mango/src/mango_idx.erl +++ b/src/mango/src/mango_idx.erl @@ -75,11 +75,9 @@ ddoc_fold_cb({row, Row}, Acc) -> db := Db, rows := Rows } = Acc, - {_, Id} = lists:keyfind(id, 1, Row), - io:format("VIEW ~p ~n", [Row]), - {ok, Doc} = fabric2_db:open_doc(Db, Id), - JSONDoc = couch_doc:to_json_obj(Doc, []), - {Props} = JSONDoc, + + {Props} = JSONDoc = get_doc(Db, Row), + case proplists:get_value(<<"language">>, Props) of <<"query">> -> Idx = from_ddoc(Db, JSONDoc), @@ -89,6 +87,22 @@ ddoc_fold_cb({row, Row}, Acc) -> end. +get_doc(Db, Row) -> + {_, Id} = lists:keyfind(id, 1, Row), + RevInfo = get_rev_info(Row), + Doc = fabric2_fdb:get_doc_body(Db, Id, RevInfo), + couch_doc:to_json_obj(Doc, []). + + +get_rev_info(Row) -> + {value, {[{rev, RevBin}]}} = lists:keyfind(value, 1, Row), + Rev = couch_doc:parse_rev(RevBin), + #{ + rev_id => Rev, + rev_path => [] + }. + + get_usable_indexes(Db, Selector, Opts) -> ExistingIndexes = mango_idx:list(Db), GlobalIndexes = mango_cursor:remove_indexes_with_partial_filter_selector( diff --git a/src/mango/src/mango_idx_view.hrl b/src/mango/src/mango_idx_view.hrl index a6fc2b4..6ebe68e 100644 --- a/src/mango/src/mango_idx_view.hrl +++ b/src/mango/src/mango_idx_view.hrl @@ -12,3 +12,4 @@ %%-define(MAX_JSON_OBJ, {<<255, 255, 255, 255>>}). -define(MAX_JSON_OBJ, <<255>>). +%%-define(MAX_JSON_OBJ, {[{<<"ZZZ">>, <<"ZZZ">>}]}). diff --git a/src/mango/src/mango_indexer.erl b/src/mango/src/mango_indexer.erl index 66dae63..c22b9cf 100644 --- a/src/mango/src/mango_indexer.erl +++ b/src/mango/src/mango_indexer.erl @@ -68,7 +68,6 @@ doc_id(#doc{id = DocId}, _) -> % to build new index modify_int(_Db, _Change, #doc{id = <<?DESIGN_DOC_PREFIX, _/binary>>} = Doc, _PrevDoc) -> - io:format("DESIGN DOC SAVED ~p ~n", [Doc]), ok; modify_int(Db, delete, _, PrevDoc) -> diff --git a/src/mango/test/11-ignore-design-docs-test.py b/src/mango/test/11-ignore-design-docs-test.py index bb8cf3a..fd9b688 100644 --- a/src/mango/test/11-ignore-design-docs-test.py +++ b/src/mango/test/11-ignore-design-docs-test.py @@ -16,11 +16,9 @@ import unittest DOCS = [ {"_id": "_design/my-design-doc"}, {"_id": "54af50626de419f5109c962f", "user_id": 0, "age": 10, "name": "Jimi"}, - {"_id": "54af50622071121b25402dc3", "user_id": 1, "age": 11, "name": "Eddie"}, + {"_id": "54af50622071121b25402dc3", "user_id": 1, "age": 11, "name": "Eddie"} ] -# [{erlfdb_nif,erlfdb_future_get,[#Ref<0.1264327726.2786983941.139980>],[]},{erlfdb,fold_range_int,4,[{file,"src/erlfdb.erl"},{line,675}]},{fabric2_fdb,get_winning_revs_wait,2,[{file,"src/fabric2_fdb.erl"},{line,474}]},{fabric2_db,'-open_doc/3-fun-1-',5,[{file,"src/fabric2_db.erl"},{line,503}]},{mango_idx,ddoc_fold_cb,2,[{file,"src/mango_idx.erl"},{line,80}]},{fabric2_db,'-fold_docs/4-fun-0-',6,[{file,"src/fabric2_db.erl"},{line,795}]},{fabric2_fdb,fold_range_cb,2,[{file,"src/fabric2_fdb [...] - class IgnoreDesignDocsForAllDocsIndexTests(mango.DbPerClass): def test_should_not_return_design_docs(self): diff --git a/src/mango/test/12-use-correct-index-test.py b/src/mango/test/12-use-correct-index-test.py index 2de88a2..987f507 100644 --- a/src/mango/test/12-use-correct-index-test.py +++ b/src/mango/test/12-use-correct-index-test.py @@ -117,7 +117,7 @@ class ChooseCorrectIndexForDocs(mango.DbPerClass): self.assertEqual(len(docs), 1) explain = self.db.find(selector, explain=True) self.assertEqual(explain["index"]["ddoc"], "_design/bbb") - self.assertEqual(explain["mrargs"]["end_key"], [10, "<MAX>"]) + self.assertEqual(explain["args"]["end_key"], [10, "<MAX>"]) # all documents contain an _id and _rev field they # should not be used to restrict indexes based on the
