跳到內容

管理資料庫、連線和語句的生命週期可能既複雜又容易出錯。如果您依賴垃圾回收(即,不執行任何操作並讓物件超出範圍),包裝底層 ADBC 指標的 R 物件將以正確的順序執行清理;然而,明確清理這些物件是良好的實踐。這些助手旨在使明確且可預測的清理易於完成。

用法

with_adbc(x, code)

local_adbc(x, .local_envir = parent.frame())

參數

x

從 ADBC 函數呼叫返回的 ADBC 資料庫、ADBC 連線、ADBC 語句或 nanoarrow_array_stream。

code

在清理輸入之前要執行的程式碼。

.local_envir

其作用域應與輸入相關聯的執行環境。

  • with_adbc() 傳回 code 的結果

  • local_adbc() 不可見地傳回輸入。

詳細資訊

請注意,您可以使用 adbc_connection_join()adbc_statement_join() 將父物件的生命週期與子物件的生命週期聯繫起來。這些函數將任何先前對父物件的引用標記為已釋放,因此您仍然可以使用 local 和 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"