проверка класса объекта подключения R-DBI - PullRequest
0 голосов
/ 17 мая 2018

Я переписываю функцию , которая по выбору принимает объект подключения. Параметр должен быть проверен, что это допустимое соединение / канал. Как мне сделать это надежно с пакетом DBI? (В частности, я использую пакет odbc.)

Мне бы хотелось что-то, что вмещало бы все DBI объекты соединений, но я остановлюсь только на объектах соединения odbc

Выполнение чего-то подобного не приводит к значению, которое я знаю, как запросить с помощью inherits().

library(DBI)
con <- DBI::dbConnect(RSQLite::SQLite(), ":memory:")
class(con)
# [1] "SQLiteConnection"
# attr(,"package")
# [1] "RSQLite"
DBI::dbDisconnect(con)

Напротив, RODBC и пул возвращают класс, который я могу получить лучше ( т.е. , RODBC и Pool).

Если это поможет, вот больше внутренних компонентов от этого конкретного соединения DBI.

> str(con)
Formal class 'SQLiteConnection' [package "RSQLite"] with 7 slots
  ..@ ptr                :<externalptr> 
  ..@ dbname             : chr ":memory:"
  ..@ loadable.extensions: logi TRUE
  ..@ flags              : int 70
  ..@ vfs                : chr ""
  ..@ ref                :<environment: 0x0000000000000000> 
  ..@ bigint             : chr "integer64"

1 Ответ

0 голосов
/ 19 мая 2018

Спецификация DBI требует, чтобы все соединения наследовались от DBIConnection.Все бэкэнды «нового стиля» реализуют его следующим образом, IIRC:

library(RSQLite)
con <- dbConnect(SQLite())
inherits(con, "DBIConnection")
#> [1] TRUE

Создано в 2018-05-18 с помощью пакета Представить (v0.2.0).


¹ царапина "требует": в конечном итоге потребуется явно, https://github.com/r-dbi/DBItest/issues/170

...