Skip to content
This repository was archived by the owner on Nov 9, 2022. It is now read-only.

Commit f2ebad2

Browse files
committed
Fixed #661: wrap app_name query in xdmp:eval to provide appropriate context
1 parent 1326241 commit f2ebad2

File tree

1 file changed

+51
-9
lines changed

1 file changed

+51
-9
lines changed

deploy/lib/server_config.rb

Lines changed: 51 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2487,19 +2487,61 @@ def execute_query_7(query, properties = {})
24872487
end
24882488

24892489
def execute_query_8(query, properties = {})
2490-
if properties[:app_name] != nil
2491-
raise ExitException.new("Executing queries with an app_name (currently) not supported with ML8+")
2492-
end
2493-
24942490
headers = {
24952491
"Content-Type" => "application/x-www-form-urlencoded"
24962492
}
2493+
params = {}
24972494

2498-
params = {
2499-
:xquery => query,
2500-
:locale => LOCALE,
2501-
:tzoffset => "-18000"
2502-
}
2495+
if properties[:app_name] != nil
2496+
params[:xquery] = %Q{
2497+
xquery version "1.0-ml";
2498+
2499+
(: derived from qconsole-amped.xqy :)
2500+
declare function local:eval-options(
2501+
$server-id as xs:unsignedLong
2502+
) as element()
2503+
{
2504+
let $database-id := xdmp:server-database($server-id)
2505+
let $collation := xdmp:server-collation($server-id)
2506+
let $modules-id := xdmp:server-modules-database($server-id)
2507+
let $xquery-version := xdmp:server-default-xquery-version($server-id)
2508+
let $modules-root := xdmp:server-root($server-id)
2509+
let $default-coordinate-system := xdmp:server-coordinate-system($server-id)
2510+
return
2511+
<options xmlns="xdmp:eval">{
2512+
if ($database-id eq xdmp:database()) then ()
2513+
else element database { $database-id },
2514+
2515+
if ($modules-id eq xdmp:modules-database()) then ()
2516+
else element modules { $modules-id },
2517+
2518+
if ($collation eq default-collation()) then ()
2519+
else element default-collation { $collation },
2520+
2521+
if (empty($default-coordinate-system)) then ()
2522+
else element default-coordinate-system { $default-coordinate-system },
2523+
2524+
if ($xquery-version eq xdmp:xquery-version()) then ()
2525+
else element default-xquery-version { $xquery-version },
2526+
2527+
(: we should always have a root path, but better safe than sorry :)
2528+
if (empty($modules-root) or $modules-root eq xdmp:modules-root()) then ()
2529+
else element root { $modules-root },
2530+
2531+
element isolation { "different-transaction" }
2532+
}</options>
2533+
};
2534+
2535+
let $query := <query><![CDATA[#{query}]]></query>
2536+
return xdmp:eval(
2537+
string($query),
2538+
(),
2539+
local:eval-options(xdmp:server("#{properties[:app_name]}"))
2540+
)
2541+
}
2542+
else
2543+
params[:xquery] = query
2544+
end
25032545

25042546
if properties[:db_name] != nil
25052547
params[:database] = properties[:db_name]

0 commit comments

Comments
 (0)