Создание удаленных транзакций и присоединение операторов в MarkLogic - PullRequest
0 голосов
/ 24 апреля 2019

Я пытаюсь реализовать функциональность, аналогичную конечной точке /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? Просто кажется странным предоставлять функции для фиксации и отката удаленных транзакций, для которых нет утвержденного способа создания или обновления.

1 Ответ

1 голос
/ 24 апреля 2019

Да, к сожалению, единственный способ достичь этого самостоятельно и создать собственный API - это использовать недокументированные функции.

Взгляните на Транзакции с несколькими утверждениями в XQRS с транзакция.xq , это может дать вам еще лучшую идею.

Что касается настройки того, доступны ли отдельные операторы только для чтения или обновления, вы можете использовать аннотацию% xdmp: update.

...