tests/testthat/test-connection.R

test_that("failed connection initialization releases the database", {
  database <- NULL
  released <- list()
  database_init <- adbcdrivermanager::adbc_database_init
  release <- adbc_release

  local_mocked_bindings(
    adbc_database_init = function(...) {
      database <<- database_init(...)
      database
    },
    adbc_connection_init = function(...) stop("connection failed"),
    .package = "adbcdrivermanager"
  )
  local_mocked_bindings(
    adbc_release = function(x, type) {
      released[[length(released) + 1L]] <<- list(handle = x, type = type)
      release(x, type)
    },
    .package = "adbi"
  )

  expect_error(
    AdbiConnection(adbi(adbcdrivermanager::adbc_driver_monkey())),
    "connection failed"
  )
  expect_identical(vapply(released, `[[`, character(1), "type"), "database")
  expect_identical(released[[1L]]$handle, database)
  expect_false(adbcdrivermanager::adbc_xptr_is_valid(database))
})

test_that("failure after connection initialization releases all resources", {
  database <- NULL
  connection <- NULL
  released <- list()
  database_init <- adbcdrivermanager::adbc_database_init
  connection_init <- adbcdrivermanager::adbc_connection_init
  release <- adbc_release

  local_mocked_bindings(
    adbc_database_init = function(...) {
      database <<- database_init(...)
      database
    },
    adbc_connection_init = function(...) {
      connection <<- connection_init(...)
      connection
    },
    .package = "adbcdrivermanager"
  )
  local_mocked_bindings(
    adbc_release = function(x, type) {
      released[[length(released) + 1L]] <<- list(handle = x, type = type)
      release(x, type)
    },
    .package = "adbi"
  )

  expect_error(
    AdbiConnection(
      adbi(adbcdrivermanager::adbc_driver_monkey()),
      bigint = "not-a-bigint-mode"
    ),
    "'arg' should be one of"
  )
  expect_identical(
    vapply(released, `[[`, character(1), "type"),
    c("connection", "database")
  )
  expect_identical(released[[1L]]$handle, connection)
  expect_identical(released[[2L]]$handle, database)
  expect_false(adbcdrivermanager::adbc_xptr_is_valid(connection))
  expect_false(adbcdrivermanager::adbc_xptr_is_valid(database))
})

Try the adbi package in your browser

Any scripts or data that you put into this service are public.

adbi documentation built on Sept. 25, 2026, 5:08 p.m.