summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgarren smith <garren.smith@gmail.com>2021-07-15 16:34:31 +0200
committergarren smith <garren.smith@gmail.com>2021-07-22 17:00:30 +0200
commit383c8a9f59936b3c0a6331c1ea29a3aa887956fa (patch)
tree7551f705310c531d9c3bdf617cf5ec5a0a0669b8
parent647aea29ce8431fa5c2049cc6da47a9305ad3e6b (diff)
downloadcouchdb-383c8a9f59936b3c0a6331c1ea29a3aa887956fa.tar.gz
move validate doc update to go through couch_eval
-rw-r--r--src/couch/src/couch_doc.erl3
-rw-r--r--src/couch_eval/src/couch_eval.erl11
-rw-r--r--src/couch_js/src/couch_js.erl6
3 files changed, 16 insertions, 4 deletions
diff --git a/src/couch/src/couch_doc.erl b/src/couch/src/couch_doc.erl
index 124d14c33..2771e1486 100644
--- a/src/couch/src/couch_doc.erl
+++ b/src/couch/src/couch_doc.erl
@@ -27,7 +27,6 @@
-include_lib("couch/include/couch_db.hrl").
-
-spec to_path(#doc{}) -> path().
to_path(#doc{revs = {Start, RevIds}} = Doc) ->
[Branch] = to_branch(Doc, lists:reverse(RevIds)),
@@ -431,7 +430,7 @@ get_validate_doc_fun(#doc{body = {Props}} = DDoc) ->
nil;
_Else ->
fun(EditDoc, DiskDoc, Ctx, SecObj) ->
- couch_query_servers:validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj)
+ couch_eval:validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj)
end
end.
diff --git a/src/couch_eval/src/couch_eval.erl b/src/couch_eval/src/couch_eval.erl
index affcf714e..cdaf8ce4d 100644
--- a/src/couch_eval/src/couch_eval.erl
+++ b/src/couch_eval/src/couch_eval.erl
@@ -17,7 +17,8 @@
release_map_context/1,
map_docs/2,
with_context/2,
- try_compile/4
+ try_compile/4,
+ validate_doc_update/5
]).
-include_lib("couch/include/couch_db.hrl").
@@ -37,6 +38,7 @@
-type function_name() :: binary().
-type function_src() :: binary().
-type error(_Error) :: no_return().
+-type user_context() :: any().
-type context_opts() :: #{
db_name := db_name(),
@@ -58,6 +60,8 @@
-callback acquire_context() -> {ok, any()} | {error, any()}.
-callback release_context(context()) -> ok | {error, any()}.
-callback try_compile(context(), function_type(), function_name(), function_src()) -> ok.
+-callback validate_doc_update(ddoc(), doc(), doc(), user_context(), sec_obj()) ->
+ ok | {error, any()}.
-spec acquire_map_context(
db_name(),
@@ -116,6 +120,11 @@ try_compile({_ApiMod, _Ctx}, reduce, <<_/binary>>, disabled) ->
try_compile({ApiMod, Ctx}, FuncType, FuncName, FuncSrc) ->
ApiMod:try_compile(Ctx, FuncType, FuncName, FuncSrc).
+validate_doc_update(#doc{body = {Props}} = DDoc, EditDoc, DiskDoc, Ctx, SecObj) ->
+ Language = couch_util:get_value(<<"language">>, Props, <<"javascript">>),
+ ApiMod = get_api_mod(Language),
+ ApiMod:validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj).
+
acquire_context(Language) ->
ApiMod = get_api_mod(Language),
{ok, Ctx} = ApiMod:acquire_context(),
diff --git a/src/couch_js/src/couch_js.erl b/src/couch_js/src/couch_js.erl
index 3a80a99c3..739aa1b9c 100644
--- a/src/couch_js/src/couch_js.erl
+++ b/src/couch_js/src/couch_js.erl
@@ -19,7 +19,8 @@
map_docs/2,
acquire_context/0,
release_context/1,
- try_compile/4
+ try_compile/4,
+ validate_doc_update/5
]).
-include_lib("couch/include/couch_db.hrl").
@@ -62,3 +63,6 @@ release_context(Proc) ->
try_compile(Proc, FunctionType, FunName, FunSrc) ->
couch_query_servers:try_compile(Proc, FunctionType, FunName, FunSrc).
+
+validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj) ->
+ couch_query_servers:validate_doc_update(DDoc, EditDoc, DiskDoc, Ctx, SecObj).