File: backend-odbc.R

package info (click to toggle)
r-cran-dbplyr 2.5.0%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: sid, trixie
  • size: 2,644 kB
  • sloc: sh: 13; makefile: 2
file content (83 lines) | stat: -rw-r--r-- 1,932 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#' Backend: ODBC
#'
#' @description
#' See `vignette("translation-function")` and `vignette("translation-verb")` for
#' details of overall translation technology. Key differences for this backend
#' are minor translations for common data types.
#'
#' Use `simulate_odbc()` with `lazy_frame()` to see simulated SQL without
#' converting to live access database.
#'
#' @name backend-odbc
#' @aliases NULL
#' @examples
#' library(dplyr, warn.conflicts = FALSE)
#'
#' lf <- lazy_frame(a = TRUE, b = 1, d = 2, c = "z", con = simulate_odbc())
#' lf %>% transmute(x = as.numeric(b))
#' lf %>% transmute(x = as.integer(b))
#' lf %>% transmute(x = as.character(b))
NULL

#' @export
#' @rdname backend-odbc
simulate_odbc <- function() simulate_dbi("OdbcConnection")

#' @export
dbplyr_edition.OdbcConnection <- function(con) {
  2L
}

#' @export
sql_translation.OdbcConnection <- function(con) {
  sql_variant(
    base_odbc_scalar,
    base_odbc_agg,
    base_odbc_win
  )
}

#' @export
#' @rdname sql_variant
#' @format NULL
base_odbc_scalar <- sql_translator(
  .parent = base_scalar,
  as.numeric = sql_cast("DOUBLE"),
  as.double = sql_cast("DOUBLE"),
  as.integer = sql_cast("INT"),
  as.character = sql_cast("STRING")
)

#' @export
#' @rdname sql_variant
#' @format NULL
base_odbc_agg <- sql_translator(
  .parent = base_agg,
  sd = sql_aggregate("STDDEV_SAMP", "sd")
)

#' @export
#' @rdname sql_variant
#' @format NULL
base_odbc_win <- sql_translator(
  .parent = base_win,
  sd = win_aggregate("STDDEV_SAMP"),
)

# nocov start
#' @export
db_connection_describe.OdbcConnection <- function(con, ...) {
  info <- DBI::dbGetInfo(con)

  host <- if (info$servername == "") "localhost" else info$servername
  port <- if (info$port == "") "" else paste0(":", info$port)

  paste0(
    info$dbms.name, " ", info$db.version,
    "[", info$username, "@", host, port,
    "/", info$dbname, "]"
  )
}
# nocov end

utils::globalVariables("EXP")