summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Avdey <eiri@eiri.ca>2019-11-06 15:36:25 -0400
committerEric Avdey <eiri@eiri.ca>2019-12-03 13:54:40 -0400
commit2c8966f122943f6aba65bb571dfb50ba6b699fb1 (patch)
tree399869a578d8b0e18f93bded781c72d3ba09ffb1
parentd3ff408f9fe37fde48a51ed1843d3d2709b5e265 (diff)
downloadcouchdb-2c8966f122943f6aba65bb571dfb50ba6b699fb1.tar.gz
Remove view changes interface functions, tests and end-point
-rw-r--r--src/couch/src/couch.app.src3
-rw-r--r--src/couch_mrview/src/couch_mrview.erl102
-rw-r--r--src/couch_mrview/src/couch_mrview_changes.erl18
-rw-r--r--src/couch_mrview/src/couch_mrview_http.erl20
-rw-r--r--src/couch_mrview/src/couch_mrview_test_util.erl24
-rw-r--r--src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl209
-rw-r--r--src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl223
7 files changed, 3 insertions, 596 deletions
diff --git a/src/couch/src/couch.app.src b/src/couch/src/couch.app.src
index 2b642c085..12ec29e12 100644
--- a/src/couch/src/couch.app.src
+++ b/src/couch/src/couch.app.src
@@ -79,8 +79,7 @@
{"_rewrite", "{couch_httpd_rewrite, handle_rewrite_req}"},
{"_show", "{couch_mrview_show, handle_doc_show_req}"},
{"_update", "{couch_mrview_show, handle_doc_update_req}"},
- {"_view", "{couch_mrview_http, handle_view_req}"},
- {"_view_changes", "{couch_mrview_http, handle_view_changes_req}"}
+ {"_view", "{couch_mrview_http, handle_view_req}"}
]}
]}
]}.
diff --git a/src/couch_mrview/src/couch_mrview.erl b/src/couch_mrview/src/couch_mrview.erl
index d549568ec..1cdc91809 100644
--- a/src/couch_mrview/src/couch_mrview.erl
+++ b/src/couch_mrview/src/couch_mrview.erl
@@ -15,9 +15,6 @@
-export([validate/2]).
-export([query_all_docs/2, query_all_docs/4]).
-export([query_view/3, query_view/4, query_view/6, get_view_index_pid/4]).
--export([view_changes_since/5]).
--export([view_changes_since/6, view_changes_since/7]).
--export([count_view_changes_since/4, count_view_changes_since/5]).
-export([get_info/2]).
-export([trigger_update/2, trigger_update/3]).
-export([get_view_info/3]).
@@ -288,68 +285,6 @@ query_view(Db, {Type, View, Ref}, Args, Callback, Acc) ->
erlang:demonitor(Ref, [flush])
end.
-view_changes_since(View, StartSeq, Fun, Opts0, Acc) ->
- Wrapper = fun(KV, _, Acc1) ->
- Fun(KV, Acc1)
- end,
- Opts = [{start_key, {StartSeq + 1, <<>>}}] ++ Opts0,
- {ok, _LastRed, AccOut} = couch_btree:fold(View#mrview.seq_btree, Wrapper, Acc, Opts),
- {ok, AccOut}.
-
-view_changes_since(Db, DDoc, VName, StartSeq, Fun, Acc) ->
- view_changes_since(Db, DDoc, VName, StartSeq, Fun, [], Acc).
-
-view_changes_since(Db, DDoc, VName, StartSeq, Fun, Options, Acc) ->
- Args0 = make_view_changes_args(Options),
- {ok, {_, View, _}, _, Args} = couch_mrview_util:get_view(Db, DDoc, VName,
- Args0),
- #mrview{seq_indexed=SIndexed, keyseq_indexed=KSIndexed} = View,
- IsKSQuery = is_key_byseq(Options),
- if (SIndexed andalso not IsKSQuery) orelse (KSIndexed andalso IsKSQuery) ->
- OptList = make_view_changes_opts(StartSeq, Options, Args),
- Btree = case IsKSQuery of
- true -> View#mrview.key_byseq_btree;
- _ -> View#mrview.seq_btree
- end,
- AccOut = lists:foldl(fun(Opts, Acc0) ->
- {ok, _R, A} = couch_mrview_util:fold_changes(
- Btree, Fun, Acc0, Opts),
- A
- end, Acc, OptList),
- {ok, AccOut};
- true ->
- {error, seqs_not_indexed}
- end.
-
-count_view_changes_since(Db, DDoc, VName, SinceSeq) ->
- count_view_changes_since(Db, DDoc, VName, SinceSeq, []).
-
-count_view_changes_since(Db, DDoc, VName, SinceSeq, Options) ->
- Args0 = make_view_changes_args(Options),
- {ok, {_Type, View, _Ref}, _, Args} = couch_mrview_util:get_view(
- Db, DDoc, VName, Args0),
- case View#mrview.seq_indexed of
- true ->
- OptList = make_view_changes_opts(SinceSeq, Options, Args),
- Btree = case is_key_byseq(Options) of
- true -> View#mrview.key_byseq_btree;
- _ -> View#mrview.seq_btree
- end,
- RedFun = fun(_SeqStart, PartialReds, 0) ->
- {ok, couch_btree:final_reduce(Btree, PartialReds)}
- end,
- lists:foldl(fun(Opts, Acc0) ->
- case couch_btree:fold_reduce(Btree, RedFun, 0, Opts) of
- {ok, N} when is_integer(N) ->
- Acc0 + N;
- {ok, N} when is_tuple(N) ->
- Acc0 + element(1, N)
- end
- end, 0, OptList);
- _ ->
- {error, seqs_not_indexed}
- end.
-
get_info(Db, DDoc) ->
{ok, Pid} = couch_index_server:get_index(couch_mrview_index, Db, DDoc),
@@ -371,19 +306,9 @@ get_view_info(Db, DDoc, VName) ->
%% get the total number of rows
{ok, TotalRows} = couch_mrview_util:get_row_count(View),
- %% get the total number of sequence logged in this view
- SeqBtree = View#mrview.seq_btree,
- {ok, TotalSeqs} = case SeqBtree of
- nil -> {ok, 0};
- _ ->
- couch_btree:full_reduce(SeqBtree)
- end,
-
- {ok, [{seq_indexed, View#mrview.seq_indexed},
- {update_seq, View#mrview.update_seq},
+ {ok, [{update_seq, View#mrview.update_seq},
{purge_seq, View#mrview.purge_seq},
- {total_rows, TotalRows},
- {total_seqs, TotalSeqs}]}.
+ {total_rows, TotalRows}]}.
%% @doc refresh a view index
@@ -774,26 +699,3 @@ lookup_index(Key) ->
record_info(fields, mrargs), lists:seq(2, record_info(size, mrargs))
),
couch_util:get_value(Key, Index).
-
-
-is_key_byseq(Options) ->
- lists:any(fun({K, _}) ->
- lists:member(K, [start_key, end_key, start_key_docid,
- end_key_docid, keys])
- end, Options).
-
-make_view_changes_args(Options) ->
- case is_key_byseq(Options) of
- true ->
- to_mrargs(Options);
- false ->
- #mrargs{}
- end.
-
-make_view_changes_opts(StartSeq, Options, Args) ->
- case is_key_byseq(Options) of
- true ->
- couch_mrview_util:changes_key_opts(StartSeq, Args);
- false ->
- [[{start_key, {StartSeq+1, <<>>}}] ++ Options]
- end.
diff --git a/src/couch_mrview/src/couch_mrview_changes.erl b/src/couch_mrview/src/couch_mrview_changes.erl
deleted file mode 100644
index ae5aa6e94..000000000
--- a/src/couch_mrview/src/couch_mrview_changes.erl
+++ /dev/null
@@ -1,18 +0,0 @@
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-%
--module(couch_mrview_changes).
-
--export([handle_view_changes/5]).
-
-handle_view_changes(Args, Req, Db, DDocId, ViewName) ->
- couch_changes:handle_changes(Args, Req, Db, {view, DDocId, ViewName}).
diff --git a/src/couch_mrview/src/couch_mrview_http.erl b/src/couch_mrview/src/couch_mrview_http.erl
index cdf498e5d..74d5ca274 100644
--- a/src/couch_mrview/src/couch_mrview_http.erl
+++ b/src/couch_mrview/src/couch_mrview_http.erl
@@ -16,7 +16,6 @@
handle_all_docs_req/2,
handle_local_docs_req/2,
handle_design_docs_req/2,
- handle_view_changes_req/3,
handle_reindex_req/3,
handle_view_req/3,
handle_temp_view_req/2,
@@ -81,25 +80,6 @@ handle_reindex_req(Req, _Db, _DDoc) ->
chttpd:send_method_not_allowed(Req, "POST").
-handle_view_changes_req(#httpd{path_parts=[_,<<"_design">>,DDocName,<<"_view_changes">>,ViewName]}=Req, Db, DDoc) ->
- {DDocBody} = DDoc#doc.body,
- case lists:keyfind(<<"options">>, 1, DDocBody) of
- {<<"options">>, {Options}} when is_list(Options) ->
- case lists:keyfind(<<"seq_indexed">>, 1, Options) of
- {<<"seq_indexed">>, true} ->
- ok;
- _ ->
- throw({bad_request, "view changes not enabled"})
- end;
- _ ->
- throw({bad_request, "view changes not enabled"})
- end,
-
- ChangesArgs = couch_httpd_db:parse_changes_query(Req, Db),
- ChangesFun = couch_mrview_changes:handle_view_changes(ChangesArgs, Req, Db, <<"_design/", DDocName/binary>>, ViewName),
- couch_httpd_db:handle_changes_req(Req, Db, ChangesArgs, ChangesFun).
-
-
handle_view_req(#httpd{method='GET',
path_parts=[_, _, DDocName, _, VName, <<"_info">>]}=Req,
Db, _DDoc) ->
diff --git a/src/couch_mrview/src/couch_mrview_test_util.erl b/src/couch_mrview/src/couch_mrview_test_util.erl
index a6242cde7..2dfa64e61 100644
--- a/src/couch_mrview/src/couch_mrview_test_util.erl
+++ b/src/couch_mrview/src/couch_mrview_test_util.erl
@@ -59,30 +59,6 @@ make_docs(_, Since, Count) ->
[doc(I) || I <- lists:seq(Since, Count)].
-ddoc({changes, Opts}) ->
- ViewOpts = case Opts of
- seq_indexed ->
- [{<<"seq_indexed">>, true}];
- keyseq_indexed ->
- [{<<"keyseq_indexed">>, true}];
- seq_indexed_keyseq_indexed ->
- [
- {<<"seq_indexed">>, true},
- {<<"keyseq_indexed">>, true}
- ]
- end,
- couch_doc:from_json_obj({[
- {<<"_id">>, <<"_design/bar">>},
- {<<"options">>, {ViewOpts}},
- {<<"views">>, {[
- {<<"baz">>, {[
- {
- <<"map">>,
- <<"function(doc) {emit(doc.val.toString(), doc.val);}">>
- }
- ]}}
- ]}}
- ]});
ddoc(map) ->
couch_doc:from_json_obj({[
{<<"_id">>, <<"_design/bar">>},
diff --git a/src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl
deleted file mode 100644
index 67106419f..000000000
--- a/src/couch_mrview/test/eunit/couch_mrview_changes_since_tests.erl
+++ /dev/null
@@ -1,209 +0,0 @@
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
--module(couch_mrview_changes_since_tests).
-
--include_lib("couch/include/couch_eunit.hrl").
--include_lib("couch/include/couch_db.hrl").
-
--define(TIMEOUT, 1000).
-
-teardown(Db) ->
- couch_db:close(Db),
- couch_server:delete(couch_db:name(Db), [?ADMIN_CTX]),
- ok.
-
-changes_since_basic_test_() ->
- {
- "changes_since tests",
- {
- setup,
- fun test_util:start_couch/0, fun test_util:stop_couch/1,
- {
- foreach,
- fun() ->
- Type = {changes, seq_indexed},
- {ok, Db} = couch_mrview_test_util:init_db(?tempdb(), Type),
- Db
- end,
- fun teardown/1,
- [
- fun test_basic/1,
- fun test_basic_since/1,
- fun test_basic_count/1,
- fun test_basic_count_since/1,
- fun test_compact/1
- ]
- }
- }
- }.
-
-changes_since_range_test_() ->
- {
- "changes_since_range tests",
- {
- setup,
- fun test_util:start_couch/0, fun test_util:stop_couch/1,
- {
- foreach,
- fun() ->
- Type = {changes, keyseq_indexed},
- {ok, Db} = couch_mrview_test_util:init_db(?tempdb(), Type),
- Db
- end,
- fun teardown/1,
- [
- fun test_range/1,
- fun test_range_since/1
- ]
- }
- }
- }.
-
-changes_since_range_count_test_() ->
- {
- "changes_since_range_count tests",
- {
- setup,
- fun test_util:start_couch/0, fun test_util:stop_couch/1,
- {
- foreach,
- fun() ->
- Type = {changes, seq_indexed_keyseq_indexed},
- {ok, Db} = couch_mrview_test_util:init_db(?tempdb(), Type),
- Db
- end,
- fun teardown/1,
- [
- fun test_range_count/1,
- fun test_range_count_since/1,
- fun test_remove_key/1
- ]
- }
- }
- }.
-
-test_basic(Db) ->
- Result = run_query(Db, 0, []),
- Expect = {ok, [
- {{2, <<"1">>, <<"1">>}, 1},
- {{3, <<"10">>, <<"10">>}, 10},
- {{4, <<"2">>, <<"2">>}, 2},
- {{5, <<"3">>, <<"3">>}, 3},
- {{6, <<"4">>, <<"4">>}, 4},
- {{7, <<"5">>, <<"5">>}, 5},
- {{8, <<"6">>, <<"6">>}, 6},
- {{9, <<"7">>, <<"7">>}, 7},
- {{10, <<"8">>, <<"8">>}, 8},
- {{11, <<"9">>, <<"9">>}, 9}
- ]},
- ?_assertEqual(Result, Expect).
-
-
-test_range(Db) ->
- Range = [{start_key, <<"3">>}, {end_key, <<"5">>}],
- Result = run_query(Db, 0, Range),
- Expect = {ok, [
- {{5, <<"3">>, <<"3">>}, 3},
- {{6, <<"4">>, <<"4">>}, 4},
- {{7, <<"5">>, <<"5">>}, 5}
- ]},
- ?_assertEqual(Result, Expect).
-
-test_basic_since(Db) ->
- Result = run_query(Db, 5, []),
- Expect = {ok, [
- {{6, <<"4">>, <<"4">>}, 4},
- {{7, <<"5">>, <<"5">>}, 5},
- {{8, <<"6">>, <<"6">>}, 6},
- {{9, <<"7">>, <<"7">>}, 7},
- {{10, <<"8">>, <<"8">>}, 8},
- {{11, <<"9">>, <<"9">>}, 9}
- ]},
- ?_assertEqual(Result, Expect).
-
-test_range_since(Db) ->
- Range = [{start_key, <<"3">>}, {end_key, <<"5">>}],
- Result = run_query(Db, 5, Range),
- Expect = {ok, [
- {{6, <<"4">>, <<"4">>}, 4},
- {{7, <<"5">>, <<"5">>}, 5}
- ]},
- ?_assertEqual(Result, Expect).
-
-test_basic_count(Db) ->
- Result = run_count_query(Db, 0, []),
- ?_assertEqual(Result, 10).
-
-test_range_count(Db) ->
- Range = [{start_key, <<"3">>}, {end_key, <<"5">>}],
- Result = run_count_query(Db, 0, Range),
- ?_assertEqual(Result, 3).
-
-test_basic_count_since(Db) ->
- Result = run_count_query(Db, 5, []),
- ?_assertEqual(Result, 6).
-
-test_range_count_since(Db) ->
- Range = [{start_key, <<"3">>}, {end_key, <<"5">>}],
- Result = run_count_query(Db, 5, Range),
- ?_assertEqual(Result, 2).
-
-test_compact(Db) ->
- Result = couch_mrview:compact(Db, <<"_design/bar">>),
- Count = run_count_query(Db, 0, []),
- [?_assertEqual(Result, ok), ?_assertEqual(Count, 10)].
-
-test_remove_key(Db) ->
- %% add new doc
- Doc = couch_mrview_test_util:doc(11),
- {ok, Rev} = couch_db:update_doc(Db, Doc, []),
- RevStr = couch_doc:rev_to_str(Rev),
- {ok, Db1} = couch_db:reopen(Db),
- Result = run_count_query(Db1, 0, []),
- %% check new view key
- Range = [{start_key, <<"11">>}, {end_key, <<"11">>}],
- Result1 = run_query(Db1, 0, Range),
- Expect = {ok, [
- {{12, <<"11">>, <<"11">>}, 11}
- ]},
-
- %% delete doc
- Doc2 = couch_doc:from_json_obj({[
- {<<"_id">>, <<"11">>},
- {<<"_rev">>, RevStr},
- {<<"_deleted">>, true}
- ]}),
- {ok, _} = couch_db:update_doc(Db1, Doc2, []),
- {ok, Db2} = couch_db:reopen(Db1),
- Result2 = run_count_query(Db2, 0, []),
- %% check new view key
- Result3 = run_query(Db2, 0, Range),
- Expect2 = {ok, [
- {{13, <<"11">>, <<"11">>}, removed}
- ]},
- [
- ?_assertEqual(Result, 11),
- ?_assertEqual(Result1, Expect),
- ?_assertEqual(Result2, 11),
- ?_assertEqual(Result3, Expect2)
- ].
-
-run_query(Db, Since, Opts) ->
- Fun = fun(KV, Acc) -> {ok, [KV | Acc]} end,
- {ok, R} = couch_mrview:view_changes_since(Db, <<"_design/bar">>, <<"baz">>,
- Since, Fun, Opts, []),
- {ok, lists:reverse(R)}.
-
-run_count_query(Db, Since, Opts) ->
- couch_mrview:count_view_changes_since(Db, <<"_design/bar">>, <<"baz">>,
- Since, Opts).
diff --git a/src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl b/src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl
deleted file mode 100644
index d8dd28773..000000000
--- a/src/couch_mrview/test/eunit/couch_mrview_index_changes_tests.erl
+++ /dev/null
@@ -1,223 +0,0 @@
-% Licensed under the Apache License, Version 2.0 (the "License"); you may not
-% use this file except in compliance with the License. You may obtain a copy of
-% the License at
-%
-% http://www.apache.org/licenses/LICENSE-2.0
-%
-% Unless required by applicable law or agreed to in writing, software
-% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
-% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
-% License for the specific language governing permissions and limitations under
-% the License.
-
--module(couch_mrview_index_changes_tests).
-
--include_lib("couch/include/couch_eunit.hrl").
--include_lib("couch/include/couch_db.hrl").
-
-
-setup() ->
- {ok, Db} = couch_mrview_test_util:init_db(?tempdb(), map),
- Db.
-
-teardown(Db) ->
- couch_db:close(Db),
- couch_server:delete(couch_db:name(Db), [?ADMIN_CTX]),
- ok.
-
-changes_index_test() ->
- {
- "changes index tests",
- {
- setup,
- fun test_util:start_couch/0, fun test_util:stop_couch/1,
- {
- foreach,
- fun setup/0, fun teardown/1,
- [
- fun test_normal_changes/1,
- fun test_stream_once/1,
- fun test_stream_once_since/1,
- fun test_stream_once_timeout/1,
- fun test_stream_once_heartbeat/1,
- fun test_stream/1,
- fun test_indexer/1
- ]
- }
- }
- }.
-
-
-test_normal_changes(Db) ->
- Result = run_query(Db, []),
- Expect = {ok, 11, [
- {{2, 1, <<"1">>}, 1},
- {{3, 10, <<"10">>}, 10},
- {{4, 2, <<"2">>}, 2},
- {{5, 3, <<"3">>}, 3},
- {{6, 4, <<"4">>}, 4},
- {{7, 5, <<"5">>}, 5},
- {{8, 6, <<"6">>}, 6},
- {{9, 7, <<"7">>}, 7},
- {{10, 8, <<"8">>}, 8},
- {{11, 9, <<"9">>}, 9}
- ]},
- ?_assertEqual(Result, Expect).
-
-test_stream_once(Db) ->
- Result = run_query(Db, [{stream, once}]),
- Expect = {ok, 11, [
- {{2, 1, <<"1">>}, 1},
- {{3, 10, <<"10">>}, 10},
- {{4, 2, <<"2">>}, 2},
- {{5, 3, <<"3">>}, 3},
- {{6, 4, <<"4">>}, 4},
- {{7, 5, <<"5">>}, 5},
- {{8, 6, <<"6">>}, 6},
- {{9, 7, <<"7">>}, 7},
- {{10, 8, <<"8">>}, 8},
- {{11, 9, <<"9">>}, 9}
- ]},
- ?_assertEqual(Result, Expect).
-
-
-test_stream_once_since(Db) ->
- Self = self(),
- spawn(fun() ->
- Result = run_query(Db, [{since, 11},
- {stream, once}]),
- Self ! {result, Result}
- end),
-
- spawn(fun() ->
- timer:sleep(1000),
- {ok, Db1} = save_doc(Db, 11),
- couch_mrview:refresh(Db1, <<"_design/bar">>)
- end),
-
- Expect = {ok,12,[{{12,11,<<"11">>},11}]},
-
- receive
- {result, Result} ->
- ?_assertEqual(Result, Expect)
- after 5000 ->
- io:format("never got the change", [])
- end.
-
-
-test_stream_once_timeout(Db) ->
- Self = self(),
- spawn(fun() ->
- Result = run_query(Db, [{since, 12},
- {stream, once},
- {timeout, 3000}]),
- Self ! {result, Result}
- end),
-
-
-
- Expect = {ok, 12, []},
-
- receive
- {result, Result} ->
- ?_assertEqual(Result, Expect)
- after 5000 ->
- io:format("never got the change", [])
- end.
-
-test_stream_once_heartbeat(Db) ->
- Self = self(),
- spawn(fun() ->
- Result = run_query(Db, [{since, 12},
- {stream, once},
- {heartbeat, 1000}]),
- Self ! {result, Result}
- end),
-
- spawn(fun() ->
- timer:sleep(3000),
- {ok, Db1} = save_doc(Db, 12),
- couch_mrview:refresh(Db1, <<"_design/bar">>)
- end),
-
- Expect = {ok,13,[heartbeat,
- heartbeat,
- heartbeat,
- {{13,12,<<"12">>},12}]},
-
-
-
- receive
- {result, Result} ->
- ?_assertEqual(Result, Expect)
- after 5000 ->
- io:format("never got the change", [])
- end.
-
-
-test_stream(Db) ->
- Self = self(),
- spawn(fun() ->
- Result = run_query(Db, [{since, 13},
- stream,
- {timeout, 3000}]),
- Self ! {result, Result}
- end),
-
- spawn(fun() ->
- timer:sleep(1000),
- {ok, Db1} = save_doc(Db, 13),
- couch_mrview:refresh(Db1, <<"_design/bar">>),
- {ok, Db2} = save_doc(Db1, 14),
- couch_mrview:refresh(Db2, <<"_design/bar">>)
- end),
-
- Expect = {ok, 15,[{{14,13,<<"13">>},13},
- {{15,14,<<"14">>},14}]},
-
- receive
- {result, Result} ->
- ?_assertEqual(Result, Expect)
- after 5000 ->
- io:format("never got the change", [])
- end.
-
-
-test_indexer(Db) ->
- Result = run_query(Db, [{since, 14}, refresh]),
- Expect = {ok, 15, [{{15,14,<<"14">>},14}]},
-
- {ok, Db1} = save_doc(Db, 15),
- timer:sleep(1500),
- Result1 = run_query(Db1, [{since, 14}], false),
- Expect1 = {ok, 16, [{{15,14,<<"14">>},14},
- {{16,15,<<"15">>},15}]},
- ?_assert(Result == Expect andalso Result1 == Expect1).
-
-
-save_doc(Db, Id) ->
- Doc = couch_mrview_test_util:doc(Id),
- {ok, _Rev} = couch_db:update_doc(Db, Doc, []),
- couch_db:reopen(Db).
-
-run_query(Db, Opts) ->
- run_query(Db, Opts, true).
-
-run_query(Db, Opts, Refresh) ->
- Fun = fun
- (stop, {LastSeq, Acc}) ->
- {ok, LastSeq, Acc};
- (heartbeat, Acc) ->
- {ok, [heartbeat | Acc]};
- (Event, Acc) ->
- {ok, [Event | Acc]}
- end,
- case Refresh of
- true ->
- couch_mrview:refresh(Db, <<"_design/bar">>);
- false ->
- ok
- end,
- {ok, LastSeq, R} = couch_mrview_changes:handle_changes(Db, <<"_design/bar">>,
- <<"baz">>, Fun, [], Opts),
- {ok, LastSeq, lists:reverse(R)}.