【发布时间】:2023-03-27 17:14:01
【问题描述】:
我正在尝试在自定义 API 中实现类似于 MarkLogic REST API 的 /transactions 端点的功能。但是,看起来 XQuery 中只有实现这一点所需的一些函数可用。
xdmp:transaction-commit() 和xdmp:transaction-rollback() 用于远程管理现有的打开事务,但没有相应的 XQuery 函数来打开新事务或附加新语句。
我在 REST API 实现中四处窥探,看看它是如何在那里完成的,他们使用未记录的函数 xdmp:transaction-create() 和不推荐使用的选项 <transaction-mode>update</transaction-mode>(我使用 <update> 和 <commit> 选项进行了测试,其中有段错误服务器!)。
语句然后通过<set-transaction> 附加到 XML 重写器中的事务,这与 XQuery 函数不对应,但我认为它与使用 eval 或 invoke 与<transaction-id> 相同选项(也已弃用)。
使用这些方法的简单概念证明似乎可以正常工作,但我不确定我是否错过了在不使用未记录和已弃用功能的情况下执行此操作的方法。也许没关系,因为 REST API 就是这样做的?提供提交和回滚远程事务的函数似乎很奇怪,而这些事务没有经过批准的创建或更新方式。
【问题讨论】:
标签: transactions xquery marklogic marklogic-9