Testing 测试XQuery和Marklogic事务

Testing 测试XQuery和Marklogic事务,testing,transactions,xquery,marklogic,Testing,Transactions,Xquery,Marklogic,我们有一些需要版本控制的业务需求。为此,我们选择使用MarkLogic库服务。我们在使用X射线和事务测试代码时遇到了一个问题 我们的测试如下: declare function should-save-with-version-when-releasing() { declare option xdmp:transaction-mode "update"; let $uri := '/some-document-uri.xml' let $document :

我们有一些需要版本控制的业务需求。为此,我们选择使用MarkLogic库服务。我们在使用X射线和事务测试代码时遇到了一个问题

我们的测试如下:

declare function should-save-with-version-when-releasing() {
declare option xdmp:transaction-mode "update";

    let $uri := '/some-document-uri.xml'         
    let $document := fn:doc($uri) 
    let $pre-release-version := c:get-latest-version($uri)
    let $post-release-version := c:get-latest-version($uri)
    let $result := mut:release($document) (:this should version up:)

    return (assert:not-empty($pre-release-version), 
            assert:not-empty($result), 
            assert:not-equal($pre-release-version,$post-release-version),
            xdmp:rollback())
不管发生什么,测试都会通过,结果是ML rollback删除了所有变量

我们如何使用事务测试它

非常感谢任何帮助


im

使用MarkLogic时,整个XQuery更新通常与单个事务类似。当
mut:release
向事务堆栈添加更新时,查询的其余部分在提交更新之前不会看到该更新。从查询的角度来看,这通常发生在整个查询完成之后,并且对查询不可见

文档中有一些有用的内容可以添加:

回滚事务时,当前语句将立即 终止,则事务中任何语句所做的更新 丢弃,事务终止

所以,并不是这些变量被破坏了:而是你的程序结束了

我认为有一个非常接近您的用例的示例:“示例:多语句事务和同一语句隔离”。它演示了如何
xdmp:eval
xdmp:invoke
更新文档并查看同一查询中的结果


测试它以查看它是否工作,然后用
xdmp:rollback
替换
xdmp:commit
。对我来说,这个例子仍然有效。开始用单元测试逻辑替换其余的逻辑,您就可以开始了。

使用MarkLogic,整个XQuery更新通常就像一个事务一样。当
mut:release
向事务堆栈添加更新时,查询的其余部分在提交更新之前不会看到该更新。从查询的角度来看,这通常发生在整个查询完成之后,并且对查询不可见

文档中有一些有用的内容可以添加:

回滚事务时,当前语句将立即 终止,则事务中任何语句所做的更新 丢弃,事务终止

所以,并不是这些变量被破坏了:而是你的程序结束了

我认为有一个非常接近您的用例的示例:“示例:多语句事务和同一语句隔离”。它演示了如何
xdmp:eval
xdmp:invoke
更新文档并查看同一查询中的结果

测试它以查看它是否工作,然后用
xdmp:rollback
替换
xdmp:commit
。对我来说,这个例子仍然有效。开始用您的单元测试逻辑替换其余的逻辑,您就可以开始了