Changeset: 210182c89c24 for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=210182c89c24
Modified Files:
clients/R/MonetDB.R/R/dbi.R
monetdb5/extras/rapi/converters.c
tools/embedded/Tests/lowlevel.R
Branch: embedded
Log Message:
more DBI compliance and void result bat conversion (Bug 3925)
diffs (126 lines):
diff --git a/clients/R/MonetDB.R/R/dbi.R b/clients/R/MonetDB.R/R/dbi.R
--- a/clients/R/MonetDB.R/R/dbi.R
+++ b/clients/R/MonetDB.R/R/dbi.R
@@ -2,7 +2,7 @@
C_LIBRARY <- "MonetDB.R"
# Make S4 aware of S3 classes
-setOldClass(c("sockconn", "connection", "monetdb_mapi_conn"))
+# setOldClass(c("sockconn", "connection"))
### MonetDBDriver
setClass("MonetDBDriver", representation("DBIDriver"))
@@ -163,6 +163,11 @@ setMethod("dbGetInfo", "MonetDBConnectio
ll <- as.list(envdata$value)
names(ll) <- envdata$name
ll$name <- "MonetDBConnection"
+ ll$db.version <- NA
+ ll$dbname <- ll$gdk_dbname
+ ll$username <- NA
+ ll$host <- NA
+ ll$port <- NA
ll
})
@@ -176,6 +181,7 @@ setMethod("dbDisconnect", "MonetDBConnec
})
setMethod("dbDisconnect", "MonetDBEmbeddedConnection", def=function(conn,
shutdown=FALSE, ...) {
+ if (!conn@connenv$open) warning("already disconnected")
conn@connenv$open <- FALSE
MonetDBLite::monetdb_embedded_disconnect(conn@connenv$conn)
if (shutdown) MonetDBLite::monetdb_embedded_shutdown()
@@ -219,7 +225,7 @@ setMethod("dbRollback", "MonetDBConnecti
invisible(TRUE)
})
-setMethod("dbListFields", "MonetDBConnection", def=function(conn, name, ...) {
+setMethod("dbListFields", signature(conn="MonetDBConnection", name =
"character"), def=function(conn, name, ...) {
if (!dbExistsTable(conn, name))
stop(paste0("Unknown table: ", name));
df <- dbGetQuery(conn, paste0("select columns.name as name from sys.columns
join sys.tables on \
@@ -227,7 +233,7 @@ setMethod("dbListFields", "MonetDBConnec
df$name
})
-setMethod("dbExistsTable", "MonetDBConnection", def=function(conn, name, ...) {
+setMethod("dbExistsTable", signature(conn="MonetDBConnection", name =
"character"), def=function(conn, name, ...) {
name <- quoteIfNeeded(conn, name)
return(as.character(name) %in%
dbListTables(conn, sys_tables=T))
@@ -237,7 +243,7 @@ setMethod("dbGetException", "MonetDBConn
conn@connenv$exception
})
-setMethod("dbReadTable", "MonetDBConnection", def=function(conn, name, ...) {
+setMethod("dbReadTable", signature(conn="MonetDBConnection", name =
"character"), def=function(conn, name, ...) {
name <- quoteIfNeeded(conn, name)
if (!dbExistsTable(conn, name))
stop(paste0("Unknown table: ", name));
@@ -448,7 +454,7 @@ quoteIfNeeded <- function(conn, x, warn=
x
}
-setMethod("dbWriteTable", "MonetDBConnection", def=function(conn, name, value,
overwrite=FALSE,
+setMethod("dbWriteTable", signature(conn="MonetDBConnection", name =
"character", value="data.frame"), def=function(conn, name, value,
overwrite=FALSE,
append=FALSE, csvdump=FALSE, transaction=TRUE,...) {
if (is.character(value)) {
message("Treating character vector parameter as file name(s) for
monetdb.read.csv()")
@@ -542,7 +548,7 @@ setMethod("dbDataType", signature(dbObj=
}, valueClass = "character")
-setMethod("dbRemoveTable", "MonetDBConnection", def=function(conn, name, ...) {
+setMethod("dbRemoveTable", signature(conn="MonetDBConnection", name =
"character"), def=function(conn, name, ...) {
name <- quoteIfNeeded(conn, name)
if (dbExistsTable(conn, name)) {
dbSendUpdate(conn, paste("DROP TABLE", name))
@@ -646,7 +652,7 @@ monetdbRtype <- function(dbType) {
setMethod("fetch", signature(res="MonetDBResult", n="numeric"),
def=function(res, n, ...) {
# DBI on CRAN still uses fetch()
- # message("fetch() is deprecated, use dbFetch()")
+ .Deprecated("dbFetch")
dbFetch(res, n, ...)
})
diff --git a/monetdb5/extras/rapi/converters.c
b/monetdb5/extras/rapi/converters.c
--- a/monetdb5/extras/rapi/converters.c
+++ b/monetdb5/extras/rapi/converters.c
@@ -58,11 +58,15 @@ static SEXP bat_to_sexp(BAT* b) {
SEXP varvalue = NULL;
// TODO: deal with SQL types (DECIMAL/DATE)
switch (ATOMstorage(getColumnType(b->T->type))) {
+ case TYPE_void:
+ varvalue = PROTECT(NEW_INTEGER(1));
+ INTEGER_POINTER(varvalue)[0] = NA_INTEGER;
+ break;
case TYPE_bte:
- BAT_TO_INTSXP(b, bte, varvalue,0);
+ BAT_TO_INTSXP(b, bte, varvalue, 0);
break;
case TYPE_sht:
- BAT_TO_INTSXP(b, sht, varvalue,0);
+ BAT_TO_INTSXP(b, sht, varvalue, 0);
break;
case TYPE_int:
// special case: memcpy for int-to-int conversion
without NULLs
diff --git a/tools/embedded/Tests/lowlevel.R b/tools/embedded/Tests/lowlevel.R
--- a/tools/embedded/Tests/lowlevel.R
+++ b/tools/embedded/Tests/lowlevel.R
@@ -127,6 +127,15 @@ test_that("inserting data", {
monetdb_embedded_disconnect(con)
})
+test_that("selecting null works", {
+ con <- monetdb_embedded_connect()
+ res <- monetdb_embedded_query(con, "SELECT NULL as nl")
+ expect_equal(nrow(res$tuples), 1)
+ expect_equal(ncol(res$tuples), 1)
+ expect_true(is.na(res$tuples$nl))
+ monetdb_embedded_disconnect(con)
+})
+
test_that("the garbage collector closes connections", {
# there are 64 connections max. if gc() does not close them, the second
batch will fail
conns <- lapply(1:64, function(x) monetdb_embedded_connect())
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list