Changeset: e03189d2bebe for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=e03189d2bebe
Modified Files:
        sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
        sql/backends/monet5/UDF/udf/Tests/udf-reverse.stable.out
        sql/backends/monet5/rel_bin.c
        sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.test
        
sql/test/BugTracker-2012/Tests/rewrite_like_into_likesubselect.Bug-3179.stable.out
        sql/test/BugTracker-2014/Tests/manifold.Bug-3556.stable.out
        sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.sql
        sql/test/BugTracker-2016/Tests/decimal_vs_integer.Bug-3941.stable.out
        
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.sql
        
sql/test/BugTracker-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out
        sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
        sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out
        sql/test/mapi/Tests/sql_int128.stable.out.int128
        sql/test/miscellaneous/Tests/simple_plans.stable.out
        sql/test/remote/Tests/partition_elim.stable.out
Branch: default
Log Message:

Merged with Oct2020


diffs (truncated from 1628 to 300 lines):

diff --git a/sql/backends/monet5/rel_bin.c b/sql/backends/monet5/rel_bin.c
--- a/sql/backends/monet5/rel_bin.c
+++ b/sql/backends/monet5/rel_bin.c
@@ -1515,16 +1515,12 @@ rel2bin_basetable(backend *be, sql_rel *
 {
        mvc *sql = be->mvc;
        sql_table *t = rel->l;
-       sql_column *c = rel->r;
+       sql_column *fcol = NULL;
+       sql_idx *fi = NULL;
        list *l = sa_list(sql->sa);
-       stmt *dels, *col = NULL;
+       stmt *dels = stmt_tid(be, t, rel->flag == REL_PARTITION), *col = NULL;
        node *en;
 
-       if (!t && c)
-               t = c->t;
-
-       dels = stmt_tid(be, t, rel->flag == REL_PARTITION);
-
        /* add aliases */
        assert(rel->exps);
        for( en = rel->exps->h; en && !col; en = en->next ) {
@@ -1539,10 +1535,12 @@ rel2bin_basetable(backend *be, sql_rel *
                        /* do not include empty indices in the plan */
                        if ((hash_index(i->type) && list_length(i->columns) <= 
1) || !idx_has_column(i->type))
                                continue;
+                       fi = i;
                        col = stmt_idx(be, i, NULL/*dels*/, dels->partition);
                } else {
                        sql_column *c = find_sql_column(t, oname);
 
+                       fcol = c;
                        col = stmt_col(be, c, NULL/*dels*/, dels->partition);
                }
        }
@@ -1552,26 +1550,8 @@ rel2bin_basetable(backend *be, sql_rel *
                const char *oname = exp->r;
                stmt *s = NULL;
 
-               if (is_func(exp->type)) {
-                       assert(0);
-                       list *exps = exp->l;
-                       sql_exp *cexp = exps->h->data;
-                       const char *cname = cexp->r;
-                       list *l = sa_list(sql->sa);
-
-                       c = find_sql_column(t, cname);
-                       s = stmt_col(be, c, NULL/*dels*/, dels->partition);
-                       append(l, s);
-                       if (exps->h->next) {
-                               sql_exp *at = exps->h->next->data;
-                               stmt *u = exp_bin(be, at, NULL, NULL, NULL, 
NULL, NULL, NULL, 0, 0, 0);
-                               if(!u)
-                                       return NULL;
-
-                               append(l, u);
-                       }
-                       s = stmt_Nop(be, stmt_list(be, l), NULL, exp->f);
-               } else if (oname[0] == '%' && strcmp(oname, TID) == 0) {
+               assert(!is_func(exp->type));
+               if (oname[0] == '%' && strcmp(oname, TID) == 0) {
                        /* tid function  sql.tid(t) */
                        const char *rnme = t->base.name;
 
@@ -1588,11 +1568,11 @@ rel2bin_basetable(backend *be, sql_rel *
                        /* do not include empty indices in the plan */
                        if ((hash_index(i->type) && list_length(i->columns) <= 
1) || !idx_has_column(i->type))
                                continue;
-                       s = stmt_idx(be, i, NULL/*dels*/, dels->partition);
+                       s = (i == fi) ? col : stmt_idx(be, i, NULL/*dels*/, 
dels->partition);
                } else {
                        sql_column *c = find_sql_column(t, oname);
 
-                       s = stmt_col(be, c, NULL/*dels*/, dels->partition);
+                       s = (c == fcol) ? col : stmt_col(be, c, NULL/*dels*/, 
dels->partition);
                }
                s->tname = rname;
                s->cname = exp_name(exp);
diff --git 
a/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out 
b/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
--- a/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
+++ b/sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out
@@ -129,22 +129,20 @@ top N (
 % clob # type
 % 114 # length
 function user.main():void;
-    X_1:void := querylog.define("explain select * from oblo;":str, 
"minimal_pipe":str, 19:int);
+    X_1:void := querylog.define("explain select * from oblo;":str, 
"minimal_pipe":str, 15:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "oblo":str);
+    X_8:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
     X_11:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
     (X_13:bat[:oid], X_14:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_17:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
-    X_18:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
-    (X_19:bat[:oid], X_20:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_21:bat[:int] := sql.delta(X_17:bat[:int], X_19:bat[:oid], 
X_20:bat[:int], X_18:bat[:int]);
-    X_22:bat[:int] := algebra.projection(C_5:bat[:oid], X_21:bat[:int]);
-    X_24:bat[:str] := bat.pack("sys.oblo":str);
-    X_25:bat[:str] := bat.pack("a":str);
-    X_26:bat[:str] := bat.pack("int":str);
-    X_27:bat[:int] := bat.pack(32:int);
-    X_28:bat[:int] := bat.pack(0:int);
-    sql.resultSet(X_24:bat[:str], X_25:bat[:str], X_26:bat[:str], 
X_27:bat[:int], X_28:bat[:int], X_22:bat[:int]);
+    X_16:bat[:int] := sql.delta(X_8:bat[:int], X_13:bat[:oid], X_14:bat[:int], 
X_11:bat[:int]);
+    X_17:bat[:int] := algebra.projection(C_5:bat[:oid], X_16:bat[:int]);
+    X_19:bat[:str] := bat.pack("sys.oblo":str);
+    X_20:bat[:str] := bat.pack("a":str);
+    X_21:bat[:str] := bat.pack("int":str);
+    X_22:bat[:int] := bat.pack(32:int);
+    X_23:bat[:int] := bat.pack(0:int);
+    sql.resultSet(X_19:bat[:str], X_20:bat[:str], X_21:bat[:str], 
X_22:bat[:int], X_23:bat[:int], X_17:bat[:int]);
 end user.main;
 #inline               actions= 0 time=0 usec 
 #remap                actions= 0 time=1 usec 
@@ -160,28 +158,26 @@ end user.main;
 % clob # type
 % 114 # length
 function user.main():void;
-    X_1:void := querylog.define("explain select * from oblo offset 2;":str, 
"minimal_pipe":str, 25:int);
+    X_1:void := querylog.define("explain select * from oblo offset 2;":str, 
"minimal_pipe":str, 21:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "oblo":str);
+    X_8:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
     X_11:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
     (X_13:bat[:oid], X_14:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_17:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
-    X_18:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
-    (X_19:bat[:oid], X_20:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_21:bat[:int] := sql.delta(X_17:bat[:int], X_19:bat[:oid], 
X_20:bat[:int], X_18:bat[:int]);
-    X_22:bat[:int] := algebra.projection(C_5:bat[:oid], X_21:bat[:int]);
-    X_23:lng := nil:lng;
-    X_25:lng := 2:lng;
-    X_27:lng := calc.+(X_25:lng, X_23:lng);
-    X_28:lng := calc.-(X_27:lng, 1:int);
-    C_29:bat[:oid] := algebra.subslice(X_22:bat[:int], X_25:lng, X_28:lng);
-    X_30:bat[:int] := algebra.projection(C_29:bat[:oid], X_22:bat[:int]);
-    X_32:bat[:str] := bat.pack("sys.oblo":str);
-    X_33:bat[:str] := bat.pack("a":str);
-    X_34:bat[:str] := bat.pack("int":str);
-    X_35:bat[:int] := bat.pack(32:int);
-    X_36:bat[:int] := bat.pack(0:int);
-    sql.resultSet(X_32:bat[:str], X_33:bat[:str], X_34:bat[:str], 
X_35:bat[:int], X_36:bat[:int], X_30:bat[:int]);
+    X_16:bat[:int] := sql.delta(X_8:bat[:int], X_13:bat[:oid], X_14:bat[:int], 
X_11:bat[:int]);
+    X_17:bat[:int] := algebra.projection(C_5:bat[:oid], X_16:bat[:int]);
+    X_18:lng := nil:lng;
+    X_20:lng := 2:lng;
+    X_22:lng := calc.+(X_20:lng, X_18:lng);
+    X_23:lng := calc.-(X_22:lng, 1:int);
+    C_24:bat[:oid] := algebra.subslice(X_17:bat[:int], X_20:lng, X_23:lng);
+    X_25:bat[:int] := algebra.projection(C_24:bat[:oid], X_17:bat[:int]);
+    X_27:bat[:str] := bat.pack("sys.oblo":str);
+    X_28:bat[:str] := bat.pack("a":str);
+    X_29:bat[:str] := bat.pack("int":str);
+    X_30:bat[:int] := bat.pack(32:int);
+    X_31:bat[:int] := bat.pack(0:int);
+    sql.resultSet(X_27:bat[:str], X_28:bat[:str], X_29:bat[:str], 
X_30:bat[:int], X_31:bat[:int], X_25:bat[:int]);
 end user.main;
 #inline               actions= 0 time=0 usec 
 #remap                actions= 0 time=1 usec 
@@ -197,28 +193,26 @@ end user.main;
 % clob # type
 % 114 # length
 function user.main():void;
-    X_1:void := querylog.define("explain select * from oblo limit 2;":str, 
"minimal_pipe":str, 25:int);
+    X_1:void := querylog.define("explain select * from oblo limit 2;":str, 
"minimal_pipe":str, 21:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "oblo":str);
+    X_8:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
     X_11:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
     (X_13:bat[:oid], X_14:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_17:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
-    X_18:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
-    (X_19:bat[:oid], X_20:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_21:bat[:int] := sql.delta(X_17:bat[:int], X_19:bat[:oid], 
X_20:bat[:int], X_18:bat[:int]);
-    X_22:bat[:int] := algebra.projection(C_5:bat[:oid], X_21:bat[:int]);
-    X_23:lng := 2:lng;
-    X_25:lng := 0:lng;
-    X_27:lng := calc.+(X_25:lng, X_23:lng);
-    X_28:lng := calc.-(X_27:lng, 1:int);
-    C_29:bat[:oid] := algebra.subslice(X_22:bat[:int], X_25:lng, X_28:lng);
-    X_30:bat[:int] := algebra.projection(C_29:bat[:oid], X_22:bat[:int]);
-    X_32:bat[:str] := bat.pack("sys.oblo":str);
-    X_33:bat[:str] := bat.pack("a":str);
-    X_34:bat[:str] := bat.pack("int":str);
-    X_35:bat[:int] := bat.pack(32:int);
-    X_36:bat[:int] := bat.pack(0:int);
-    sql.resultSet(X_32:bat[:str], X_33:bat[:str], X_34:bat[:str], 
X_35:bat[:int], X_36:bat[:int], X_30:bat[:int]);
+    X_16:bat[:int] := sql.delta(X_8:bat[:int], X_13:bat[:oid], X_14:bat[:int], 
X_11:bat[:int]);
+    X_17:bat[:int] := algebra.projection(C_5:bat[:oid], X_16:bat[:int]);
+    X_18:lng := 2:lng;
+    X_20:lng := 0:lng;
+    X_22:lng := calc.+(X_20:lng, X_18:lng);
+    X_23:lng := calc.-(X_22:lng, 1:int);
+    C_24:bat[:oid] := algebra.subslice(X_17:bat[:int], X_20:lng, X_23:lng);
+    X_25:bat[:int] := algebra.projection(C_24:bat[:oid], X_17:bat[:int]);
+    X_27:bat[:str] := bat.pack("sys.oblo":str);
+    X_28:bat[:str] := bat.pack("a":str);
+    X_29:bat[:str] := bat.pack("int":str);
+    X_30:bat[:int] := bat.pack(32:int);
+    X_31:bat[:int] := bat.pack(0:int);
+    sql.resultSet(X_27:bat[:str], X_28:bat[:str], X_29:bat[:str], 
X_30:bat[:int], X_31:bat[:int], X_25:bat[:int]);
 end user.main;
 #inline               actions= 0 time=0 usec 
 #remap                actions= 0 time=0 usec 
@@ -234,28 +228,26 @@ end user.main;
 % clob # type
 % 114 # length
 function user.main():void;
-    X_1:void := querylog.define("explain select * from oblo limit 1 offset 
2;":str, "minimal_pipe":str, 25:int);
+    X_1:void := querylog.define("explain select * from oblo limit 1 offset 
2;":str, "minimal_pipe":str, 21:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "oblo":str);
+    X_8:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
     X_11:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
     (X_13:bat[:oid], X_14:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_17:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
-    X_18:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
-    (X_19:bat[:oid], X_20:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_21:bat[:int] := sql.delta(X_17:bat[:int], X_19:bat[:oid], 
X_20:bat[:int], X_18:bat[:int]);
-    X_22:bat[:int] := algebra.projection(C_5:bat[:oid], X_21:bat[:int]);
-    X_23:lng := 1:lng;
-    X_25:lng := 2:lng;
-    X_27:lng := calc.+(X_25:lng, X_23:lng);
-    X_28:lng := calc.-(X_27:lng, 1:int);
-    C_29:bat[:oid] := algebra.subslice(X_22:bat[:int], X_25:lng, X_28:lng);
-    X_30:bat[:int] := algebra.projection(C_29:bat[:oid], X_22:bat[:int]);
-    X_32:bat[:str] := bat.pack("sys.oblo":str);
-    X_33:bat[:str] := bat.pack("a":str);
-    X_34:bat[:str] := bat.pack("int":str);
-    X_35:bat[:int] := bat.pack(32:int);
-    X_36:bat[:int] := bat.pack(0:int);
-    sql.resultSet(X_32:bat[:str], X_33:bat[:str], X_34:bat[:str], 
X_35:bat[:int], X_36:bat[:int], X_30:bat[:int]);
+    X_16:bat[:int] := sql.delta(X_8:bat[:int], X_13:bat[:oid], X_14:bat[:int], 
X_11:bat[:int]);
+    X_17:bat[:int] := algebra.projection(C_5:bat[:oid], X_16:bat[:int]);
+    X_18:lng := 1:lng;
+    X_20:lng := 2:lng;
+    X_22:lng := calc.+(X_20:lng, X_18:lng);
+    X_23:lng := calc.-(X_22:lng, 1:int);
+    C_24:bat[:oid] := algebra.subslice(X_17:bat[:int], X_20:lng, X_23:lng);
+    X_25:bat[:int] := algebra.projection(C_24:bat[:oid], X_17:bat[:int]);
+    X_27:bat[:str] := bat.pack("sys.oblo":str);
+    X_28:bat[:str] := bat.pack("a":str);
+    X_29:bat[:str] := bat.pack("int":str);
+    X_30:bat[:int] := bat.pack(32:int);
+    X_31:bat[:int] := bat.pack(0:int);
+    sql.resultSet(X_27:bat[:str], X_28:bat[:str], X_29:bat[:str], 
X_30:bat[:int], X_31:bat[:int], X_25:bat[:int]);
 end user.main;
 #inline               actions= 0 time=0 usec 
 #remap                actions= 0 time=1 usec 
@@ -271,28 +263,26 @@ end user.main;
 % clob # type
 % 114 # length
 function user.main():void;
-    X_1:void := querylog.define("explain select * from oblo limit 2 offset 
1;":str, "minimal_pipe":str, 25:int);
+    X_1:void := querylog.define("explain select * from oblo limit 2 offset 
1;":str, "minimal_pipe":str, 21:int);
     X_4:int := sql.mvc();
     C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "oblo":str);
+    X_8:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
     X_11:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
     (X_13:bat[:oid], X_14:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_17:bat[:int] := sql.bind(X_4:int, "sys":str, "oblo":str, "a":str, 0:int);
-    X_18:bat[:int] := sql.emptybind(X_4:int, "sys":str, "oblo":str, "a":str, 
1:int);
-    (X_19:bat[:oid], X_20:bat[:int]) := sql.emptybind(X_4:int, "sys":str, 
"oblo":str, "a":str, 2:int);
-    X_21:bat[:int] := sql.delta(X_17:bat[:int], X_19:bat[:oid], 
X_20:bat[:int], X_18:bat[:int]);
-    X_22:bat[:int] := algebra.projection(C_5:bat[:oid], X_21:bat[:int]);
-    X_23:lng := 2:lng;
-    X_25:lng := 1:lng;
-    X_27:lng := calc.+(X_25:lng, X_23:lng);
-    X_28:lng := calc.-(X_27:lng, 1:int);
-    C_29:bat[:oid] := algebra.subslice(X_22:bat[:int], X_25:lng, X_28:lng);
-    X_30:bat[:int] := algebra.projection(C_29:bat[:oid], X_22:bat[:int]);
-    X_32:bat[:str] := bat.pack("sys.oblo":str);
-    X_33:bat[:str] := bat.pack("a":str);
-    X_34:bat[:str] := bat.pack("int":str);
-    X_35:bat[:int] := bat.pack(32:int);
-    X_36:bat[:int] := bat.pack(0:int);
-    sql.resultSet(X_32:bat[:str], X_33:bat[:str], X_34:bat[:str], 
X_35:bat[:int], X_36:bat[:int], X_30:bat[:int]);
+    X_16:bat[:int] := sql.delta(X_8:bat[:int], X_13:bat[:oid], X_14:bat[:int], 
X_11:bat[:int]);
+    X_17:bat[:int] := algebra.projection(C_5:bat[:oid], X_16:bat[:int]);
+    X_18:lng := 2:lng;
+    X_20:lng := 1:lng;
+    X_22:lng := calc.+(X_20:lng, X_18:lng);
+    X_23:lng := calc.-(X_22:lng, 1:int);
+    C_24:bat[:oid] := algebra.subslice(X_17:bat[:int], X_20:lng, X_23:lng);
+    X_25:bat[:int] := algebra.projection(C_24:bat[:oid], X_17:bat[:int]);
+    X_27:bat[:str] := bat.pack("sys.oblo":str);
+    X_28:bat[:str] := bat.pack("a":str);
+    X_29:bat[:str] := bat.pack("int":str);
+    X_30:bat[:int] := bat.pack(32:int);
+    X_31:bat[:int] := bat.pack(0:int);
+    sql.resultSet(X_27:bat[:str], X_28:bat[:str], X_29:bat[:str], 
X_30:bat[:int], X_31:bat[:int], X_25:bat[:int]);
 end user.main;
 #inline               actions= 0 time=0 usec 
 #remap                actions= 0 time=1 usec 
@@ -308,24 +298,22 @@ end user.main;
 % clob # type
 % 142 # length
 function user.main():void;
-    X_1:void := querylog.define("explain select * from oblo order by a;":str, 
"minimal_pipe":str, 21:int);
_______________________________________________
checkin-list mailing list
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to