Changeset: 0d4c9879e55c for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=0d4c9879e55c
Modified Files:
clients/R/MonetDB.R/DESCRIPTION
clients/R/MonetDB.R/NEWS
clients/R/MonetDB.R/R/dbi.R
clients/R/Tests/dbi.R
Branch: default
Log Message:
R Connector: Handling MONTH_INTERVAL type correctly
diffs (115 lines):
diff --git a/clients/R/MonetDB.R/DESCRIPTION b/clients/R/MonetDB.R/DESCRIPTION
--- a/clients/R/MonetDB.R/DESCRIPTION
+++ b/clients/R/MonetDB.R/DESCRIPTION
@@ -1,5 +1,5 @@
Package: MonetDB.R
-Version: 0.9.7
+Version: 0.9.8
Title: Connect MonetDB to R
Authors@R: c(person("Hannes Muehleisen", role = c("aut", "cre"),email =
"[email protected]"),
person("Thomas Lumley", role = "ctb"),
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,3 +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)
+
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
@@ -438,25 +438,21 @@ setClass("MonetDBResult", representation
.CT_BOOL <- 4L
.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")
+
monetdbRtype <- function(dbType) {
dbType <- toupper(dbType)
-
- if (dbType %in% c("TINYINT", "SMALLINT", "INT", "BIGINT", "HUGEINT", "REAL",
"DOUBLE", "DECIMAL", "WRD")) {
- return("numeric")
+ rtype <- monetTypes[dbType]
+ if (is.na(rtype)) {
+ stop("Unknown DB type ", dbType)
}
- if (dbType %in% c("CHAR", "VARCHAR", "CLOB", "STR")) {
- return("character")
- }
- if (dbType %in% c("INTERVAL", "DATE", "TIME", "TIMESTAMP")) {
- return("date")
- }
- if (dbType == "BOOLEAN") {
- return("logical")
- }
- if (dbType == "BLOB") {
- return("raw")
- }
- stop("Unknown DB type ", dbType)
+ rtype
}
setMethod("fetch", signature(res="MonetDBResult", n="numeric"),
def=function(res, n, ...) {
@@ -499,10 +495,6 @@ setMethod("dbFetch", signature(res="Mone
df[[i]] <- character()
ct[i] <- .CT_CHR
}
- if (rtype=="date") {
- df[[i]] <- character()
- ct[i] <- .CT_CHRR
- }
if (rtype=="logical") {
df[[i]] <- logical()
ct[i] <- .CT_BOOL
@@ -597,17 +589,10 @@ setMethod("dbIsValid", signature(dbObj="
return(invisible(TRUE))
})
-monetTypes <- rep(c("numeric", "character", "character", "logical", "raw"),
c(9, 3, 4, 1, 1))
-names(monetTypes) <- c(c("TINYINT", "SMALLINT", "INT", "BIGINT", "HUGEINT",
"REAL", "DOUBLE", "DECIMAL", "WRD"),
- c("CHAR", "VARCHAR", "CLOB"),
- c("INTERVAL", "DATE", "TIME", "TIMESTAMP"),
- "BOOLEAN",
- "BLOB")
-
-
setMethod("dbColumnInfo", "MonetDBResult", def = function(res, ...) {
return(data.frame(field.name=res@env$info$names,
field.type=res@env$info$types,
- data.type=monetTypes[res@env$info$types]))
+ data.type=monetTypes[res@env$info$types],
r.data.type=monetTypes[res@env$info$types],
+ monetdb.data.type=res@env$info$types))
},
valueClass = "data.frame")
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
@@ -170,6 +170,9 @@ dbSendUpdate(conn, "INSERT INTO monetdbt
stopifnot(identical("Роман Mühleisen", dbGetQuery(conn,"SELECT a FROM
monetdbtest")$a[[1]]))
dbRollback(conn)
+# this returns a column with esoteric type MONTH_INTERVAL
+stopifnot(identical(1L, as.integer(dbGetQuery(con, "select cast('2015-03-02'
as date) - cast('2015-03-01' as date)")[[1]][[1]])))
+
stopifnot(dbIsValid(conn))
#thrice to catch null pointer errors
stopifnot(identical(dbDisconnect(con),TRUE))
@@ -177,6 +180,8 @@ stopifnot(!dbIsValid(conn))
stopifnot(identical(dbDisconnect(con),TRUE))
stopifnot(identical(dbDisconnect(con),TRUE))
+
+
#test merovingian control code
#cannot really do this in Mtest, sorry
#stopifnot(dbname %in% monetdbd.liststatus("monetdb")$dbname)
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list