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