我正在尝试在自定义API中实现类似于MarkLogic REST API的/transactions
端点的功能。但是,看起来只有一些实现此目的所需的功能在XQuery中可用。
xdmp:transaction-commit()
和xdmp:transaction-rollback()
来远程管理现有的未清事务,但是没有相应的XQuery函数来打开新事务或向其附加新语句。
我窥探了REST API的实现,看看它是如何完成的,他们使用了未记录的功能xdmp:transaction-create()
和已弃用的选项<transaction-mode>update</transaction-mode>
(我用<update>
和{ {1}}选项,可以隔离服务器!)。
语句然后通过<commit>
附加到XML重写器中的事务,该事务与XQuery函数不对应,但是我认为它与使用<set-transaction>
或{{1}是同一件事}和eval
选项(也已弃用)。
使用这些方法进行简单的概念验证似乎可以很好地工作,但是我不确定是否缺少一种无需使用未记录且不推荐使用的功能来进行此操作的方法。也许还可以,因为这就是REST API的方式吗?提供用于提交和回滚远程事务的功能似乎很奇怪,而对于这些事务,尚无批准的方式来创建或更新这些事务。
答案 0 :(得分:1)
是的,不幸的是,实现自己并创建自己的API的唯一方法是使用未记录的函数。
使用Multi-statement Transactions来查看XQRS中的transaction.xq,这仍然可以为您提供更好的主意。
关于设置单个语句是只读的还是更新的,可以使用%xdmp:update注释。