Skip to content

Commit

Permalink
marklogic-community#109 run code in the triggers-db context to avoid …
Browse files Browse the repository at this point in the history
…xdmp:eval
  • Loading branch information
dmcassel committed Mar 4, 2016
1 parent 65eac6e commit e28e9ff
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 58 deletions.
9 changes: 8 additions & 1 deletion deploy/lib/server_config.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1008,6 +1008,8 @@ def clean
clean_schemas
when 'cpf'
clean_cpf
when 'triggers'
clean_triggers
else
raise HelpException.new("clean", "Invalid WHAT")
end
Expand Down Expand Up @@ -1889,10 +1891,15 @@ def deploy_triggers
triggers_code = File.read ServerConfig.expand_path("#{@@path}/lib/xquery/triggers.xqy")
query = %Q{#{triggers_code} triggers:load-from-config(#{triggers_config})}
logger.debug(query)
r = execute_query(query, :db_name => @properties["ml.content-db"])
r = execute_query(query, :db_name => @properties["ml.triggers-db"])
end
end

def clean_triggers
cpf_code = File.read ServerConfig.expand_path("#{@@path}/lib/xquery/triggers.xqy")
r = execute_query %Q{#{cpf_code} cpf:clean-triggers()}, :db_name => @properties["ml.triggers-db"]
end

def xcc
@xcc ||=
begin
Expand Down
83 changes: 26 additions & 57 deletions deploy/lib/xquery/triggers.xqy
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ limitations under the License.
:)
xquery version "1.0-ml";

declare namespace trgr="http://marklogic.com/xdmp/triggers";
import module namespace trgr="http://marklogic.com/xdmp/triggers" at "/MarkLogic/triggers.xqy";

declare namespace triggers = "http://marklogic.com/roxy/triggers";

Expand All @@ -29,11 +29,7 @@ declare option xdmp:mapping "false";
:)
declare function triggers:load-from-config($config as element(trgr:triggers))
{
let $triggers-db := xdmp:triggers-database()
let $test :=
if ($triggers-db = 0) then
fn:error(xs:QName("TRIGGERS-DB"), "You must have a triggers database configured to deploy triggers.")
else ()
let $triggers-db := xdmp:database()
for $trgr in $config/trgr:trigger
let $name := $trgr/trgr:name
let $desc as xs:string := $trgr/trgr:description
Expand All @@ -57,57 +53,30 @@ declare function triggers:load-from-config($config as element(trgr:triggers))
if (fn:empty($priority) or $priority = ("normal", "higher")) then ()
else
fn:error(xs:QName("PRIORITY-VALUE"), 'Task priority must be "normal" or "higher".')
return (
xdmp:eval(
'xquery version "1.0-ml";
import module namespace trgr="http://marklogic.com/xdmp/triggers" at "/MarkLogic/triggers.xqy";
declare variable $name external;
declare variable $desc external;
declare variable $data-event external;
declare variable $module external;
declare variable $enabled external;
declare variable $permissions external;
declare variable $recursive external;
declare variable $priority external;
if (fn:exists(/trgr:trigger/trgr:trigger-name[. = $name])) then
(: trigger already exists. update it :)
(
trgr:trigger-set-description($name, $desc),
trgr:trigger-set-event($name, $data-event),
trgr:trigger-set-module($name, $module),
if ($enabled) then trgr:trigger-enable($name)
else trgr:trigger-disable($name),
trgr:trigger-set-permissions($name, $permissions),
trgr:trigger-set-recursive($name, $recursive),
trgr:trigger-set-task-priority($name, $priority)
)
else
(: new trigger. create it. :)
trgr:create-trigger(
$name, $desc,
$data-event,
$module,
$enabled,
$permissions,
$recursive,
($priority, "normal")[1]
)',
map:new((
map:entry("name", $name),
map:entry("desc", $desc),
map:entry("data-event", $data-event),
map:entry("module", $module),
map:entry("enabled", $enabled),
map:entry("permissions", $permissions),
map:entry("recursive", $recursive),
map:entry("priority", ($priority, "normal")[1])
)),
<options xmlns="xdmp:eval">
<database>{xdmp:triggers-database()}</database>
</options>
)
)
return
if (fn:exists(/trgr:trigger/trgr:trigger-name[. = $name])) then
(: trigger already exists. update it :)
(
trgr:trigger-set-description($name, $desc),
trgr:trigger-set-event($name, $data-event),
trgr:trigger-set-module($name, $module),
if ($enabled) then trgr:trigger-enable($name)
else trgr:trigger-disable($name),
trgr:trigger-set-permissions($name, $permissions),
trgr:trigger-set-recursive($name, $recursive),
trgr:trigger-set-task-priority($name, $priority)
)
else
(: new trigger. create it. :)
trgr:create-trigger(
$name, $desc,
$data-event,
$module,
$enabled,
$permissions,
$recursive,
($priority, "normal")[1]
)
};

declare function triggers:resolve-permissions($perms as element(sec:permission)*)
Expand Down

0 comments on commit e28e9ff

Please sign in to comment.