<html dir="ltr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Windows-1252">
</head>
<body style="word-wrap:break-word; color:rgb(0,0,0); font-size:14px; font-family:Calibri,sans-serif" fpstyle="1" ocsi="0">
<div style="direction: ltr;font-family: Tahoma;color: #000000;font-size: 10pt;">Well, there are some caveats to that. For example, $set would need to be either a cts:search expression or fully searchable XPath expression. You won't get the optimization at all
 if it is referenced via a variable.&nbsp;<a href="https://docs.marklogic.com/guide/performance/order_by#id_59622" target="_blank">https://docs.marklogic.com/guide/performance/order_by#id_59622</a>&nbsp;(&quot;<span style="color: rgb(102, 102, 102); font-family: Tahoma, Arial, Helvetica, sans-serif; line-height: 18.06px; background-color: rgb(255, 255, 255);">The
 search or XPath expression must be part of the&nbsp;</span><code style="box-sizing: border-box; font-family: 'Courier New', Courier, monospace; padding: initial; color: rgb(102, 102, 102); border-radius: 4px; font-stretch: normal; background-color: rgb(255, 255, 255);">FLWOR</code><span style="color: rgb(102, 102, 102); font-family: Tahoma, Arial, Helvetica, sans-serif; line-height: 18.06px; background-color: rgb(255, 255, 255);">,
 not bound to a variable that is referenced in the&nbsp;</span><code style="box-sizing: border-box; font-family: 'Courier New', Courier, monospace; padding: initial; color: rgb(102, 102, 102); border-radius: 4px; font-stretch: normal; background-color: rgb(255, 255, 255);">FLWOR</code><span style="color: rgb(102, 102, 102); font-family: Tahoma, Arial, Helvetica, sans-serif; line-height: 18.06px; background-color: rgb(255, 255, 255);">.&quot;)</span>
<div><br>
</div>
<div>So based on what I'm seeing in his shared code that optimization won't be made. (&quot;for $output in $outputs&quot;)</div>
<div><br>
</div>
<div>My rationale behind the recommendation was that it would be easier to debug and less prone to injection than a massive xdmp:value with multiple xdmp:value therein. I think that also ends up being worse for performance when you have multiple layers of xdmp:value?</div>
<div><br>
</div>
<div>I do suspect the whole thing could be refactored as a cts:search expression including a cts:index-order and then the results iterated through to do his transform. That would be the best thing :)</div>
<div><br>
<div>Best,</div>
<div>Rob</div>
<div><br>
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">Rob Szkutak
<div>Associate Consultant</div>
<div>MarkLogic Corporation</div>
<div>rob.szkutak@marklogic.com</div>
<div>Cell &#43;1.716.562.8464</div>
<div><a href="http://www.marklogic.com">www.marklogic.com</a></div>
<div><br>
</div>
</div>
</div>
</div>
</div>
<div style="font-family: Times New Roman; color: #000000; font-size: 16px">
<hr tabindex="-1">
<div id="divRpF95446" style="direction: ltr;"><font face="Tahoma" size="2" color="#000000"><b>From:</b> general-bounces@developer.marklogic.com [general-bounces@developer.marklogic.com] on behalf of Geert Josten [Geert.Josten@marklogic.com]<br>
<b>Sent:</b> Wednesday, January 06, 2016 6:26 AM<br>
<b>To:</b> MarkLogic Developer Discussion<br>
<b>Subject:</b> Re: [MarkLogic Dev General] Unexpected token syntax error, unexpected Vbar_<br>
</font><br>
</div>
<div></div>
<div>
<div>Doing an if inside the order by (good suggestion by the way) would be most useful if you can eliminate the need for xdmp:value entirely. Doing xdmp:value inside the order by sounds worse to me than doing it for the entire flwor statement. If you do it
 for the entire flwor statement, static analysis might be able to leverage indexes to speed up sorting..</div>
