Changeset: ffe112fbd31a for MonetDB
URL: http://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ffe112fbd31a
Added Files:
sql/test/BugTracker-2015/Tests/project_rewrite.Bug-3693.sql
sql/test/BugTracker-2015/Tests/project_rewrite.Bug-3693.stable.err
sql/test/BugTracker-2015/Tests/project_rewrite.Bug-3693.stable.out
Removed Files:
sql/test/BugTracker-2015/Tests/inf-nan-handling.Bug-3696.sql~
Modified Files:
clients/R/MonetDB.R/DESCRIPTION
clients/R/MonetDB.R/NEWS
clients/R/MonetDB.R/R/dbi.R
clients/R/Tests/dbi.R
gdk/gdk_atoms.c
sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit
sql/server/rel_optimizer.c
sql/test/BugTracker-2015/Tests/All
Branch: default
Log Message:
Merge with default
diffs (truncated from 661 to 300 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,8 @@
+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,31 +432,29 @@ setMethod("dbSendUpdateAsync", signature
### MonetDBResult
setClass("MonetDBResult", representation("DBIResult", env="environment"))
+.CT_INT <- 0L
.CT_NUM <- 1L
.CT_CHR <- 2L
.CT_CHRR <- 3L
.CT_BOOL <- 4L
.CT_RAW <- 5L
+# type mapping matrix
+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)
-
- 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, ...) {
@@ -491,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
@@ -499,10 +501,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
@@ -537,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) {
@@ -597,17 +597,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
@@ -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))
@@ -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)
diff --git a/gdk/gdk_atoms.c b/gdk/gdk_atoms.c
--- a/gdk/gdk_atoms.c
+++ b/gdk/gdk_atoms.c
@@ -23,7 +23,13 @@
#include "monetdb_config.h"
#include "gdk.h"
#include "gdk_private.h"
-#include <math.h> /* for INFINITY and NAN */
+#include <math.h> /* for isfinite macro */
+#ifdef HAVE_IEEEFP_H
+#include <ieeefp.h> /* for Solaris */
+#ifndef isfinite
+#define isfinite(f) finite(f)
+#endif
+#endif
static int
bteCmp(const bte *l, const bte *r)
diff --git a/sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit
b/sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit
--- a/sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit
+++ b/sql/benchmarks/tpch/Tests/05-explain.stable.out.32bit
@@ -21,183 +21,9 @@ stdout of test '05-explain` in directory
Ready.
-# 15:45:52 >
-# 15:45:52 > "/usr/bin/python2" "05-explain.SQL.py" "05-explain"
-# 15:45:52 >
-
-#set optimizer = 'sequential_pipe';
-#explain select
-# n_name,
-# sum(l_extendedprice * (1 - l_discount)) as revenue
-#from
-# customer,
-# orders,
-# lineitem,
-# supplier,
-# nation,
-# region
-#where
-# c_custkey = o_custkey
-# and l_orderkey = o_orderkey
-# and l_suppkey = s_suppkey
-# and c_nationkey = s_nationkey
-# and s_nationkey = n_nationkey
-# and n_regionkey = r_regionkey
-# and r_name = 'ASIA'
-# and o_orderdate >= date '1994-01-01'
-# and o_orderdate < date '1994-01-01' + interval '1' year
-#group by
-# n_name
-#order by
-# revenue desc;
-% .explain # table_name
-% mal # name
-% clob # type
-% 571 # length
-function user.s2_1{autoCommit=true}(A0:bte,A1:str,A2:date,A3:date,A4:int):void;
- X_7 := sql.mvc();
- X_11:bat[:oid,:date] := sql.bind(X_7,"sys","orders","o_orderdate",0);
- X_8:bat[:oid,:oid] := sql.tid(X_7,"sys","orders");
- X_19 := mtime.addmonths(A3,A4);
- X_236 := algebra.subselect(X_11,X_8,A2,X_19,true,false,false);
- (X_14,r1_14) := sql.bind(X_7,"sys","orders","o_orderdate",2);
- X_237 := algebra.subselect(r1_14,A2,X_19,true,false,false);
- X_17:bat[:oid,:date] := sql.bind(X_7,"sys","orders","o_orderdate",1);
- X_238 := algebra.subselect(X_17,X_8,A2,X_19,true,false,false);
- X_20 := sql.subdelta(X_236,X_8,X_14,X_237,X_238);
- X_22:bat[:oid,:oid] :=
sql.bind_idxbat(X_7,"sys","orders","orders_o_custkey_fkey",0);
- (X_24,r1_29) :=
sql.bind_idxbat(X_7,"sys","orders","orders_o_custkey_fkey",2);
- X_26:bat[:oid,:oid] :=
sql.bind_idxbat(X_7,"sys","orders","orders_o_custkey_fkey",1);
- X_27 := sql.projectdelta(X_20,X_22,X_24,r1_29,X_26);
- X_28:bat[:oid,:oid] := sql.tid(X_7,"sys","customer");
- (X_30,r1_37) := algebra.join(X_27,X_28);
- X_32 := X_20;
- X_33 := algebra.leftfetchjoin(X_30,X_32);
- X_34:bat[:oid,:oid] := sql.tid(X_7,"sys","lineitem");
- X_37:bat[:oid,:oid] :=
sql.bind_idxbat(X_7,"sys","lineitem","lineitem_l_orderkey_fkey",0);
- (X_40,r1_47) :=
sql.bind_idxbat(X_7,"sys","lineitem","lineitem_l_orderkey_fkey",2);
- X_43:bat[:oid,:oid] :=
sql.bind_idxbat(X_7,"sys","lineitem","lineitem_l_orderkey_fkey",1);
- X_45 := sql.projectdelta(X_34,X_37,X_40,r1_47,X_43);
- (X_46,r1_54) := algebra.join(X_33,X_45);
- X_48:bat[:oid,:int] := sql.bind(X_7,"sys","lineitem","l_suppkey",0);
- (X_50,r1_58) := sql.bind(X_7,"sys","lineitem","l_suppkey",2);
- X_52:bat[:oid,:int] := sql.bind(X_7,"sys","lineitem","l_suppkey",1);
- X_53 := sql.projectdelta(X_34,X_48,X_50,r1_58,X_52);
- X_54 := algebra.leftfetchjoin(r1_54,X_53);
- X_55:bat[:oid,:wrd] := batmkey.hash(X_54);
- X_57:bat[:oid,:int] := sql.bind(X_7,"sys","customer","c_nationkey",0);
- (X_60,r1_72) := sql.bind(X_7,"sys","customer","c_nationkey",2);
- X_62:bat[:oid,:int] := sql.bind(X_7,"sys","customer","c_nationkey",1);
- X_64 := sql.projectdelta(X_28,X_57,X_60,r1_72,X_62);
- X_65:bat[:oid,:int] := algebra.leftfetchjoinPath(X_46,r1_37,X_64);
- X_66:bat[:oid,:wrd] := mkey.bulk_rotate_xor_hash(X_55,22,X_65);
- X_67:bat[:oid,:oid] := sql.tid(X_7,"sys","supplier");
- X_69:bat[:oid,:int] := sql.bind(X_7,"sys","supplier","s_suppkey",0);
- (X_72,r1_86) := sql.bind(X_7,"sys","supplier","s_suppkey",2);
- X_75:bat[:oid,:int] := sql.bind(X_7,"sys","supplier","s_suppkey",1);
- X_77 := sql.projectdelta(X_67,X_69,X_72,r1_86,X_75);
- X_78:bat[:oid,:wrd] := batmkey.hash(X_77);
- X_79:bat[:oid,:int] := sql.bind(X_7,"sys","supplier","s_nationkey",0);
- (X_81,r1_97) := sql.bind(X_7,"sys","supplier","s_nationkey",2);
- X_83:bat[:oid,:int] := sql.bind(X_7,"sys","supplier","s_nationkey",1);
- X_84 := sql.projectdelta(X_67,X_79,X_81,r1_97,X_83);
- X_85:bat[:oid,:wrd] := mkey.bulk_rotate_xor_hash(X_78,22,X_84);
- (X_86,r1_103) := algebra.join(X_66,X_85);
- X_88 := algebra.leftfetchjoin(X_86,X_54);
- X_89 := algebra.leftfetchjoin(r1_103,X_77);
- X_90:bat[:oid,:bit] := batcalc.==(X_88,X_89);
- X_92 := algebra.subselect(X_90,true,true,true,true,false);
- X_94 := algebra.leftfetchjoin(X_92,X_86);
- X_95 := algebra.leftfetchjoin(X_94,X_65);
- X_96 := algebra.leftfetchjoin(X_92,r1_103);
- X_97 := algebra.leftfetchjoin(X_96,X_84);
- X_98:bat[:oid,:bit] := batcalc.==(X_95,X_97);
- X_99 := algebra.subselect(X_98,true,true,true,true,false);
- X_100:bat[:oid,:oid] :=
sql.bind_idxbat(X_7,"sys","supplier","supplier_s_nationkey_fkey",0);
- (X_105,r1_127) :=
sql.bind_idxbat(X_7,"sys","supplier","supplier_s_nationkey_fkey",2);
- X_108:bat[:oid,:oid] :=
sql.bind_idxbat(X_7,"sys","supplier","supplier_s_nationkey_fkey",1);
- X_110 := sql.projectdelta(X_67,X_100,X_105,r1_127,X_108);
- X_111:bat[:oid,:oid] := algebra.leftfetchjoinPath(X_99,X_96,X_110);
- X_112:bat[:oid,:oid] := sql.tid(X_7,"sys","nation");
- (X_114,r1_137) := algebra.join(X_111,X_112);
- X_116:bat[:oid,:oid] :=
sql.bind_idxbat(X_7,"sys","nation","nation_n_regionkey_fkey",0);
- (X_118,r1_141) :=
sql.bind_idxbat(X_7,"sys","nation","nation_n_regionkey_fkey",2);
- X_120:bat[:oid,:oid] :=
sql.bind_idxbat(X_7,"sys","nation","nation_n_regionkey_fkey",1);
- X_121 := sql.projectdelta(X_112,X_116,X_118,r1_141,X_120);
- X_122 := algebra.leftfetchjoin(r1_137,X_121);
- X_125:bat[:oid,:str] := sql.bind(X_7,"sys","region","r_name",0);
- X_123:bat[:oid,:oid] := sql.tid(X_7,"sys","region");
- X_239 := algebra.subselect(X_125,X_123,A1,A1,true,true,false);
- (X_127,r1_151) := sql.bind(X_7,"sys","region","r_name",2);
- X_240 := algebra.subselect(r1_151,A1,A1,true,true,false);
- X_129:bat[:oid,:str] := sql.bind(X_7,"sys","region","r_name",1);
- X_241 := algebra.subselect(X_129,X_123,A1,A1,true,true,false);
- X_130 := sql.subdelta(X_239,X_123,X_127,X_240,X_241);
- X_133 := X_130;
- (X_134,r1_161) := algebra.join(X_122,X_133);
- X_242 := algebra.leftfetchjoin(X_134,X_114);
- X_136 := algebra.leftfetchjoin(X_99,X_94);
- X_137:bat[:oid,:lng] :=
sql.bind(X_7,"sys","lineitem","l_extendedprice",0);
- (X_142,r1_169) := sql.bind(X_7,"sys","lineitem","l_extendedprice",2);
- X_145:bat[:oid,:lng] :=
sql.bind(X_7,"sys","lineitem","l_extendedprice",1);
- X_147 := sql.projectdelta(X_34,X_137,X_142,r1_169,X_145);
- X_148:bat[:oid,:lng] :=
algebra.leftfetchjoinPath(X_242,X_136,r1_54,X_147);
- X_149 := calc.lng(A0,15,2);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list