管理数据库、连接和语句的生命周期可能既复杂又容易出错。如果您依赖垃圾回收(即,不执行任何操作并让对象超出范围),包装底层 ADBC 指针的 R 对象将按正确的顺序执行清理;但是,显式清理这些对象是一种良好的实践。这些辅助函数旨在使显式和可预测的清理易于实现。
用法
with_adbc(x, code)
local_adbc(x, .local_envir = parent.frame())详情
请注意,您可以使用 adbc_connection_join() 和 adbc_statement_join() 将父对象的生命周期与子对象的生命周期绑定。这些函数将对父对象的任何先前引用标记为已释放,因此您仍然可以使用本地和 with 辅助函数在父对象被连接之前管理它。在 adbc_statement_execute_query() 中使用 stream_join_parent = TRUE 以将语句的生命周期与输出流绑定。
示例
# Using with_adbc():
with_adbc(db <- adbc_database_init(adbc_driver_void()), {
with_adbc(con <- adbc_connection_init(db), {
with_adbc(stmt <- adbc_statement_init(con), {
# adbc_statement_set_sql_query(stmt, "SELECT * FROM foofy")
# adbc_statement_execute_query(stmt)
"some result"
})
})
})
#> [1] "some result"
# Using local_adbc_*() (works best within a function, test, or local())
local({
db <- local_adbc(adbc_database_init(adbc_driver_void()))
con <- local_adbc(adbc_connection_init(db))
stmt <- local_adbc(adbc_statement_init(con))
# adbc_statement_set_sql_query(stmt, "SELECT * FROM foofy")
# adbc_statement_execute_query(stmt)
"some result"
})
#> [1] "some result"