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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list