12

我正在研究RSQLServer包的一个分支,并试图实现连接。使用当前版本的包,任何 DBI 连接数据库的连接都使用sql_join.DBIConnection. 但是,该实现不适用于 SQL 服务器。例如,它使用USINGSQL Server 不支持的。

我有这个功能的一个版本sql_join.SQLServerConnection工作(虽然还没有完成)。我sql_join.DBIConnection尽可能地基于我的功能。我遇到的一个问题是sql_join.DBIConnectiondplyr诸如common_by. 目前,我已经通过使用来解决这个问题dplyr:::common_by,但我知道这不是理想的做法。

我是不是该:

  1. 请 Hadley Wickham/Romain Francois 导出相关功能,让开发基于dplyr?
  2. 将内部函数复制到我正在处理的包中?
  3. 继续使用:::运算符调用函数?
  4. 还有什么?

显然,对于选项 3,界面有可能会发生变化(因为它们不是导出的函数)并且包会在较长时间内损坏。

示例代码:

sql_join.SQLServerConnection <- function (con, x, y, type = "inner", by = NULL, ...) {
  join <- switch(type, left = sql("LEFT"), inner = sql("INNER"), 
                 right = sql("RIGHT"), full = sql("FULL"), stop("Unknown join type:", 
                                                                type, call. = FALSE))
  by <- dplyr:::common_by(by, x, y)
  using <- FALSE # all(by$x == by$y)
  x_names <- dplyr:::auto_names(x$select)
  y_names <- dplyr:::auto_names(y$select)
# more code
}
4

1 回答 1

1

在我看来,您可能不必使用这些功能动词。既然dplyr现在把它的数据库功能放进去dbplyr,相关代码就在这里。我看不到auto_namesor的用途common_by

我强烈建议在阅读SQL Translation之后按照创建新后端中的步骤进行操作。

也可能值得回顾一些其他的替代后端,例如 Hrbrmaster 的使用 JDBC 的 Apache Drill 的sergeant 包

于 2017-09-04T22:44:08.800 回答