p:insert() 在哪里安装管道?
where does p:insert() install the pipeline?
我有一个 XQuery 函数,我用它以编程方式安装 CPF 管道。我正在通过从查询控制台执行函数调用来对此进行测试,其中我的内容源设置为启用了 CPF 的内容数据库。
我正在执行以下操作来解决发生的问题。 $processsed_pipline_config 包含管道配置 XML。 return return 只是插入的管道,所以在我看来管道被插入到只有一个管道的数据库中?
let $pipeline_id := p:insert($processed_pipeline_config)
return
for $pipeline in p:pipelines()
return $pipeline
当我转到管理控制台时,这个插入的管道没有显示在内容数据库的管道列表中。
更新
我还尝试在模式数据库的上下文中调用它,如下所示。也不走运。
let $pipeline_id :=
xdmp:invoke-function(
function() {
p:insert($processed_pipeline_config)
},
<options xmlns="xdmp:eval">
<database>{ xdmp:schema-database() }</database>
<transaction-mode>update-auto-commit</transaction-mode>
<isolation>different-transaction</isolation>
</options>
)
您应该 运行 管道 API 针对内容数据库的架构数据库,而不是内容数据库:CPF 将在此处查找它。
p:insert 将管道插入到具有默认权限的管道集合中。
我认为您的问题在于您在添加管道的同一事务中获取管道列表。事务不会看到它自己提交的结果。如果您 运行 在单独的查询中查找,您应该会看到您的管道。
解决方案是 p:insert() 调用应该针对触发器数据库而不是内容或模式进行。本质上:
xdmp:invoke-function(
function() {
p:insert($processed_pipeline_config)
},
<options xmlns="xdmp:eval">
<database>{ xdmp:triggers-database() }</database>
<transaction-mode>update-auto-commit</transaction-mode>
<isolation>different-transaction</isolation>
</options>
)
执行此操作后,管道显示在管理控制台的列表中。
我有一个 XQuery 函数,我用它以编程方式安装 CPF 管道。我正在通过从查询控制台执行函数调用来对此进行测试,其中我的内容源设置为启用了 CPF 的内容数据库。
我正在执行以下操作来解决发生的问题。 $processsed_pipline_config 包含管道配置 XML。 return return 只是插入的管道,所以在我看来管道被插入到只有一个管道的数据库中?
let $pipeline_id := p:insert($processed_pipeline_config)
return
for $pipeline in p:pipelines()
return $pipeline
当我转到管理控制台时,这个插入的管道没有显示在内容数据库的管道列表中。
更新
我还尝试在模式数据库的上下文中调用它,如下所示。也不走运。
let $pipeline_id :=
xdmp:invoke-function(
function() {
p:insert($processed_pipeline_config)
},
<options xmlns="xdmp:eval">
<database>{ xdmp:schema-database() }</database>
<transaction-mode>update-auto-commit</transaction-mode>
<isolation>different-transaction</isolation>
</options>
)
您应该 运行 管道 API 针对内容数据库的架构数据库,而不是内容数据库:CPF 将在此处查找它。
p:insert 将管道插入到具有默认权限的管道集合中。
我认为您的问题在于您在添加管道的同一事务中获取管道列表。事务不会看到它自己提交的结果。如果您 运行 在单独的查询中查找,您应该会看到您的管道。
解决方案是 p:insert() 调用应该针对触发器数据库而不是内容或模式进行。本质上:
xdmp:invoke-function(
function() {
p:insert($processed_pipeline_config)
},
<options xmlns="xdmp:eval">
<database>{ xdmp:triggers-database() }</database>
<transaction-mode>update-auto-commit</transaction-mode>
<isolation>different-transaction</isolation>
</options>
)
执行此操作后,管道显示在管理控制台的列表中。