如何 return 结果连同 BaseX 中的更新操作?
How to return results together with update operations in BaseX?
我发现 (insert
/delete
)-XQueries 使用 BaseX 客户端执行时总是返回一个空字符串。我发现这非常令人困惑或不直观。
有没有一种方法可以在不再次查询数据库的情况下查明查询是否为 "successful"(并使用可能有问题的 "transitive" 逻辑,例如 "if I deleted a node, there must be 'oldNodeCount-1' nodes in the XML")?
XQuery Update 语句不return 任何东西——这就是它们的定义方式。但你不是唯一不喜欢这些限制的人,BaseX added two ways around this limitation:
Returning Results
By default, it is not possible to mix different types of expressions
in a query result. The outermost expression of a query must either be
a collection of updating or non-updating expressions. But there are
two ways out:
The BaseX-specific update:output()
function bridges this gap: it caches the results of its arguments at runtime and returns them after
all updates have been processed. The following example performs an
update and returns a success message:
update:output("Update successful."), insert node <c/> into doc('factbook')/mondial
With the MIXUPDATES
option, all updating constraints will be turned off. Returned nodes will be copied before they are modified by
updating expressions. An error is raised if items are returned within
a transform expression.
If you want to modify nodes in main memory, you can use the transform
expression.
转换表达式对您没有帮助,因为您似乎修改了磁盘磁盘上的数据。启用 MIXUPDATES
允许您同时更新文档和 return 某些内容,例如 运行ning 类似
let $node := <c/>
return ($node, insert node $node into doc('factbook')/mondial)
MIXUPDATES
允许您 return 可以进一步处理的东西。结果在 returned 之前被复制,如果您 运行 多次更新操作并没有得到预期的结果,请确保您了解 pending update list.
db:output()
函数故意破坏了它的接口契约:它被定义为一个更新函数(没有任何输出),但同时它打印一些信息到查询信息。您无法进一步处理这些结果,但输出可以帮助您调试一些问题。
待更新列表
两种方式,您将不能从更新中立即得到结果,您必须自己添加一些东西——并且要注意更新直到应用挂起的更新列表,即。查询完成后。
兼容性
显然,这些选项是特定于 BaseX 的。如果您强烈需要兼容和标准的 XQuery,则不能使用这些表达式。
我发现 (insert
/delete
)-XQueries 使用 BaseX 客户端执行时总是返回一个空字符串。我发现这非常令人困惑或不直观。
有没有一种方法可以在不再次查询数据库的情况下查明查询是否为 "successful"(并使用可能有问题的 "transitive" 逻辑,例如 "if I deleted a node, there must be 'oldNodeCount-1' nodes in the XML")?
XQuery Update 语句不return 任何东西——这就是它们的定义方式。但你不是唯一不喜欢这些限制的人,BaseX added two ways around this limitation:
Returning Results
By default, it is not possible to mix different types of expressions in a query result. The outermost expression of a query must either be a collection of updating or non-updating expressions. But there are two ways out:
The BaseX-specific
update:output()
function bridges this gap: it caches the results of its arguments at runtime and returns them after all updates have been processed. The following example performs an update and returns a success message:update:output("Update successful."), insert node <c/> into doc('factbook')/mondial
With the
MIXUPDATES
option, all updating constraints will be turned off. Returned nodes will be copied before they are modified by updating expressions. An error is raised if items are returned within a transform expression.If you want to modify nodes in main memory, you can use the
transform
expression.
转换表达式对您没有帮助,因为您似乎修改了磁盘磁盘上的数据。启用 MIXUPDATES
允许您同时更新文档和 return 某些内容,例如 运行ning 类似
let $node := <c/>
return ($node, insert node $node into doc('factbook')/mondial)
MIXUPDATES
允许您 return 可以进一步处理的东西。结果在 returned 之前被复制,如果您 运行 多次更新操作并没有得到预期的结果,请确保您了解 pending update list.
db:output()
函数故意破坏了它的接口契约:它被定义为一个更新函数(没有任何输出),但同时它打印一些信息到查询信息。您无法进一步处理这些结果,但输出可以帮助您调试一些问题。
待更新列表
两种方式,您将不能从更新中立即得到结果,您必须自己添加一些东西——并且要注意更新直到应用挂起的更新列表,即。查询完成后。
兼容性
显然,这些选项是特定于 BaseX 的。如果您强烈需要兼容和标准的 XQuery,则不能使用这些表达式。