Расширение dplyr и использование внутренних функций

Я работаю над вилкой пакета RSQLServer и пытаюсь реализовать объединения. С текущей версией пакета объединения для любой базы данных, основанной на DBI, реализуются с помощью sql_join.DBIConnection. Однако эта реализация не очень хорошо работает для SQL-сервера. Например, он использует USING, который не поддерживается сервером SQL.

У меня есть версия этой функции sql_join.SQLServerConnection, работающая (хотя и не полная). Я как можно больше основывал свою функцию на sql_join.DBIConnection. Один из вопросов, который у меня был, заключается в том, что sql_join.DBIConnection вызывает несколько неэкспортируемых функций внутри dplyr, таких как common_by. На данный момент я работал над этим, используя dplyr:::common_by, но я знаю, что это не идеальная практика.

Должен ли я:

  • Попросите Хэдли Уикхема/Ромена Франсуа экспортировать соответствующие функции, чтобы облегчить жизнь людям, разрабатывающим пакеты, построенные на dplyr?
  • Скопировать внутренние функции в пакет, над которым я работаю?
  • Продолжить использование оператора ::: для вызова функций?
  • Что-то еще?

Ясно, что с опцией 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
}

Ответ 1

Мне кажется, что вам не обязательно использовать эти глаголы функций. Поскольку dplyr теперь добавляет функциональность базы данных в dbplyr, соответствующий код здесь. Я не вижу использования auto_names или common_by там.

Я настоятельно рекомендую выполнить следующие шаги в Создание новых бэкэндов после чтения Перевод SQL.

Также возможно рассмотреть некоторые другие альтернативные серверы, такие как Hrbrmaster пакет сержанта для Drilling Apache с использованием JDBC.