@@ -72,6 +72,11 @@ declare variable $replicating-map-file := "/roxy/status/cleanup/replicating-map.
7272declare variable $replicating-map-file-internal := "/roxy/status/cleanup/replicating-map-internal.xml" ;
7373declare variable $replicating-map := map:map ();
7474
75+ (: Several functions take an optional invalid-values parameter. Use this as the
76+ : default value when it's not provided.
77+ :)
78+ declare variable $default-invalid-values := "reject" ;
79+
7580declare variable $group-settings :=
7681 <settings>
7782 <setting>list-cache-size</setting>
@@ -1170,9 +1175,9 @@ declare function setup:do-restart($group-name as xs:string?) as item()*
11701175 "Restarting hosts to make configuration changes take effect" ),
11711176
11721177 if ($group-id) then
1173- fn:concat ("Group " , $group-name, " restarted " )
1178+ fn:concat ("Invoked group " , $group-name, " restart " )
11741179 else
1175- fn:concat ("Cluster restarted " )
1180+ fn:concat ("Invoked cluster restart " )
11761181 )
11771182 }
11781183 catch ($ex)
@@ -2258,7 +2263,7 @@ declare function setup:validated-range-element-indexes(
22582263 $index-config/db:localname/fn:string (.),
22592264 fn:string ($index-config/db:collation [../db:scalar-type = 'string' ]),
22602265 ($index-config/db:range-value-positions/xs:boolean (.), false ())[1 ],
2261- ($index-config/db:invalid-values, "reject" )[1 ]
2266+ ($index-config/db:invalid-values, $default-invalid-values )[1 ]
22622267 )
22632268 else
22642269 xdmp:apply (
@@ -2320,7 +2325,7 @@ declare function setup:validated-range-element-attribute-indexes(
23202325 $index-config/db:localname/fn:string (.),
23212326 fn:string ($index-config/db:collation [../db:scalar-type = 'string' ]),
23222327 ($index-config/db:range-value-positions/xs:boolean (.), false ())[1 ],
2323- ($index-config/db:invalid-values, "reject" )[1 ]
2328+ ($index-config/db:invalid-values, $default-invalid-values )[1 ]
23242329 )
23252330 else
23262331 xdmp:apply (
@@ -2449,7 +2454,7 @@ declare function setup:add-range-path-indexes(
24492454 $index/db:path-expression,
24502455 $index/db:collation,
24512456 $index/db:range-value-positions,
2452- $index/db:invalid-values
2457+ ( $index/db:invalid-values, $default-invalid-values)[1]
24532458 )
24542459 )"
24552460 )
@@ -2478,16 +2483,18 @@ declare function setup:validate-range-path-indexes(
24782483 declare namespace db="http://marklogic.com/xdmp/database";
24792484 declare variable $database external;
24802485 declare variable $x external;
2486+ declare variable $default-invalid-values external;
24812487
24822488 admin:database-range-path-index(
24832489 $database,
24842490 $x/db:scalar-type,
24852491 $x/db:path-expression,
24862492 fn:string($x/db:collation[../db:scalar-type = "string"]),
24872493 $x/db:range-value-positions,
2488- $x/db:invalid-values)' ,
2494+ ( $x/db:invalid-values, $default-invalid-values)[1] )' ,
24892495 (xs:QName ("database" ), $database,
2490- xs:QName ("x" ), $expected))
2496+ xs:QName ("x" ), $expected,
2497+ xs:QName ("default-invalid-values" ), $default-invalid-values))
24912498 return
24922499 if ($existing[fn:deep-equal (., $expected)]) then ()
24932500 else
@@ -2689,7 +2696,7 @@ declare function setup:add-range-field-indexes-helper(
26892696 $index/db:field-name,
26902697 ($index/db:collation /fn:string (), "" )[1 ], (: ML6 requires xs:string; later requires xs:string? :)
26912698 $index/db:range-value-positions,
2692- $index/db:invalid-values
2699+ ( $index/db:invalid-values, $default-invalid-values)[ 1 ]
26932700 )
26942701 else
26952702 admin:database-range-field-index (
@@ -2738,7 +2745,7 @@ declare function setup:add-geospatial-element-indexes(
27382745 $index/db:coordinate-system,
27392746 $index/db:range-value-positions,
27402747 ($index/db:point-format, "point" )[1 ],
2741- ($index/db:invalid-values, "ignore" )[1 ]
2748+ ($index/db:invalid-values, $default-invalid-values )[1 ]
27422749 )
27432750 else
27442751 admin:database-geospatial-element-index (
@@ -2792,7 +2799,7 @@ declare function setup:add-geospatial-element-attribute-pair-indexes(
27922799 $index/db:longitude-localname,
27932800 $index/db:coordinate-system,
27942801 $index/db:range-value-positions,
2795- ($index/db:invalid-values, "ignore" )[1 ]
2802+ ($index/db:invalid-values, $default-invalid-values )[1 ]
27962803 )
27972804 else
27982805 admin:database-geospatial-element-attribute-pair-index (
@@ -2849,7 +2856,7 @@ declare function setup:add-geospatial-element-pair-indexes(
28492856 $index/db:longitude-localname,
28502857 $index/db:coordinate-system,
28512858 $index/db:range-value-positions,
2852- ($index/db:invalid-values, "ignore" )[1 ]
2859+ ($index/db:invalid-values, $default-invalid-values )[1 ]
28532860 )
28542861 else
28552862 admin:database-geospatial-element-pair-index (
@@ -2905,7 +2912,7 @@ declare function setup:add-geospatial-element-child-indexes(
29052912 $index/db:coordinate-system,
29062913 $index/db:range-value-positions,
29072914 ($index/db:point-format, "point" )[1 ],
2908- ($index/db:invalid-values, "ignore" )[1 ]
2915+ ($index/db:invalid-values, $default-invalid-values )[1 ]
29092916 )
29102917 else
29112918 admin:database-geospatial-element-child-index (
@@ -4742,6 +4749,9 @@ declare function setup:validate-external-security(
47424749declare function setup:create-roles (
47434750 $import-config as element (configuration))
47444751{
4752+ (: get the existing role names from the default security DB :)
4753+ let $existing-role-names := setup:get-existing-role-names ()
4754+
47454755 (: Create all missing roles :)
47464756 for $role in $import-config/sec:roles/sec:role
47474757 let $role-name as xs:string := $role/sec:role-name
@@ -4754,7 +4764,7 @@ declare function setup:create-roles(
47544764 </options>
47554765 return
47564766 (: if the role exists, then don't create it :)
4757- if (setup:get-roles (())/sec: role[sec:role-name = $role-name]) then ()
4767+ if ($existing- role-names[. = $role-name]) then ()
47584768 else
47594769 (
47604770 xdmp:eval (
@@ -4911,6 +4921,9 @@ declare function setup:create-roles(
49114921declare function setup:validate-roles (
49124922 $import-config as element (configuration))
49134923{
4924+ (: get the existing role names from the default security DB :)
4925+ let $existing-roles := setup:get-roles (())
4926+
49144927 for $role in $import-config/sec:roles/sec:role
49154928 let $role-name as xs:string := $role/sec:role-name
49164929 let $description as xs:string? := $role/sec:description
@@ -4921,7 +4934,7 @@ declare function setup:validate-roles(
49214934 let $privileges as element (sec:privilege)* := $role/sec:privileges/sec:privilege
49224935 let $amps as element (sec:amp)* := $role/sec:amps/*
49234936 let $external-names as xs:string* := $role/sec:external-names/sec:external-name
4924- let $match := setup:get -roles(()) /sec:role[sec:role-name = $role-name]
4937+ let $match := $existing -roles/sec:role[sec:role-name = $role-name]
49254938 return
49264939 if ($match) then
49274940 if ($match/sec:role-name != $role-name or
@@ -4964,6 +4977,10 @@ declare function setup:associate-users-with-roles($import-config as element(conf
49644977
49654978declare function setup:create-users ($import-config as element (configuration))
49664979{
4980+ (: get the existing user names from the default security DB :)
4981+ let $existing-user-names := setup:get-existing-user-names ()
4982+
4983+ (: Create all missing users :)
49674984 for $user in $import-config/sec:users/sec:user
49684985 let $user-name as xs:string := $user/sec:user-name
49694986 let $description as xs:string? := $user/sec:description
@@ -4978,7 +4995,7 @@ declare function setup:create-users($import-config as element(configuration))
49784995 <isolation>different-transaction</isolation>
49794996 </options>
49804997 return
4981- if (setup:get-users (())/sec: user[sec:user-name = $user-name]) then
4998+ if ($existing- user-names[. = $user-name]) then
49824999 (
49835000 xdmp:eval (
49845001 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
@@ -5088,6 +5105,9 @@ declare function setup:create-users($import-config as element(configuration))
50885105
50895106declare function setup:validate-users ($import-config as element (configuration))
50905107{
5108+ (: get the existing users from the default security DB :)
5109+ let $existing-users := setup:get-users (())
5110+
50915111 for $user in $import-config/sec:users/sec:user
50925112 let $user-name as xs:string := $user/sec:user-name
50935113 let $description as xs:string? := $user/sec:description
@@ -5096,7 +5116,7 @@ declare function setup:validate-users($import-config as element(configuration))
50965116 let $permissions as element (sec:permission)* := $user/sec:permissions/*
50975117 let $collections as xs:string* := $user/sec:collections/*
50985118 let $external-names as xs:string* := $user/sec:external-names/sec:external-name
5099- let $match := setup:get -users(()) /sec:user[sec:user-name = $user-name]
5119+ let $match := $existing -users/sec:user[sec:user-name = $user-name]
51005120 return
51015121 if ($match) then
51025122 if ($match/sec:description != $description or
@@ -5451,6 +5471,19 @@ declare function setup:get-privilege-by-name($name as xs:string) as element(sec:
54515471 </options>)
54525472};
54535473
5474+ (: Gets the user names from the default security database :)
5475+ declare function setup:get-existing-user-names () as element (sec:user-name)* {
5476+ let $user-names :=
5477+ xdmp:eval (
5478+ 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
5479+ /sec:user' ,
5480+ (),
5481+ <options xmlns = "xdmp:eval" >
5482+ <database>{$default-security}</database>
5483+ </options>)/sec:user-name
5484+ return $user-names
5485+ };
5486+
54545487declare function setup:get-users-by-name ($names as xs:string*) as element (sec:users)? {
54555488 let $ids :=
54565489 for $name in $names
@@ -5530,6 +5563,19 @@ declare function setup:get-user-id($user-name as xs:string) as xs:unsignedLong?
55305563 </options>)
55315564};
55325565
5566+ (: Gets the role names from the default security database :)
5567+ declare function setup:get-existing-role-names () as element (sec:role-name)* {
5568+ let $role-names :=
5569+ xdmp:eval (
5570+ 'import module namespace sec="http://marklogic.com/xdmp/security" at "/MarkLogic/security.xqy";
5571+ /sec:role' ,
5572+ (),
5573+ <options xmlns = "xdmp:eval" >
5574+ <database>{$default-security}</database>
5575+ </options>)/sec:role-name
5576+ return $role-names
5577+ };
5578+
55335579declare function setup:get-roles-by-name ($roles as xs:string*) as element (sec:roles)? {
55345580 let $ids :=
55355581 for $role in $roles
0 commit comments