Операторы XQuery Update ничего не возвращают — так они определены. Но вы не единственный, кому не нравятся эти ограничения, и BaseX добавила два способа обойти это ограничение. ограничение:
Возврат результатов
По умолчанию невозможно смешивать разные типы выражений в результатах запроса. Самое внешнее выражение запроса должно быть набором обновляемых или необновляемых выражений. Но есть два выхода:
Специфическая для BaseX функция update:output()
устраняет этот пробел: она кэширует результаты своей аргументы во время выполнения и возвращает их после обработки всех обновлений. В следующем примере выполняется обновление и возвращается сообщение об успешном выполнении:
update:output("Update successful."), insert node <c/> into doc('factbook')/mondial
При выборе параметра MIXUPDATES
все ограничения обновления будут отключены. Возвращаемые узлы будут скопированы до того, как они будут изменены путем обновления выражений. Ошибка возникает, если элементы возвращаются в выражении преобразования.
Если вы хотите изменить узлы в основной памяти, вы можете использовать выражение transform
.
Выражение преобразования вам не поможет, так как вы, похоже, изменяете данные на диске. Включение MIXUPDATES
позволяет одновременно обновлять документ и что-то возвращать, например, запускать что-то вроде
let $node := <c/>
return ($node, insert node $node into doc('factbook')/mondial)
MIXUPDATES
позволяет вам вернуть что-то, что может быть дополнительно обработано. Результаты копируются перед возвратом. Если вы выполняете несколько операций обновления и не получаете ожидаемых результатов, убедитесь, что вы поняли концепцию список ожидающих обновлений.
Функция db:output()
намеренно нарушает свой интерфейсный контракт: она определена как функция обновления (не имеющая никакого вывода), но в то же время она выводит некоторую информацию в информацию запроса. Вы не можете дальше обрабатывать эти результаты, но вывод может помочь вам отладить некоторые проблемы.
Список ожидающих обновлений
В обоих случаях вы не сможете получить немедленный результат от обновления, вы должны добавить что-то самостоятельно - и помните, что обновления не видны, пока не будет применен список ожидающих обновлений, т.е. . после завершения запроса.
Совместимость
Очевидно, что эти параметры специфичны для BaseX. Если вам настоятельно требуется совместимый и стандартный XQuery, вы не можете использовать эти выражения.
person
Jens Erat
schedule
01.05.2016