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 = "han...@cwi.nl"), 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 checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list