@@ -2412,8 +2412,10 @@ def execute_query_5(query, properties = {})
24122412    # 4. Any database 
24132413    if  properties [ :db_name ]  != nil 
24142414      db_id  =  get_db_id ( properties [ :db_name ] ) 
2415+       logger . warn  "WARN: No Database with name #{ properties [ :db_name ] }   found"  if  db_id . nil? 
24152416    elsif  properties [ :app_name ]  != nil 
24162417      sid  =  get_sid ( properties [ :app_name ] ) 
2418+       logger . warn  "WARN: No App-Server with name #{ properties [ :app_name ] }   found"  if  sid . nil? 
24172419    else 
24182420      sid  =  get_sid ( "Manage" ) 
24192421    end 
@@ -2454,8 +2456,10 @@ def execute_query_7(query, properties = {})
24542456    # 4. Any database 
24552457    if  properties [ :db_name ]  != nil 
24562458      db_id  =  get_db_id ( properties [ :db_name ] ) 
2459+       logger . warn  "WARN: No Database with name #{ properties [ :db_name ] }   found"  if  db_id . nil? 
24572460    elsif  properties [ :app_name ]  != nil 
24582461      sid  =  get_sid ( properties [ :app_name ] ) 
2462+       logger . warn  "WARN: No App-Server with name #{ properties [ :app_name ] }   found"  if  sid . nil? 
24592463    else 
24602464      sid  =  get_sid ( "Manage" ) 
24612465    end 
@@ -2487,22 +2491,80 @@ def execute_query_7(query, properties = {})
24872491  end 
24882492
24892493  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+" ) 
2494+     # check input like in older versions 
2495+     if  properties [ :db_name ]  != nil 
2496+       db_id  =  get_db_id ( properties [ :db_name ] ) 
2497+       raise  ExitException . new ( "No Database with name #{ properties [ :db_name ] }   found" )  if  db_id . nil? 
2498+     elsif  properties [ :app_name ]  != nil 
2499+       sid  =  get_sid ( properties [ :app_name ] ) 
2500+       raise  ExitException . new ( "No Server with name #{ properties [ :app_name ] }   found" )  if  sid . nil? 
24922501    end 
24932502
24942503    headers  =  { 
24952504      "Content-Type"  =>  "application/x-www-form-urlencoded" 
24962505    } 
2506+     params  =  { } 
24972507
2498-     params   =   { 
2499-        :xquery   =>   query , 
2500-        :locale   =>   LOCALE , 
2501-       :tzoffset   =>   "-18000" 
2502-     } 
2508+     # If app_name is specified, wrap the eval in an xdmp:eval to create an eval context 
2509+     # that matches that of the selected app-server 
2510+     if   properties [ :app_name ]  !=  nil 
2511+       params [ :xquery ]   =   %Q{ 
2512+         xquery version "1.0-ml";  
25032513
2504-     if  properties [ :db_name ]  != nil 
2505-       params [ :database ]  =  properties [ :db_name ] 
2514+         (: derived from qconsole-amped.xqy :) 
2515+         declare function local:eval-options( 
2516+           $server-id as xs:unsignedLong 
2517+         ) as element() 
2518+         { 
2519+           let $database-id := xdmp:server-database($server-id) 
2520+           let $collation := xdmp:server-collation($server-id) 
2521+           let $modules-id := xdmp:server-modules-database($server-id) 
2522+           let $xquery-version := xdmp:server-default-xquery-version($server-id) 
2523+           let $modules-root := xdmp:server-root($server-id) 
2524+           let $default-coordinate-system := 
2525+             (: xdmp:server-coordinate-system not supported in ML8 and older :) 
2526+             for $f in fn:function-lookup(xs:QName("xdmp:server-coordinate-system"), 1) 
2527+             return $f($server-id) 
2528+           return 
2529+             <options xmlns="xdmp:eval">{ 
2530+               if ($database-id eq xdmp:database()) then () 
2531+               else element database { $database-id }, 
2532+ 
2533+               if ($modules-id eq xdmp:modules-database()) then () 
2534+               else element modules { $modules-id }, 
2535+ 
2536+               if ($collation eq default-collation()) then () 
2537+               else element default-collation { $collation }, 
2538+ 
2539+               if (empty($default-coordinate-system)) then () 
2540+               else element default-coordinate-system { $default-coordinate-system }, 
2541+ 
2542+               if ($xquery-version eq xdmp:xquery-version()) then () 
2543+               else element default-xquery-version { $xquery-version }, 
2544+ 
2545+               (: we should always have a root path, but better safe than sorry :) 
2546+               if (empty($modules-root) or $modules-root eq xdmp:modules-root()) then () 
2547+               else element root { $modules-root }, 
2548+ 
2549+               element isolation { "different-transaction" } 
2550+             }</options> 
2551+         }; 
2552+ 
2553+         let $query := <query><![CDATA[#{ query }  ]]></query> 
2554+         return xdmp:eval( 
2555+           string($query), 
2556+           (), 
2557+           local:eval-options(xdmp:server("#{ properties [ :app_name ] }  ")) 
2558+         ) 
2559+       } 
2560+     else 
2561+       # No app_name, just run the straight query 
2562+       params [ :xquery ]  =  query 
2563+ 
2564+       # Pass through selected database if specified, otherwise run against App-Services 
2565+       if  properties [ :db_name ]  != nil 
2566+         params [ :database ]  =  properties [ :db_name ] 
2567+       end 
25062568    end 
25072569
25082570    r  =  go  "#{ @protocol }  ://#{ @hostname }  :#{ @qconsole_port }  /v1/eval" ,  "post" ,  headers ,  params 
0 commit comments