@@ -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