0
我有一個測試案例在這裏:xdmp:評估和更新交易
let $s :=
'xquery version "1.0-ml";
for $doc in xdmp:directory("/test/")
return
xdmp:node-insert-child(doc(xdmp:node-uri($doc))/a,
<b>bbb</b>)
return
(xdmp:eval($s,(), <options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
<prevent-deadlocks>true</prevent-deadlocks>
</options>), xdmp:directory("/test/"))
我在這裏的主要目標是到一個新的元素在同一事務添加到每個文件「/測試/」並返回結果。與xdmp:eval()
和「不同交易」選項我認爲評估代碼將在一個單獨的交易中執行,其更新將可用於後續調用...所以第二個也是最後一個xdmp:directory("/test/")
應該返回所有更新的文檔與<b>
元素,但它返回未更新的文檔。
在這裏有任何注意事項xdmp:eval
和我試圖在單個交易中實現什麼?
也許懶惰的評價?您可以通過將eval的結果賦值給一個變量,然後強制評估該變量('let $ _eval:= xdmp:eval(...)let $ test:= empty($ _ eval)''來測試。更好的解決方案可能是使用XSLT或遞歸類型轉換在內存中轉換文檔,將其插入到原始文檔上並返回它還有一個ML內存更新庫,可以簡化某些語法,可以簡化一些語法 – wst
@謝謝,將嘗試強制評估,還有XSLT和類型切換,因爲這是操縱JSON(您昨天回答的問題),我轉換爲XML示例以使測試用例更簡單。 – Laterade