summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul J. Davis <paul.joseph.davis@gmail.com>2018-10-24 11:12:27 -0500
committerPaul J. Davis <paul.joseph.davis@gmail.com>2019-01-18 12:35:38 -0600
commit993a85f6aaeaa354cc1a8476a3d8327d7659b428 (patch)
tree0598e500583c3fc91ca67a0ce87f2d31b63abd75
parentcea5ea0a7734fd867c80dba1b7e08a52fb6626f5 (diff)
downloadcouchdb-993a85f6aaeaa354cc1a8476a3d8327d7659b428.tar.gz
Pass the DB record to index validation functions
Allow index validation to be parameterized by the database without having to reopen its own copy.
-rw-r--r--src/couch/src/couch_db.erl6
-rw-r--r--src/couch_index/src/couch_index_server.erl4
-rw-r--r--src/couch_mrview/src/couch_mrview.erl9
3 files changed, 11 insertions, 8 deletions
diff --git a/src/couch/src/couch_db.erl b/src/couch/src/couch_db.erl
index 2b4f21aec..8ff73e4d2 100644
--- a/src/couch/src/couch_db.erl
+++ b/src/couch/src/couch_db.erl
@@ -847,7 +847,7 @@ group_alike_docs([Doc|Rest], [Bucket|RestBuckets]) ->
validate_doc_update(#db{}=Db, #doc{id= <<"_design/",_/binary>>}=Doc, _GetDiskDocFun) ->
case catch check_is_admin(Db) of
- ok -> validate_ddoc(Db#db.name, Doc);
+ ok -> validate_ddoc(Db, Doc);
Error -> Error
end;
validate_doc_update(#db{validate_doc_funs = undefined} = Db, Doc, Fun) ->
@@ -865,9 +865,9 @@ validate_doc_update(Db, Doc, GetDiskDocFun) ->
validate_doc_update_int(Db, Doc, GetDiskDocFun)
end.
-validate_ddoc(DbName, DDoc) ->
+validate_ddoc(Db, DDoc) ->
try
- ok = couch_index_server:validate(DbName, couch_doc:with_ejson_body(DDoc))
+ ok = couch_index_server:validate(Db, couch_doc:with_ejson_body(DDoc))
catch
throw:{invalid_design_doc, Reason} ->
{bad_request, invalid_design_doc, Reason};
diff --git a/src/couch_index/src/couch_index_server.erl b/src/couch_index/src/couch_index_server.erl
index a33c1e490..49d1e61b7 100644
--- a/src/couch_index/src/couch_index_server.erl
+++ b/src/couch_index/src/couch_index_server.erl
@@ -41,7 +41,7 @@ start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [], []).
-validate(DbName, DDoc) ->
+validate(Db, DDoc) ->
LoadModFun = fun
({ModNameList, "true"}) ->
try
@@ -54,7 +54,7 @@ validate(DbName, DDoc) ->
end,
ValidateFun = fun
(ModName) ->
- ModName:validate(DbName, DDoc)
+ ModName:validate(Db, DDoc)
end,
EnabledIndexers = lists:flatmap(LoadModFun, config:get("indexers")),
lists:foreach(ValidateFun, EnabledIndexers).
diff --git a/src/couch_mrview/src/couch_mrview.erl b/src/couch_mrview/src/couch_mrview.erl
index f6462e156..d5b01ed7c 100644
--- a/src/couch_mrview/src/couch_mrview.erl
+++ b/src/couch_mrview/src/couch_mrview.erl
@@ -169,7 +169,7 @@ join([H|T], Sep, Acc) ->
join(T, Sep, [Sep, H | Acc]).
-validate(DbName, DDoc) ->
+validate(Db, DDoc) ->
ok = validate_ddoc_fields(DDoc#doc.body),
GetName = fun
(#mrview{map_names = [Name | _]}) -> Name;
@@ -194,8 +194,11 @@ validate(DbName, DDoc) ->
couch_query_servers:try_compile(Proc, reduce, RedName, RedSrc)
end, Reds)
end,
- {ok, #mrst{language=Lang, views=Views}}
- = couch_mrview_util:ddoc_to_mrst(DbName, DDoc),
+ {ok, #mrst{
+ language = Lang,
+ views = Views
+ }} = couch_mrview_util:ddoc_to_mrst(couch_db:name(Db), DDoc),
+
try Views =/= [] andalso couch_query_servers:get_os_process(Lang) of
false ->
ok;