You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@couchdb.apache.org by rn...@apache.org on 2015/02/08 14:39:51 UTC
[1/2] couchdb-mango git commit: Remove reference to _text indexes
Repository: couchdb-mango
Updated Branches:
refs/heads/master 09e4b815d -> bf2bfa80d
Remove reference to _text indexes
Project: http://git-wip-us.apache.org/repos/asf/couchdb-mango/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mango/commit/955a42c3
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mango/tree/955a42c3
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mango/diff/955a42c3
Branch: refs/heads/master
Commit: 955a42c3bbd0502f1623bec29edad59eddd7b2ea
Parents: 09e4b81
Author: Robert Newson <rn...@apache.org>
Authored: Sun Feb 8 13:34:46 2015 +0000
Committer: Robert Newson <rn...@apache.org>
Committed: Sun Feb 8 13:34:46 2015 +0000
----------------------------------------------------------------------
src/mango_cursor.erl | 3 +-
src/mango_cursor_text.erl | 307 -----------------------------------------
src/mango_error.erl | 39 ------
src/mango_idx.erl | 10 +-
4 files changed, 4 insertions(+), 355 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/955a42c3/src/mango_cursor.erl
----------------------------------------------------------------------
diff --git a/src/mango_cursor.erl b/src/mango_cursor.erl
index 545a863..0b58c12 100644
--- a/src/mango_cursor.erl
+++ b/src/mango_cursor.erl
@@ -124,8 +124,7 @@ group_indexes_by_type(Indexes) ->
% don't suddenly switch indexes for existing client
% queries.
CursorModules = [
- mango_cursor_view,
- mango_cursor_text
+ mango_cursor_view
],
lists:flatmap(fun(CMod) ->
case dict:find(CMod, IdxDict) of
http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/955a42c3/src/mango_cursor_text.erl
----------------------------------------------------------------------
diff --git a/src/mango_cursor_text.erl b/src/mango_cursor_text.erl
deleted file mode 100644
index c774c82..0000000
--- a/src/mango_cursor_text.erl
+++ /dev/null
@@ -1,307 +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(mango_cursor_text).
-
--export([
- create/4,
- explain/1,
- execute/3
-]).
-
-
--include_lib("couch/include/couch_db.hrl").
--include_lib("dreyfus/include/dreyfus.hrl").
--include("mango_cursor.hrl").
--include("mango.hrl").
-
-
--record(cacc, {
- selector,
- dbname,
- ddocid,
- idx_name,
- query_args,
- bookmark,
- limit,
- skip,
- user_fun,
- user_acc
-}).
-
-
-create(Db, Indexes, Selector, Opts0) ->
- Index = case Indexes of
- [Index0] ->
- Index0;
- _ ->
- ?MANGO_ERROR(multiple_text_indexes)
- end,
-
- Opts = unpack_bookmark(Db#db.name, Opts0),
-
- % Limit the result set size to 50 for Clouseau's
- % sake. We may want to revisit this.
- Limit0 = couch_util:get_value(limit, Opts, 50),
- Limit = if Limit0 < 50 -> Limit0; true -> 50 end,
- Skip = couch_util:get_value(skip, Opts, 0),
- Fields = couch_util:get_value(fields, Opts, all_fields),
-
- {ok, #cursor{
- db = Db,
- index = Index,
- ranges = null,
- selector = Selector,
- opts = Opts,
- limit = Limit,
- skip = Skip,
- fields = Fields
- }}.
-
-
-explain(Cursor) ->
- #cursor{
- selector = Selector,
- opts = Opts
- } = Cursor,
- [
- {'query', mango_selector_text:convert(Selector)},
- {sort, sort_query(Opts, Selector)}
- ].
-
-
-execute(Cursor, UserFun, UserAcc) ->
- #cursor{
- db = Db,
- index = Idx,
- limit = Limit,
- skip = Skip,
- selector = Selector,
- opts = Opts
- } = Cursor,
- QueryArgs = #index_query_args{
- q = mango_selector_text:convert(Selector),
- sort = sort_query(Opts, Selector),
- raw_bookmark = true
- },
- CAcc = #cacc{
- selector = Selector,
- dbname = Db#db.name,
- ddocid = ddocid(Idx),
- idx_name = mango_idx:name(Idx),
- bookmark = get_bookmark(Opts),
- limit = Limit,
- skip = Skip,
- query_args = QueryArgs,
- user_fun = UserFun,
- user_acc = UserAcc
- },
- try
- execute(CAcc)
- catch
- throw:{stop, FinalCAcc} ->
- #cacc{
- bookmark = FinalBM,
- user_fun = UserFun,
- user_acc = LastUserAcc
- } = FinalCAcc,
- JsonBM = dreyfus_bookmark:pack(FinalBM),
- Arg = {add_key, bookmark, JsonBM},
- {_Go, FinalUserAcc} = UserFun(Arg, LastUserAcc),
- {ok, FinalUserAcc}
- end.
-
-
-execute(CAcc) ->
- case search_docs(CAcc) of
- {ok, Bookmark, []} ->
- % If we don't have any results from the
- % query it means the request has paged through
- % all possible results and the request is over.
- NewCAcc = CAcc#cacc{bookmark = Bookmark},
- throw({stop, NewCAcc});
- {ok, Bookmark, Hits} ->
- NewCAcc = CAcc#cacc{bookmark = Bookmark},
- HitDocs = get_json_docs(CAcc#cacc.dbname, Hits),
- {ok, FinalCAcc} = handle_hits(NewCAcc, HitDocs),
- execute(FinalCAcc)
- end.
-
-
-search_docs(CAcc) ->
- #cacc{
- dbname = DbName,
- ddocid = DDocId,
- idx_name = IdxName
- } = CAcc,
- QueryArgs = update_query_args(CAcc),
- case dreyfus_fabric_search:go(DbName, DDocId, IdxName, QueryArgs) of
- {ok, Bookmark, _, Hits, _, _} ->
- {ok, Bookmark, Hits};
- {error, Reason} ->
- ?MANGO_ERROR({text_search_error, {error, Reason}})
- end.
-
-
-handle_hits(CAcc, []) ->
- {ok, CAcc};
-
-handle_hits(CAcc0, [{Sort, Doc} | Rest]) ->
- CAcc1 = handle_hit(CAcc0, Sort, Doc),
- handle_hits(CAcc1, Rest).
-
-
-handle_hit(CAcc0, Sort, Doc) ->
- #cacc{
- limit = Limit,
- skip = Skip
- } = CAcc0,
- CAcc1 = update_bookmark(CAcc0, Sort),
- case mango_selector:match(CAcc1#cacc.selector, Doc) of
- true when Skip > 0 ->
- CAcc1#cacc{skip = Skip - 1};
- true when Limit == 0 ->
- % We hit this case if the user spcified with a
- % zero limit. Notice that in this case we need
- % to return the bookmark from before this match
- throw({stop, CAcc0});
- true when Limit == 1 ->
- NewCAcc = apply_user_fun(CAcc1, Doc),
- throw({stop, NewCAcc});
- true when Limit > 1 ->
- NewCAcc = apply_user_fun(CAcc1, Doc),
- NewCAcc#cacc{limit = Limit - 1};
- false ->
- CAcc1
- end.
-
-
-apply_user_fun(CAcc, Doc) ->
- #cacc{
- user_fun = UserFun,
- user_acc = UserAcc
- } = CAcc,
- case UserFun({row, Doc}, UserAcc) of
- {ok, NewUserAcc} ->
- CAcc#cacc{user_acc = NewUserAcc};
- {stop, NewUserAcc} ->
- throw({stop, CAcc#cacc{user_acc = NewUserAcc}})
- end.
-
-
-%% Convert Query to Dreyfus sort specifications
-%% Covert <<"Field">>, <<"desc">> to <<"-Field">>
-%% and append to the dreyfus query
-sort_query(Opts, Selector) ->
- {sort, {Sort}} = lists:keyfind(sort, 1, Opts),
- SortList = lists:map(fun(SortField) ->
- {Dir, RawSortField} = case SortField of
- {Field, <<"asc">>} -> {asc, Field};
- {Field, <<"desc">>} -> {desc, Field};
- Field when is_binary(Field) -> {asc, Field}
- end,
- SField = mango_selector_text:append_sort_type(RawSortField, Selector),
- case Dir of
- asc ->
- SField;
- desc ->
- <<"-", SField/binary>>
- end
- end, Sort),
- case SortList of
- [] -> relevance;
- _ -> SortList
- end.
-
-
-get_bookmark(Opts) ->
- case lists:keyfind(bookmark, 1, Opts) of
- {_, BM} when is_list(BM), BM /= [] ->
- BM;
- _ ->
- nil
- end.
-
-
-update_bookmark(CAcc, Sortable) ->
- BM = CAcc#cacc.bookmark,
- QueryArgs = CAcc#cacc.query_args,
- Sort = QueryArgs#index_query_args.sort,
- NewBM = dreyfus_bookmark:update(Sort, BM, [Sortable]),
- CAcc#cacc{bookmark = NewBM}.
-
-
-pack_bookmark(Bookmark) ->
- case dreyfus_bookmark:pack(Bookmark) of
- null -> nil;
- Enc -> Enc
- end.
-
-
-unpack_bookmark(DbName, Opts) ->
- NewBM = case lists:keyfind(bookmark, 1, Opts) of
- {_, nil} ->
- [];
- {_, Bin} ->
- try
- dreyfus_bookmark:unpack(DbName, Bin)
- catch _:_ ->
- ?MANGO_ERROR({invalid_bookmark, Bin})
- end
- end,
- lists:keystore(bookmark, 1, Opts, {bookmark, NewBM}).
-
-
-ddocid(Idx) ->
- case mango_idx:ddoc(Idx) of
- <<"_design/", Rest/binary>> ->
- Rest;
- Else ->
- Else
- end.
-
-
-update_query_args(CAcc) ->
- #cacc{
- bookmark = Bookmark,
- query_args = QueryArgs
- } = CAcc,
- QueryArgs#index_query_args{
- bookmark = pack_bookmark(Bookmark),
- limit = get_limit(CAcc)
- }.
-
-
-get_limit(CAcc) ->
- Total = CAcc#cacc.limit + CAcc#cacc.skip,
- if
- Total < 25 -> 25;
- Total > 100 -> 100;
- true -> Total
- end.
-
-
-get_json_docs(DbName, Hits) ->
- Ids = lists:map(fun(#sortable{item = Item}) ->
- couch_util:get_value(<<"_id">>, Item#hit.fields)
- end, Hits),
- {ok, IdDocs} = dreyfus_fabric:get_json_docs(DbName, Ids),
- lists:map(fun(#sortable{item = Item} = Sort) ->
- Id = couch_util:get_value(<<"_id">>, Item#hit.fields),
- case lists:keyfind(Id, 1, IdDocs) of
- {Id, {doc, Doc}} ->
- {Sort, Doc};
- false ->
- {Sort, not_found}
- end
- end, Hits).
-
http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/955a42c3/src/mango_error.erl
----------------------------------------------------------------------
diff --git a/src/mango_error.erl b/src/mango_error.erl
index 8aebfb9..babf564 100644
--- a/src/mango_error.erl
+++ b/src/mango_error.erl
@@ -46,32 +46,6 @@ info(mango_cursor, {no_usable_index, selector_unsupported}) ->
<<"There is no index available for this selector.">>
};
-info(mango_cursor_text, {invalid_bookmark, BadBookmark}) ->
- {
- 400,
- <<"invalid_bookmark">>,
- fmt("Invalid boomkark value: ~s", [?JSON_ENCODE(BadBookmark)])
- };
-info(mango_cursor_text, multiple_text_indexes) ->
- {
- 400,
- <<"multiple_text_indexes">>,
- <<"You must specify an index with the `use_index` parameter.">>
- };
-info(mango_cursor_text, {text_search_error, {error, {bad_request, Msg}}})
- when is_binary(Msg) ->
- {
- 400,
- <<"text_search_error">>,
- Msg
- };
-info(mango_cursor_text, {text_search_error, {error, Error}}) ->
- {
- 400,
- <<"text_search_error">>,
- fmt("Error performing text search: ~p", [Error])
- };
-
info(mango_fields, {invalid_fields_json, BadFields}) ->
{
400,
@@ -136,19 +110,6 @@ info(mango_idx_view, {index_not_found, BadIdx}) ->
fmt("JSON index ~s not found in this design doc.", [BadIdx])
};
-info(mango_idx_text, {invalid_index_text, BadIdx}) ->
- {
- 400,
- <<"invalid_index">>,
- fmt("Text indexes must be an object, not: ~w", [BadIdx])
- };
-info(mango_idx_text, {index_not_found, BadIdx}) ->
- {
- 404,
- <<"index_not_found">>,
- fmt("Text index ~s not found in this design doc.", [BadIdx])
- };
-
info(mango_opts, {invalid_ejson, Val}) ->
{
400,
http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/955a42c3/src/mango_idx.erl
----------------------------------------------------------------------
diff --git a/src/mango_idx.erl b/src/mango_idx.erl
index 8e644c3..1c15894 100644
--- a/src/mango_idx.erl
+++ b/src/mango_idx.erl
@@ -144,7 +144,7 @@ from_ddoc(Db, {Props}) ->
?MANGO_ERROR(invalid_query_ddoc_language)
end,
- IdxMods = [mango_idx_view, mango_idx_text],
+ IdxMods = [mango_idx_view],
Idxs = lists:flatmap(fun(Mod) -> Mod:from_ddoc({Props}) end, IdxMods),
lists:map(fun(Idx) ->
Idx#idx{
@@ -218,17 +218,13 @@ end_key(#idx{}=Idx, Ranges) ->
cursor_mod(#idx{type = <<"json">>}) ->
mango_cursor_view;
cursor_mod(#idx{def = all_docs, type= <<"special">>}) ->
- mango_cursor_view;
-cursor_mod(#idx{type = <<"text">>}) ->
- mango_cursor_text.
+ mango_cursor_view.
idx_mod(#idx{type = <<"json">>}) ->
mango_idx_view;
idx_mod(#idx{type = <<"special">>}) ->
- mango_idx_special;
-idx_mod(#idx{type = <<"text">>}) ->
- mango_idx_text.
+ mango_idx_special.
db_to_name(#db{name=Name}) ->
[2/2] couchdb-mango git commit: Upgrade to couch_mrview
Posted by rn...@apache.org.
Upgrade to couch_mrview
Project: http://git-wip-us.apache.org/repos/asf/couchdb-mango/repo
Commit: http://git-wip-us.apache.org/repos/asf/couchdb-mango/commit/bf2bfa80
Tree: http://git-wip-us.apache.org/repos/asf/couchdb-mango/tree/bf2bfa80
Diff: http://git-wip-us.apache.org/repos/asf/couchdb-mango/diff/bf2bfa80
Branch: refs/heads/master
Commit: bf2bfa80d1fca2761cefb2c463ecac8b26fccd8b
Parents: 955a42c
Author: Robert Newson <rn...@apache.org>
Authored: Sun Feb 8 13:39:01 2015 +0000
Committer: Robert Newson <rn...@apache.org>
Committed: Sun Feb 8 13:39:01 2015 +0000
----------------------------------------------------------------------
src/mango_cursor_view.erl | 19 ++++++++++---------
1 file changed, 10 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/couchdb-mango/blob/bf2bfa80/src/mango_cursor_view.erl
----------------------------------------------------------------------
diff --git a/src/mango_cursor_view.erl b/src/mango_cursor_view.erl
index b32353d..d3d1db1 100644
--- a/src/mango_cursor_view.erl
+++ b/src/mango_cursor_view.erl
@@ -24,6 +24,7 @@
-include_lib("couch/include/couch_db.hrl").
+-include_lib("couch_mrview/include/couch_mrview.hrl").
-include("mango_cursor.hrl").
@@ -64,7 +65,7 @@ execute(#cursor{db = Db, index = Idx} = Cursor0, UserFun, UserAcc) ->
user_fun = UserFun,
user_acc = UserAcc
},
- BaseArgs = #view_query_args{
+ BaseArgs = #mrargs{
view_type = red_map,
start_key = mango_idx:start_key(Idx, Cursor#cursor.ranges),
end_key = mango_idx:end_key(Idx, Cursor#cursor.ranges),
@@ -196,7 +197,7 @@ apply_opts([{r, RStr} | Rest], Args) ->
% so there's no point.
false
end,
- NewArgs = Args#view_query_args{include_docs = IncludeDocs},
+ NewArgs = Args#mrargs{include_docs = IncludeDocs},
apply_opts(Rest, NewArgs);
apply_opts([{conflicts, true} | Rest], Args) ->
% I need to patch things so that views can specify
@@ -214,16 +215,16 @@ apply_opts([{sort, Sort} | Rest], Args) ->
[<<"asc">> | _] ->
apply_opts(Rest, Args);
[<<"desc">> | _] ->
- SK = Args#view_query_args.start_key,
- SKDI = Args#view_query_args.start_docid,
- EK = Args#view_query_args.end_key,
- EKDI = Args#view_query_args.end_docid,
- NewArgs = Args#view_query_args{
+ SK = Args#mrargs.start_key,
+ SKDI = Args#mrargs.start_key_docid,
+ EK = Args#mrargs.end_key,
+ EKDI = Args#mrargs.end_key_docid,
+ NewArgs = Args#mrargs{
direction = rev,
start_key = EK,
- start_docid = EKDI,
+ start_key_docid = EKDI,
end_key = SK,
- end_docid = SKDI
+ end_key_docid = SKDI
},
apply_opts(Rest, NewArgs)
end;