... | ... |
@@ -46,17 +46,20 @@ setOldClass(c("tbl_MySQLConnection", "tbl_SQLiteConnection", |
46 | 46 |
#' @import dbplyr |
47 | 47 |
#' @examples |
48 | 48 |
#' |
49 |
-#' ## constructor |
|
49 |
+#' ## SQLDataFrame construction |
|
50 | 50 |
#' dbname <- system.file("extdata/test.db", package = "SQLDataFrame") |
51 | 51 |
#' conn <- DBI::dbConnect(DBI::dbDriver("SQLite"), dbname = dbname) |
52 | 52 |
#' obj <- SQLDataFrame(conn = conn, dbtable = "state", |
53 | 53 |
#' dbkey = "state") |
54 |
-#' obj <- SQDataFrame(dbname = dbname, type = "SQLite", |
|
55 |
-#' dbtable = "state", dbkey = "state") ## equivalent to above. |
|
56 | 54 |
#' obj1 <- SQLDataFrame(conn = conn, dbtable = "state", |
57 | 55 |
#' dbkey = c("region", "population")) |
58 | 56 |
#' obj1 |
59 | 57 |
#' |
58 |
+#' ### construction from database credentials |
|
59 |
+#' obj2 <- SQLDataFrame(dbname = dbname, type = "SQLite", |
|
60 |
+#' dbtable = "state", dbkey = "state") |
|
61 |
+#' all.equal(obj, obj2) ## [1] TRUE |
|
62 |
+#' |
|
60 | 63 |
#' ## slot accessors |
61 | 64 |
#' connSQLDataFrame(obj) |
62 | 65 |
#' dbtable(obj) |
... | ... |
@@ -92,13 +95,11 @@ SQLDataFrame <- function(conn, |
92 | 95 |
dbkey = character(0), |
93 | 96 |
col.names = NULL |
94 | 97 |
){ |
95 |
- ## check dbname, and backend connection |
|
96 |
- ## browser() |
|
97 |
- ## src <- src_dbi(con, auto_disconnect = TRUE) |
|
98 |
- ## on.exit(DBI::dbDisconnect(con)) |
|
99 | 98 |
|
100 | 99 |
type <- match.arg(type) |
101 | 100 |
if (missing(conn)) { |
101 |
+ ## FIXME: Error in .local(drv, ...) : Cannot allocate a new |
|
102 |
+ ## connection: 16 connections already opened |
|
102 | 103 |
conn <- switch(type, |
103 | 104 |
MySQL = DBI::dbConnect(dbDriver("MySQL"), |
104 | 105 |
host = host, |
... | ... |
@@ -110,7 +111,8 @@ SQLDataFrame <- function(conn, |
110 | 111 |
) |
111 | 112 |
} else { |
112 | 113 |
ifcred <- c(host = !missing(host), user = !missing(user), |
113 |
- dbname = !missing(dbname), password = !missing(password)) |
|
114 |
+ dbname = !missing(dbname), password = !missing(password), |
|
115 |
+ type = !missing(type)) |
|
114 | 116 |
if (any(ifcred)) |
115 | 117 |
message("These arguments are ignored: ", |
116 | 118 |
paste(names(ifcred[ifcred]), collapse = ", ")) |
... | ... |
@@ -137,14 +139,6 @@ SQLDataFrame <- function(conn, |
137 | 139 |
} |
138 | 140 |
|
139 | 141 |
if (is(conn, "MySQLConnection")) { |
140 |
- ## local connection doesn't require passwd for creating |
|
141 |
- ## federated table, only need to build the connection. |
|
142 |
- |
|
143 |
- ## FIXME: remote connection sometimes don't require |
|
144 |
- ## password. Add a default password = NULL? Also need to check |
|
145 |
- ## if password = NULL, could the connection be constructed or |
|
146 |
- ## not? |
|
147 |
- ## if (missing(password)) stop("Please provided the \"password\" for database connection") |
|
148 | 142 |
.set_mysql_var(conn, password) |
149 | 143 |
} |
150 | 144 |
|
... | ... |
@@ -187,7 +181,6 @@ SQLDataFrame <- function(conn, |
187 | 181 |
|
188 | 182 |
## concatKey |
189 | 183 |
concatKey <- tbl %>% |
190 |
- ## mutate(concatKey = paste(!!!syms(dbkey), sep="\b")) %>% |
|
191 | 184 |
mutate(concatKey = paste(!!!syms(dbkey), sep=":")) %>% |
192 | 185 |
pull(concatKey) |
193 | 186 |
|
... | ... |
@@ -200,8 +193,6 @@ SQLDataFrame <- function(conn, |
200 | 193 |
) |
201 | 194 |
} |
202 | 195 |
|
203 |
-## FIXME: use of "dbConnect" has limits?? |
|
204 |
- |
|
205 | 196 |
.validity_SQLDataFrame <- function(object) |
206 | 197 |
{ |
207 | 198 |
idx <- object@indexes |
... | ... |
@@ -231,18 +222,6 @@ setMethod("tblData", "SQLDataFrame", function(x) |
231 | 222 |
x@tblData |
232 | 223 |
}) |
233 | 224 |
|
234 |
-## setGeneric("dbname", signature = "x", function(x) |
|
235 |
-## standardGeneric("dbname")) |
|
236 |
- |
|
237 |
-## #' @rdname SQLDataFrame-class |
|
238 |
-## #' @aliases dbname dbname,SQLDataFrame-method |
|
239 |
-## #' @export |
|
240 |
- |
|
241 |
-## setMethod("dbname", "SQLDataFrame", function(x) |
|
242 |
-## { |
|
243 |
-## tblData(x)$src$con@dbname |
|
244 |
-## }) |
|
245 |
- |
|
246 | 225 |
setGeneric("dbtable", signature = "x", function(x) |
247 | 226 |
standardGeneric("dbtable")) |
248 | 227 |
|
... | ... |
@@ -353,11 +332,9 @@ setMethod("ROWNAMES", "SQLDataFrame", function(x) |
353 | 332 |
if (length(key) == 1) { |
354 | 333 |
out <- x %>% filter(!!sym(key) %in% !!(concatKey[i])) |
355 | 334 |
} else { |
356 |
- ## x <- x %>% mutate(concatKeys = paste(!!!syms(key), sep="\b")) |
|
357 | 335 |
x <- x %>% mutate(concatKeys = paste(!!!syms(key), sep=":")) |
358 | 336 |
## FIXME: possible to remove the ".0" trailing after numeric values? |
359 | 337 |
## see: https://github.com/tidyverse/dplyr/issues/3230 (deliberate...) |
360 |
- ### keys <- x %>% pull(concatKeys) |
|
361 | 338 |
out <- x %>% filter(concatKeys %in% !!(concatKey[i])) %>% select(-concatKeys) |
362 | 339 |
## returns "tbl_dbi" object, no realization. |
363 | 340 |
} |
... | ... |
@@ -108,17 +108,20 @@ A \code{SQLDataFrame} object. |
108 | 108 |
} |
109 | 109 |
\examples{ |
110 | 110 |
|
111 |
-## constructor |
|
111 |
+## SQLDataFrame construction |
|
112 | 112 |
dbname <- system.file("extdata/test.db", package = "SQLDataFrame") |
113 | 113 |
conn <- DBI::dbConnect(DBI::dbDriver("SQLite"), dbname = dbname) |
114 | 114 |
obj <- SQLDataFrame(conn = conn, dbtable = "state", |
115 | 115 |
dbkey = "state") |
116 |
-obj <- SQDataFrame(dbname = dbname, type = "SQLite", |
|
117 |
- dbtable = "state", dbkey = "state") ## equivalent to above. |
|
118 | 116 |
obj1 <- SQLDataFrame(conn = conn, dbtable = "state", |
119 | 117 |
dbkey = c("region", "population")) |
120 | 118 |
obj1 |
121 | 119 |
|
120 |
+### construction from database credentials |
|
121 |
+obj2 <- SQLDataFrame(dbname = dbname, type = "SQLite", |
|
122 |
+ dbtable = "state", dbkey = "state") |
|
123 |
+all.equal(obj, obj2) ## [1] TRUE |
|
124 |
+ |
|
122 | 125 |
## slot accessors |
123 | 126 |
connSQLDataFrame(obj) |
124 | 127 |
dbtable(obj) |