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

Reply via email to