Я пытаюсь реализовать функциональность, аналогичную конечной точке /transactions
MarkLogic REST API, в пользовательском API. Тем не менее, похоже, что в XQuery доступны только некоторые функции, необходимые для достижения этой цели.
xdmp:transaction-commit()
и xdmp:transaction-rollback()
предназначены для удаленного управления существующими открытыми транзакциями, но нет соответствующих функций XQuery для открытия новой транзакции или для добавления новых операторов к ней.
Я слонялся по реализации REST API, чтобы посмотреть, как это там делается, и они используют недокументированную функцию xdmp:transaction-create()
с устаревшей опцией <transaction-mode>update</transaction-mode>
(я тестировал с опциями <update>
и <commit>
, что вызывает ошибки сервер!).
Затем операторы присоединяются к транзакции в переписывающем устройстве XML через <set-transaction>
, что не соответствует функции XQuery, но я предполагаю, что это то же самое, что и использование eval
или invoke
с <transaction-id>
опция (также не рекомендуется).
Кажется, что простое доказательство концепции с использованием этих методов работает нормально, но я не уверен, что мне не хватает способа сделать это без использования недокументированных и устаревших функций. Может быть, все в порядке, потому что так работает REST API? Просто кажется странным предоставлять функции для фиксации и отката удаленных транзакций, для которых нет утвержденного способа создания или обновления.