检查R-DBI连接对象的类

时间:2018-05-17 15:58:50

标签: r odbc r-dbi

rewriting a function可选择接受连接对象。应验证该参数是否为有效的连接/通道。如何使用DBI包强有力地执行此操作? (具体来说,我使用odbc包。)

我喜欢能够容纳所有DBI个连接对象的东西,但我只会选择odbc连接对象

运行此类内容并不会产生我知道如何使用inherits()进行查询的值。

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

相比之下,RODBCpool返回的课程比我能抓得更好( ie RODBCPool)。< / p>

如果有帮助,这里有更多来自这个特定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 :(得分:1)

DBI规范要求所有连接都从DBIConnection继承。 “新风格”后端都是这样实现的,IIRC:

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

reprex package(v0.2.0)创建于2018-05-18。

¹scratch“requires”:最终将明确要求https://github.com/r-dbi/DBItest/issues/170