<div><br>
</div>
<div>Cheers,</div>
<div>Geert</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; border-bottom:medium none; border-left:medium none; padding-bottom:0in; padding-left:0in; padding-right:0in; border-top:#b5c4df 1pt solid; border-right:medium none; padding-top:3pt">
<span style="font-weight:bold">From: </span>&lt;<a href="mailto:general-bounces@developer.marklogic.com" target="_blank">general-bounces@developer.marklogic.com</a>&gt; on behalf of Rob Szkutak &lt;<a href="mailto:rob.szkutak@marklogic.com" target="_blank">rob.szkutak@marklogic.com</a>&gt;<br>
<span style="font-weight:bold">Reply-To: </span>MarkLogic Developer Discussion &lt;<a href="mailto:general@developer.marklogic.com" target="_blank">general@developer.marklogic.com</a>&gt;<br>
<span style="font-weight:bold">Date: </span>Wednesday, January 6, 2016 at 1:21 PM<br>
<span style="font-weight:bold">To: </span>MarkLogic Developer Discussion &lt;<a href="mailto:general@developer.marklogic.com" target="_blank">general@developer.marklogic.com</a>&gt;<br>
<span style="font-weight:bold">Subject: </span>Re: [MarkLogic Dev General] Unexpected token syntax error, unexpected Vbar_<br>
</div>
<div><br>
</div>
<div dir="ltr"><style type="text/css" id="owaParaStyle">
<!--
-->
</style>
<div style="word-wrap:break-word; color:rgb(0,0,0); font-size:14px; font-family:Calibri,sans-serif">
<div style="direction:ltr; font-family:Tahoma; color:#000000; font-size:10pt">Couple of thoughts:
<div><br>
</div>
<div>1) You're not sharing your full code ($outputs and $aliases are not defined, for instance) . Any chance the error is in something not shown?</div>
<div><br>
</div>
<div>2) Have you checked the query you're passing into xdmp:value() to make sure there isn't an error in that?&nbsp;</div>
<div><br>
</div>
<div>Looking at your code I see this:</div>
<div><br>
</div>
<div><br>
</div>
<div>3) You have another syntax error at the bottom of your code. No $ before return $results. So there's no way this would run on either Windows or Linux ;-)</div>
<div><br>
</div>
<div>4) I wouldn't really recommend writing a query this way just to dynamically build an order by. I'd encourage you to use syntax like this instead (I'm using your variable names but you may still need to refactor this further):</div>
<div><br>
</div>
<div>for $each in $set</div>
<div>if($sort = 'ascending' and $sortOrder != '') then order by xdmp:value(<span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px; background-color:rgb(255,255,255)">fn:concat(&quot;$doc&quot;,&quot;//&quot;, $element) ascending</span></div>
<div><span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px; background-color:rgb(255,255,255)">else
</span>if($sort = 'descending' and $sortOrder != '') then order by xdmp:value(<span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px; background-color:rgb(255,255,255)">fn:concat(&quot;$doc&quot;,&quot;//&quot;, $element) descending</span></div>
<div><span style="font-family:Calibri,Arial,Helvetica,sans-serif; font-size:16px; background-color:rgb(255,255,255)"><br>
</span></div>
<div>
<div><br>
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">
<div style="font-family:Tahoma; font-size:13px">Rob Szkutak
<div>Associate Consultant</div>
<div>MarkLogic Corporation</div>
<div><a href="mailto:rob.szkutak@marklogic.com" target="_blank">rob.szkutak@marklogic.com</a></div>
<div>Cell &#43;1.716.562.8464</div>
<div><a href="http://www.marklogic.com" target="_blank">www.marklogic.com</a></div>
<div><br>
</div>
</div>
</div>
</div>
</div>
<div style="font-family:Times New Roman; color:#000000; font-size:16px">
<hr tabindex="-1">
<div id="divRpF422664" style="direction:ltr"><font face="Tahoma" size="2" color="#000000"><b>From:</b>
<a href="mailto:general-bounces@developer.marklogic.com" target="_blank">general-bounces@developer.marklogic.com</a> [<a href="mailto:general-bounces@developer.marklogic.com" target="_blank">general-bounces@developer.marklogic.com</a>] on behalf of Geert Josten
 [<a href="mailto:Geert.Josten@marklogic.com" target="_blank">Geert.Josten@marklogic.com</a>]<br>
<b>Sent:</b> Wednesday, January 06, 2016 5:01 AM<br>
<b>To:</b> MarkLogic Developer Discussion<br>
<b>Subject:</b> Re: [MarkLogic Dev General] Unexpected token syntax error, unexpected Vbar_<br>
</font><br>
</div>
<div></div>
<div>
<div>Hi Pragya,</div>
<div><br>
</div>
<div>It surprises me that this doesn’t error on Windows. The line that you marked ends with ||, but from the looks of it, there is no following string operand that I would expect. Try removing it..</div>
<div><br>
</div>
<div>Cheers,</div>
<div>Geert</div>
<div><br>
</div>
<span id="OLK_SRC_BODY_SECTION">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; border-bottom:medium none; border-left:medium none; padding-bottom:0in; padding-left:0in; padding-right:0in; border-top:#b5c4df 1pt solid; border-right:medium none; padding-top:3pt">
<span style="font-weight:bold">From: </span>&lt;<a href="mailto:general-bounces@developer.marklogic.com" target="_blank">general-bounces@developer.marklogic.com</a>&gt; on behalf of &quot;Kapoor, Pragya&quot; &lt;<a href="mailto:PKapoor1@innodata.com" target="_blank">PKapoor1@innodata.com</a>&gt;<br>
<span style="font-weight:bold">Reply-To: </span>MarkLogic Developer Discussion &lt;<a href="mailto:general@developer.marklogic.com" target="_blank">general@developer.marklogic.com</a>&gt;<br>
<span style="font-weight:bold">Date: </span>Wednesday, January 6, 2016 at 9:57 AM<br>
<span style="font-weight:bold">To: </span>MarkLogic Developer Discussion &lt;<a href="mailto:general@developer.marklogic.com" target="_blank">general@developer.marklogic.com</a>&gt;<br>
<span style="font-weight:bold">Subject: </span>[MarkLogic Dev General] Unexpected token syntax error, unexpected Vbar_<br>
</div>
<div><br>
</div>
<div><style type="text/css" style="">
<!--
p
        {margin-top:0;
        margin-bottom:0}
-->
</style>
<div dir="ltr">
<div id="divtagdefaultwrapper" style="font-size:12pt; color:#000000; background-color:#FFFFFF; font-family:Calibri,Arial,Helvetica,sans-serif">
Hi,
<div><br>
</div>
<div>Below code&nbsp;is working fine on windows server, but on linux server its giving the error.</div>
<div><br>
</div>
<div>XDMP-UNEXPECTED: (err:XPST0003) Unexpected token syntax error, unexpected Vbar_<br>
</div>
<div><br>
</div>
<div>
<div>&nbsp;let $sort as xs:string := string-join(<span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>for $output in $outputs</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $sortOrder := $output//sort/text()</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>(if($sortOrder != '') then<span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $element :=&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $path:= $output/path</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $ns := $path/@ns</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $path := fn:tokenize($path,&quot;/&quot;)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $elem := fn:concat($ns,&quot;:&quot;,$path[fn:last()],&quot;[1]&quot;)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $elemParent := fn:concat($ns,&quot;:&quot;,$path[fn:last()-1],&quot;[1]&quot;)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return fn:concat($elemParent,&quot;/&quot;,$elem)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return fn:concat(&quot;$doc&quot;,&quot;//&quot;, $element,&quot; &quot;,$sortOrder)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else ()),&quot;, &quot;)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><br>
</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&nbsp; let $results :=&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>'element report {</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>element columns {</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>for $alias in $aliases&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return element title {$alias}},</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>element results {</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>for $docId in $docUris</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $doc := fn:doc($docId)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $tempResult := &nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>element result {</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>for $output in $outputs</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $element :=&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $path:= $output/path</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $elem := fn:tokenize($path,&quot;/&quot;)[fn:last()]</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $ns := $path/@ns</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return fn:concat($ns,&quot;:&quot;,$elem)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $functions := if($output/functions) then fn:data($output/functions) else ()</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $type := &nbsp;if($output/functions) then fn:data($output/functions/@type) else ()</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $alias := fn:data($output/columnAlias)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $result := $doc//*[name() = $element]/text()</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $result :=</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if($type eq &quot;string&quot;) then</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $exp := fn:replace($functions,$alias,fn:concat(&quot;&amp;apos;&quot;,$result,&quot;&amp;apos;&quot;))</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return xdmp:value($exp)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else<span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&nbsp; (:let $exp := (fn:replace($functions,$alias,$result[1])):)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&nbsp; &nbsp;(:xdmp:value(&quot;$exp&quot;):) $result</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if($cartesianFlag eq &quot;false&quot;) then&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>element {$alias} {fn:string-join($result,&quot;;&quot;)}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $resultCount := fn:count($result)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if($resultCount &gt; 1 ) then for $i in $result return &nbsp;element {$alias} { ($i) }</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>&nbsp; element {$alias} { ($result) }</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span><b>}' || &nbsp;(if($sort != '') then fn:concat(&quot;order by &quot;,$sort) else ()) || (: error on this line:)&nbsp;</b></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>' return&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>if($cartesianFlag eq &quot;false&quot;) then&nbsp;</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>$tempResult</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>else</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>for $result in $tempResult</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $_ := xdmp:set($qt, &quot;&quot;)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>return local:transform-into-result($result)</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>}'</div>
<div><span class="Apple-tab-span" style="white-space:pre"></span></div>
<div><span class="Apple-tab-span" style="white-space:pre"></span>let $results := &nbsp;xdmp:value($results)</div>
<div>&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return results</div>
<div><br>
</div>
<div>Thanks</div>
<div>Pragya</div>
<div><br>
</div>
<br>
</div>
</div>
&quot;This e-mail and any attachments transmitted with it are for the sole use of the intended recipient(s) and may contain confidential , proprietary or privileged information. If you are not the intended recipient, please contact the sender by reply e-mail and
 destroy all copies of the original message. Any unauthorized review, use, disclosure, dissemination, forwarding, printing or copying of this e-mail or any action taken in reliance on this e-mail is strictly prohibited and may be unlawful.&quot;
</div>
</div>
</span></div>
</div>
</div>
</div>
</div>
</div>
</span></div>
</div>
</div>
</div>
</body>
</html>