diff options
author | Paul J. Davis <paul.joseph.davis@gmail.com> | 2018-10-24 11:12:27 -0500 |
---|---|---|
committer | Paul J. Davis <paul.joseph.davis@gmail.com> | 2019-01-18 12:35:38 -0600 |
commit | 993a85f6aaeaa354cc1a8476a3d8327d7659b428 (patch) | |
tree | 0598e500583c3fc91ca67a0ce87f2d31b63abd75 | |
parent | cea5ea0a7734fd867c80dba1b7e08a52fb6626f5 (diff) | |
download | couchdb-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.erl | 6 | ||||
-rw-r--r-- | src/couch_index/src/couch_index_server.erl | 4 | ||||
-rw-r--r-- | src/couch_mrview/src/couch_mrview.erl | 9 |
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; |