@@ -566,6 +566,67 @@ declare function setup:unique-attributes($attrs) {
566
566
return map:keys ($result) ! map:get ($result, .)
567
567
};
568
568
569
+ declare function setup:wrap-config-fragments ($fragments) {
570
+ if (fn:exists ($fragments)) then
571
+ <configuration>
572
+ <hosts xmlns = "http://marklogic.com/xdmp/hosts" >{
573
+ setup:unique-attributes ($fragments/self::ho:hosts/@*),
574
+ $fragments/self::ho:hosts/*,
575
+ $fragments/self::ho:host
576
+ }</hosts>
577
+ <assignments xmlns = "http://marklogic.com/xdmp/assignments" >{
578
+ setup:unique-attributes ($fragments/self::as:assignments/@*),
579
+ $fragments/self::as:assignments/*,
580
+ $fragments/self::as:assignment
581
+ }</assignments>
582
+ <databases xmlns = "http://marklogic.com/xdmp/database" >{
583
+ setup:unique-attributes ($fragments/self::db:databases/@*),
584
+ $fragments/self::db:databases/*,
585
+ $fragments/self::db:database
586
+ }</databases>
587
+ <certificates xmlns = "http://marklogic.com/xdmp/pki" >{
588
+ setup:unique-attributes ($fragments/self::pki:certificates/@*),
589
+ $fragments/self::pki:certificates/*,
590
+ $fragments/self::pki:certificate
591
+ }</certificates>
592
+ <roles xmlns = "http://marklogic.com/xdmp/security" >{
593
+ setup:unique-attributes ($fragments/self::sec:roles/@*),
594
+ $fragments/self::sec:roles/*,
595
+ $fragments/self::sec:role
596
+ }</roles>
597
+ <users xmlns = "http://marklogic.com/xdmp/security" >{
598
+ setup:unique-attributes ($fragments/self::sec:users/@*),
599
+ $fragments/self::sec:users/*,
600
+ $fragments/self::sec:user
601
+ }</users>
602
+ <amps xmlns = "http://marklogic.com/xdmp/security" >{
603
+ setup:unique-attributes ($fragments/self::sec:amps/@*),
604
+ $fragments/self::sec:amps/*,
605
+ $fragments/self::sec:amp
606
+ }</amps>
607
+ <privileges xmlns = "http://marklogic.com/xdmp/security" >{
608
+ setup:unique-attributes ($fragments/self::sec:privileges/@*),
609
+ $fragments/self::sec:privileges/*,
610
+ $fragments/self::sec:privilege
611
+ }</privileges>
612
+ <mimetypes xmlns = "http://marklogic.com/xdmp/mimetypes" >{
613
+ setup:unique-attributes ($fragments/self::mt:mimetypes/@*),
614
+ $fragments/self::mt:mimetypes/*,
615
+ $fragments/self::mt:mimetype
616
+ }</mimetypes>
617
+ <external-securities xmlns = "http://marklogic.com/xdmp/security" >{
618
+ setup:unique-attributes ($fragments/self::sec:external-securities/@*),
619
+ $fragments/self::sec:external-securities/*,
620
+ $fragments/self::sec:external-security
621
+ }</external-securities>
622
+ <credentials xmlns = "http://marklogic.com/xdmp/security" >{
623
+ setup:unique-attributes ($fragments/self::sec:credentials/@*),
624
+ $fragments/self::sec:credentials/*
625
+ }</credentials>
626
+ </configuration>/*
627
+ else ()
628
+ };
629
+
569
630
(: for backwards-compatibility :)
570
631
declare function setup:rewrite-config ($import-configs as node ()+, $properties as map:map) as element (configuration)
571
632
{
@@ -580,28 +641,43 @@ declare function setup:rewrite-config($import-configs as node()+, $properties as
580
641
declare function setup:rewrite-config ($import-configs as node ()+, $properties as map:map, $silent as xs:boolean?, $keep-comments as xs:boolean?) as element (configuration)
581
642
{
582
643
let $config :=
583
- element { fn:node-name ($import-configs[ 1 ]) } {
584
- setup:unique-attributes ($import-configs/@*),
644
+ element configuration {
645
+ setup:unique-attributes ($import-configs/self::configuration/ @*),
585
646
586
647
(: capture comments before gr:groups, and its older counterparts :)
587
- $import-configs/(
648
+ $import-configs/self::configuration/ (
588
649
gr:groups, gr:http-servers, gr:xdbc-servers, gr:odbc-servers, gr:task-server
589
650
)/preceding-sibling::node (),
590
651
591
652
<groups xmlns = "http://marklogic.com/xdmp/group" >{
592
- $import-configs/gr:groups/@*,
593
-
594
- let $default-group := ($import-configs/@default-group , "Default" )[1 ]
595
- for $group in fn:distinct-values (
596
- ($import-configs/gr:groups/gr:group /gr:group-name, $import-configs/(gr:http-servers/gr:http-server, gr:xdbc-servers/gr:xdbc-server,
597
- gr:odbc-servers/gr:odbc-server, gr:task-server, db:databases/db:database)/@group , $default-group))
598
- let $http-servers := $import-configs/gr:http-servers/gr:http-server[@group = $group or ($group = $default-group and fn:empty (@group ))]
599
- let $xdbc-servers := $import-configs/gr:xdbc-servers/gr:xdbc-server[@group = $group or ($group = $default-group and fn:empty (@group ))]
600
- let $odbc-servers := $import-configs/gr:odbc-servers/gr:odbc-server[@group = $group or ($group = $default-group and fn:empty (@group ))]
601
- let $task-server := $import-configs/gr:task-server[@group = $group or ($group = $default-group and fn:empty (@group ))]
653
+ setup:unique-attributes ($import-configs/gr:groups/@*),
654
+
655
+ let $default-group := ($import-configs/self::*:configuration/@default-group , "Default" )[1 ]
656
+ for $group in fn:distinct-values ((
657
+ $import-configs/descendant-or-self::gr:group /gr:group-name,
658
+ $import-configs/descendant-or-self::*/(
659
+ self::gr:http-server, self::gr:xdbc-server,
660
+ self::gr:odbc-server, self::gr:task-server, self::db:database
661
+ )/@group ,
662
+ $default-group
663
+ ))
664
+ let $http-servers := $import-configs/descendant-or-self::gr:http-server[
665
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
666
+ ]
667
+ let $xdbc-servers := $import-configs/descendant-or-self::gr:xdbc-server[
668
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
669
+ ]
670
+ let $odbc-servers := $import-configs/descendant-or-self::gr:odbc-server[
671
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
672
+ ]
673
+ let $task-server := $import-configs/descendant-or-self::gr:task-server[
674
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
675
+ ]
602
676
let $servers := ($http-servers, $xdbc-servers, $odbc-servers, $task-server)
603
- let $databases := $import-configs/db:databases/db:database[@group = $group or ($group = $default-group and fn:empty (@group ))]
604
- let $group-config := $import-configs/gr:groups/gr:group [gr:group-name = $group]
677
+ let $databases := $import-configs/descendant-or-self::db:database[
678
+ @group = $group or ( $group = $default-group and fn:empty (@group ) )
679
+ ]
680
+ let $group-config := $import-configs/descendant-or-self::gr:group [gr:group-name = $group]
605
681
where fn:exists ($servers | $databases | $group-config)
606
682
return
607
683
<group>
@@ -626,14 +702,24 @@ declare function setup:rewrite-config($import-configs as node()+, $properties as
626
702
}</groups>,
627
703
628
704
(: capture anything following gr:groups, and its older counterparts :)
629
- $import-configs/(
705
+ $import-configs/self::*:configuration/ (
630
706
gr:groups, gr:http-servers, gr:xdbc-servers, gr:odbc-servers, gr:task-server
631
707
)/following-sibling::node (),
632
708
633
- (: other fragments with configuration as root :)
634
- $import-configs[fn:empty ((
635
- gr:groups, gr:http-servers, gr:xdbc-servers, gr:odbc-servers, gr:task-server
636
- ))]/node ()
709
+ (: in case of config fragments, merge and wrap them :)
710
+ setup:wrap-config-fragments ((
711
+ (: fragments with configuration as root :)
712
+ $import-configs/self::*:configuration[fn:empty ((
713
+ gr:groups, gr:http-servers, gr:xdbc-servers, gr:odbc-servers, gr:task-server
714
+ ))]/node (),
715
+
716
+ (: other fragments :)
717
+ $import-configs[fn:not (self::*:configuration)]/(self::node () except (
718
+ self::gr:groups, self::gr:group , self::gr:http-servers, self::gr:http-server,
719
+ self::gr:xdbc-servers, self::gr:xdbc-server, self::gr:odbc-servers, self::gr:odbc-server,
720
+ self::gr:task-server
721
+ ))
722
+ ))
637
723
}
638
724
639
725
(: Check config on group consistency! :)
0 commit comments