Changeset: 0427ba916f4a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0427ba916f4a
Modified Files:
        clients/R/MonetDB.R/NEWS
        clients/R/MonetDB.R/R/dbi.R
        clients/R/Tests/dbi.R
Branch: default
Log Message:

R Connector: Now using actual R integers if data fits


diffs (74 lines):

diff --git a/clients/R/MonetDB.R/NEWS b/clients/R/MonetDB.R/NEWS
--- a/clients/R/MonetDB.R/NEWS
+++ b/clients/R/MonetDB.R/NEWS
@@ -1,6 +1,7 @@
 0.9.8
 - Added support for esoteric data types such as MONTH_INTERVAL (Thanks, Roman)
 - Cleaned up SQL to R type mapping (we had this twice)
+- Now creating actual R integers if data fits
 
 0.9.7
 - Fixed crash on Windows (Sorry, everyone)
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
@@ -432,6 +432,7 @@ setMethod("dbSendUpdateAsync", signature
 ### MonetDBResult
 setClass("MonetDBResult", representation("DBIResult", env="environment"))
 
+.CT_INT <- 0L
 .CT_NUM <- 1L
 .CT_CHR <- 2L
 .CT_CHRR <- 3L
@@ -439,12 +440,13 @@ setClass("MonetDBResult", representation
 .CT_RAW <- 5L
 
 # type mapping matrix
-monetTypes <- rep(c("numeric", "character", "character", "logical", "raw"), 
c(9, 4, 8, 1, 1))
-names(monetTypes) <- c(c("TINYINT", "SMALLINT", "INT", "BIGINT", "HUGEINT", 
"REAL", "DOUBLE", "DECIMAL", "WRD"), 
-                       c("CHAR", "VARCHAR", "CLOB", "STR"), 
-                       c("INTERVAL", "DATE", "TIME", "TIMETZ", "TIMESTAMP", 
"TIMESTAMPTZ", "MONTH_INTERVAL", "SEC_INTERVAL"), 
-                       "BOOLEAN", 
-                       "BLOB")
+monetTypes <- rep(c("integer", "numeric", "character", "character", "logical", 
"raw"), c(6, 5, 4, 6, 1, 1))
+names(monetTypes) <- c(c("WRD", "TINYINT", "SMALLINT", "INT", 
"MONTH_INTERVAL"), # month_interval is the diff between date cols, int
+  c("BIGINT", "HUGEINT", "REAL", "DOUBLE", "DECIMAL", "SEC_INTERVAL"),  # 
sec_interval is the difference between timestamps, float
+  c("CHAR", "VARCHAR", "CLOB", "STR"), 
+  c("INTERVAL", "DATE", "TIME", "TIMETZ", "TIMESTAMP", "TIMESTAMPTZ"), 
+  c("BOOLEAN"), 
+  c("BLOB"))
 
 monetdbRtype <- function(dbType) {
   dbType <- toupper(dbType)
@@ -487,6 +489,10 @@ setMethod("dbFetch", signature(res="Mone
   
   for (i in seq.int(info$cols)) {
     rtype <- monetdbRtype(info$types[i])
+    if (rtype=="integer") {      
+      df[[i]] <- integer()
+      ct[i] <- .CT_INT
+    }
     if (rtype=="numeric") {                    
       df[[i]] <- numeric()
       ct[i] <- .CT_NUM
@@ -529,6 +535,8 @@ setMethod("dbFetch", signature(res="Mone
   # convert values column by column
   for (j in seq.int(info$cols)) {      
     col <- ct[[j]]
+    if (col == .CT_INT) 
+      df[[j]] <- as.integer(parts[[j]])
     if (col == .CT_NUM) 
       df[[j]] <- as.numeric(parts[[j]])
     if (col == .CT_CHRR) {
diff --git a/clients/R/Tests/dbi.R b/clients/R/Tests/dbi.R
--- a/clients/R/Tests/dbi.R
+++ b/clients/R/Tests/dbi.R
@@ -41,7 +41,7 @@ dbSendUpdate(con,"CREATE TABLE monetdbte
 stopifnot(identical(dbExistsTable(con,tname),TRUE))
 dbSendUpdate(con,"INSERT INTO monetdbtest VALUES ('one',1,'1111')")
 dbSendUpdate(con,"INSERT INTO monetdbtest VALUES ('two',2,'22222222')")
-stopifnot(identical(dbGetQuery(con,"SELECT count(*) FROM monetdbtest")[[1]],2))
+stopifnot(identical(dbGetQuery(con,"SELECT count(*) FROM 
monetdbtest")[[1]],2L))
 
stopifnot(identical(dbReadTable(con,tname)[[3]],list(charToRaw("1111"),charToRaw("22222222"))))
 dbRemoveTable(con,tname)
 stopifnot(identical(dbExistsTable(con,tname),FALSE))
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to