MarkLogic - XQuery 语句的顺序处理
MarkLogic - Sequential processing of XQuery statements
我在代码下面 运行 并期望 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();
语句按该顺序执行,但所有内容都在同一个快照中提交给数据库。
fn:current-dateTime()
is deterministic,并且将始终 return 同一事务中的一致答案。
[Definition] A function that is guaranteed to produce ·identical· results from repeated calls within a single ·execution scope· if the explicit and implicit arguments are identical is referred to as deterministic.
您可以使用 xdmp:elapsed-time()
,它将 return 一个 xs:dayTimeDuration
自查询处理开始以来经过的时间,并将其添加到 fn:currentDateTime()
值:
<tstmp>{fn:current-dateTime() + xdmp:elapsed-time()}</tstmp>
我在代码下面 运行 并期望 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();
语句按该顺序执行,但所有内容都在同一个快照中提交给数据库。
fn:current-dateTime()
is deterministic,并且将始终 return 同一事务中的一致答案。
[Definition] A function that is guaranteed to produce ·identical· results from repeated calls within a single ·execution scope· if the explicit and implicit arguments are identical is referred to as deterministic.
您可以使用 xdmp:elapsed-time()
,它将 return 一个 xs:dayTimeDuration
自查询处理开始以来经过的时间,并将其添加到 fn:currentDateTime()
值:
<tstmp>{fn:current-dateTime() + xdmp:elapsed-time()}</tstmp>