В marklogic 9 у меня есть расширение службы ресурсов, написанное на xquery.Это конечная точка «delete», поэтому режим транзакции «update».Я делаю что-то похожее на:
(: search for objects that have /a/id = $theId :)
let $objs := cts:search(fn:doc(), cts:path-range-query('/a/id', $theId)
(: log the number of results :)
let $_ := xdmp:log(fn:count($objs))
(: for each of the objects, remove the /a/id node :)
let $_ := for ($obj in $objs) xdmp:node-delete($obj/a/id)
(: search for objects that have /a/id = $theId :)
let $objs2 := cts:search(fn:doc(), cts:path-range-query('/a/id', $theId)
(: log the number of results :)
let $_ := xdmp:log(fn:count($objs2))
Мое первое ожидание состояло в том, что зарегистрированные значения будут отличаться: первое будет количеством результатов поиска, а второе всегда будет нулевым, так как яудалил узел '/ a / id' из каждого результата.Но оба записанных значения всегда одинаковы.т.е. изменения, сделанные в транзакции, не видны в расширении.
Я прочитал в https://docs.marklogic.com/guide/app-dev/transactions#id_85012, что updates are not visible within the updating statement
, поэтому я попытался заставить расширение службы ресурсов вести себя как мульти-операторобновление без удачи.Я также пытался явно вызвать let $_ := xdmp:commit()
перед вторым поиском, опять же безуспешно.
Возможно ли иметь желаемое поведение в расширении службы ресурсов xquery?