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

Reply via email to