MarkLogic - последовательная обработка операторов XQuery - PullRequest
0 голосов
/ 10 января 2019

Я работаю под кодом и ожидаю, что функция insert-after будет выполнена после функции insert-before (по крайней мере, с интервалом в 2000 миллисекунд), так как я понимаю, что XQuery будет выполнять операторы в последовательности. Но после запуска кода я вижу, что оба документа ( / content / testbefore.xml и / content / testafter.xml ), созданные двумя функциями, имеют точное совпадение значений меток времени до миллисекунд.

Как сделать так, чтобы операторы выполнялись последовательно?

xquery version "1.0-ml";

declare function local:insert-before()
  {
  let $contents :=
    <book>
      <bookTitle>All About George</bookTitle>
      <tstmp>{fn:current-dateTime()}</tstmp>
      <chapter1>
        <chapterTitle>Curious George</chapterTitle>
      </chapter1>
   </book>
  return xdmp:document-insert("/content/testbefore.xml", $contents)
};

declare function local:insert-after()
{
let $contents :=
  <after>
    <bookTitle>All About George</bookTitle>
    <tstmp>{fn:current-dateTime()}</tstmp>
    <chapter1>
      <chapterTitle>Curious George</chapterTitle>
    </chapter1>
 </after>
 return xdmp:document-insert("/content/testafter.xml", $contents)
};

local:insert-before(),
xdmp:commit(),
xdmp:sleep(2000),
local:insert-after();

Ответы [ 2 ]

0 голосов
/ 10 января 2019

fn:current-dateTime() является детерминированным и всегда будет возвращать согласованный ответ в рамках одной и той же транзакции.

[Определение] Функция, которая гарантированно производит · идентичные · результаты повторных вызовов в пределах одной · области выполнения ·, если явные и неявные аргументы идентичны, называется детерминированной.

Вы можете использовать xdmp:elapsed-time(), который вернет xs:dayTimeDuration времени, прошедшего с начала обработки запроса, и добавить его к значению fn:currentDateTime():

<tstmp>{fn:current-dateTime() + xdmp:elapsed-time()}</tstmp>
0 голосов
/ 10 января 2019

Операторы выполняются в таком порядке, но все фиксируется в базе данных в одном снимке.

...