MonetDB: Jun2020 - approved output

2021-01-30 Thread Niels Nes
Changeset: 7bfe54cd70cd for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=7bfe54cd70cd
Modified Files:
sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
sql/backends/monet5/UDF/udf/Tests/udf-reverse.stable.out

sql/test/BugTracker-2009/Tests/segfault_when_quitting_debugger.SF-2538837.stable.out

sql/test/BugTracker-2010/Tests/LIMIT_OFFSET_big-endian.Bug-2622.stable.out

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-2016/Tests/decimal_vs_integer.Bug-3941.stable.out.single

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-2019/Tests/duplicates-not-eliminated-long-CASE-stmt.Bug-6697.stable.out.single
sql/test/BugTracker/Tests/case_in_aggr_bug.SF-1506545.stable.out
sql/test/BugTracker/Tests/cast_interval2time.SF-1488247.stable.out
sql/test/BugTracker/Tests/crash_on_cast.SF-1357271.stable.out
sql/test/BugTracker/Tests/explain.SF-1739353.stable.out
sql/test/BugTracker/Tests/jdbc_no_debug.SF-1739356.stable.out

sql/test/BugTracker/Tests/mdb_starts_with_sql_debug_64.SF-1999354.stable.out
sql/test/BugTracker/Tests/orderby_in_function.SF-1892708.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-0join-query.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-0join-view.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-query.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-1join-view.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-query.stable.out

sql/test/FeatureRequests/Tests/foreign_key_outer_join_dead_code_elimination-explain-2join-view.stable.out
sql/test/mergetables/Tests/mergequery.stable.out
sql/test/miscellaneous/Tests/simple_plans.stable.out
sql/test/remote/Tests/partition_elim.stable.out
Branch: Jun2020
Log Message:

approved output


diffs (truncated from 4095 to 300 lines):

diff --git a/sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out 
b/sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
--- a/sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
+++ b/sql/backends/monet5/UDF/udf/Tests/udf-fuse.stable.out
@@ -169,20 +169,20 @@ end user.s8_0;
 % clob # type
 % 114 # length
 function user.s16_0():void;
-X_1:void := querylog.define("explain select fuse(a,b) from udf_fuse;":str, 
"sequential_pipe":str, 26:int);
-X_34:bat[:str] := bat.pack("sys.%1":str);
-X_35:bat[:str] := bat.pack("%1":str);
-X_36:bat[:str] := bat.pack("smallint":str);
-X_37:bat[:int] := bat.pack(16:int);
-X_38:bat[:int] := bat.pack(0:int);
+X_1:void := querylog.define("explain select fuse(a,b) from udf_fuse;":str, 
"sequential_pipe":str, 22:int);
+X_29:bat[:str] := bat.pack("sys.%1":str);
+X_30:bat[:str] := bat.pack("%1":str);
+X_31:bat[:str] := bat.pack("smallint":str);
+X_32:bat[:int] := bat.pack(16:int);
+X_33:bat[:int] := bat.pack(0:int);
 X_4:int := sql.mvc();
 C_5:bat[:oid] := sql.tid(X_4:int, "sys":str, "udf_fuse":str);
-X_17:bat[:bte] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "a":str, 
0:int);
-X_28:bat[:bte] := algebra.projection(C_5:bat[:oid], X_17:bat[:bte]);
-X_22:bat[:bte] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "b":str, 
0:int);
-X_29:bat[:bte] := algebra.projection(C_5:bat[:oid], X_22:bat[:bte]);
-X_30:bat[:sht] := batudf.fuse(X_28:bat[:bte], X_29:bat[:bte]);
-sql.resultSet(X_34:bat[:str], X_35:bat[:str], X_36:bat[:str], 
X_37:bat[:int], X_38:bat[:int], X_30:bat[:sht]);
+X_8:bat[:bte] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "a":str, 
0:int);
+X_23:bat[:bte] := algebra.projection(C_5:bat[:oid], X_8:bat[:bte]);
+X_17:bat[:bte] := sql.bind(X_4:int, "sys":str, "udf_fuse":str, "b":str, 
0:int);
+X_24:bat[:bte] := algebra.projection(C_5:bat[:oid], X_17:bat[:bte]);
+X_25:bat[:sht] := batudf.fuse(X_23:bat[:bte], X_24:bat[:bte]);
+sql.resultSet(X_29:bat[:str], X_30:bat[:str], X_31:bat[:str], 
X_32:bat[:int], X_33:bat[:int], X_25:bat[:sht]);
 end user.s16_0;
 #inline   actions= 0 time=1 usec 
 #remapactions= 1 time=6 usec 
@@ -215,20 +215,20 @@ end user.s16_0;
 % clob # type
 % 114 # length
 function user.s18_0():void;
-X_1:void := querylog.define("explain select fuse(c,d) from udf_fuse;":str, 

MonetDB: Jun2020 - if no-mitosis is set, and we have a simple se...

2021-01-30 Thread Niels Nes
Changeset: 33032ce1a860 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=33032ce1a860
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: Jun2020
Log Message:

if no-mitosis is set, and we have a simple semijoin case (don't use the more 
general join/semijoin route)


diffs (59 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
@@ -2230,6 +2230,7 @@ split_join_exps(sql_rel *rel, list *join
 }
 
 #define is_equi_exp(e) ((e)->flag == cmp_equal || (e)->flag == mark_in || 
(e)->flag == mark_notin)
+#define is_equi_exp_(e) ((e)->flag == cmp_equal || (e)->flag == mark_in)
 
 static list *
 get_equi_joins_first(mvc *sql, list *exps, int *equality_only)
@@ -2554,6 +2555,7 @@ rel2bin_semijoin(backend *be, sql_rel *r
list *l, *sexps = NULL;
node *en = NULL, *n;
stmt *left = NULL, *right = NULL, *join = NULL, *jl, *jr, *c, *lcand = 
NULL;
+   int semijoin_only = 0;
 
if (rel->op == op_anti && !list_empty(rel->exps) && 
list_length(rel->exps) == 1 && ((sql_exp*)rel->exps->h->data)->flag == 
mark_notin)
return rel2bin_antijoin(be, rel, refs);
@@ -2634,7 +2636,13 @@ rel2bin_semijoin(backend *be, sql_rel *r
 
if (!l || !r)
return NULL;
-   s = stmt_join_cand(be, column(be, l), 
column(be, r), left->cand, NULL/*right->cand*/, e->anti, (comp_type) e->flag, 
0, is_semantics(e), false);
+   if (sql->no_mitosis && 
list_length(jexps) == 1 && list_empty(sexps) && rel->op == op_semi && !e->anti 
&& is_equi_exp_(e)) {
+   join = stmt_semijoin(be, 
column(be, l), column(be, r), left->cand, NULL/*right->cand*/, is_semantics(e), 
false);
+   semijoin_only = 1;
+   en = NULL;
+   break;
+   } else
+   s = stmt_join_cand(be, 
column(be, l), column(be, r), left->cand, NULL/*right->cand*/, e->anti, 
(comp_type) e->flag, 0, is_semantics(e), false);
lcand = left->cand;
} else {
s = exp_bin(be, e, left, right, NULL, 
NULL, NULL, NULL, NULL, 0, 1);
@@ -2741,14 +2749,16 @@ rel2bin_semijoin(backend *be, sql_rel *r
 
/* We did a full join, thats too much.
   Reduce this using difference and intersect */
-   c = stmt_mirror(be, left->op4.lval->h->data);
-   if (rel->op == op_anti) {
-   join = stmt_tdiff(be, c, jl, lcand);
-   } else {
-   if (lcand)
-   join = stmt_semijoin(be, c, jl, lcand, 
NULL/*right->cand*/, 0, false);
-   else
-   join = stmt_tinter(be, c, jl, false);
+   if (!semijoin_only) {
+   c = stmt_mirror(be, left->op4.lval->h->data);
+   if (rel->op == op_anti) {
+   join = stmt_tdiff(be, c, jl, lcand);
+   } else {
+   if (lcand)
+   join = stmt_semijoin(be, c, jl, lcand, 
NULL/*right->cand*/, 0, false);
+   else
+   join = stmt_tinter(be, c, jl, false);
+   }
}
 
/* project all the left columns */
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: Jun2020 - in case of no mitoses push semijoins (ie sql ...

2021-01-30 Thread Niels Nes
Changeset: 58c506776db2 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=58c506776db2
Modified Files:
monetdb5/optimizer/opt_pushselect.c
Branch: Jun2020
Log Message:

in case of no mitoses push semijoins (ie sql 'in' cases) like selects through 
the delta's


diffs (106 lines):

diff --git a/monetdb5/optimizer/opt_pushselect.c 
b/monetdb5/optimizer/opt_pushselect.c
--- a/monetdb5/optimizer/opt_pushselect.c
+++ b/monetdb5/optimizer/opt_pushselect.c
@@ -128,6 +128,8 @@ no_updates(InstrPtr *old, int *vars, int
return 1;
 }
 
+#define isIntersect(p) (getModuleId(p) == algebraRef && getFunctionId(p) == 
intersectRef)
+
 str
 OPTpushselectImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, 
InstrPtr pci)
 {
@@ -165,7 +167,7 @@ OPTpushselectImplementation(Client cntxt
}
 
if (getModuleId(p) == algebraRef &&
-   (getFunctionId(p) == intersectRef ||
+   ((!no_mito && getFunctionId(p) == intersectRef) ||
 getFunctionId(p) == differenceRef)) {
GDKfree(vars);
goto wrapup;
@@ -177,6 +179,9 @@ OPTpushselectImplementation(Client cntxt
if (isLikeOp(p))
nr_likes++;
 
+   if (no_mito && isIntersect(p))
+   push_down_delta++;
+
if ((getModuleId(p) == sqlRef && getFunctionId(p) == deltaRef) 
||
(no_mito && getModuleId(p) == matRef && 
getFunctionId(p) == packRef && p->argc == (p->retc+2)))
push_down_delta++;
@@ -772,6 +777,74 @@ OPTpushselectImplementation(Client cntxt
oclean[i] = 1;
actions++;
}
+   } else if (isIntersect(p) && p->retc == 1 && lastbat == 4) {
+   /* c = delta(b, uid, uvl, ins)
+* s = intersect(l, r, li, ..)
+*
+* nc = intersect(b, r, li..)
+* ni = intersect(ins, r, li..)
+* nu = intersect(uvl, r, ..)
+* s = subdelta(nc, uid, nu, ni);
+*/
+   int var = getArg(p, 1);
+   InstrPtr q = old[vars[var]];
+
+   if (q && q->token == ASSIGNsymbol) {
+   var = getArg(q, 1);
+   q = old[vars[var]];
+   }
+   if (q && getModuleId(q) == sqlRef && getFunctionId(q) 
== deltaRef) {
+   InstrPtr r = copyInstruction(p);
+   InstrPtr s = copyInstruction(p);
+   InstrPtr t = copyInstruction(p);
+   InstrPtr u = copyInstruction(q);
+
+   if( r == NULL || s == NULL || t== NULL ||u == 
NULL){
+   freeInstruction(r);
+   freeInstruction(s);
+   freeInstruction(t);
+   freeInstruction(u);
+   GDKfree(vars);
+   GDKfree(nvars);
+   GDKfree(slices);
+   GDKfree(rslices);
+   GDKfree(oclean);
+   GDKfree(old);
+   throw(MAL,"optimizer.pushselect", 
SQLSTATE(HY013) MAL_MALLOC_FAIL);
+   }
+   getArg(r, 0) = newTmpVariable(mb, 
newBatType(TYPE_oid));
+   setVarCList(mb,getArg(r,0));
+   getArg(r, 1) = getArg(q, 1); /* column */
+   r->typechk = TYPE_UNKNOWN;
+   pushInstruction(mb,r);
+   getArg(s, 0) = newTmpVariable(mb, 
newBatType(TYPE_oid));
+   setVarCList(mb,getArg(s,0));
+   getArg(s, 1) = getArg(q, 3); /* updates */
+   s = ReplaceWithNil(mb, s, 3, TYPE_bat); /* no 
candidate list */
+   setArgType(mb, s, 3, newBatType(TYPE_oid));
+   /* make sure to resolve again */
+   s->token = ASSIGNsymbol;
+   s->typechk = TYPE_UNKNOWN;
+   s->fcn = NULL;
+   s->blk = NULL;
+   pushInstruction(mb,s);
+   getArg(t, 0) = newTmpVariable(mb, 
newBatType(TYPE_oid));
+   setVarCList(mb,getArg(t,0));
+   getArg(t, 1) = getArg(q, 4); /* inserts */
+   

MonetDB: Jun2020 - backported df9f64e326f2 : Don't generate the ...

2021-01-30 Thread Niels Nes
Changeset: c947f8b35d58 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c947f8b35d58
Modified Files:
sql/backends/monet5/rel_bin.c
Branch: Jun2020
Log Message:

backported df9f64e326f2 : Don't generate the same column/index bind statement 
twice


diffs (79 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
@@ -1548,16 +1548,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 ) {
@@ -1572,10 +1568,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);
}
}
@@ -1585,26 +1583,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, NULL, 0, 0);
-   if(!u)
-   return NULL;
-
-   append(l, u);
-   }
-   s = stmt_Nop(be, stmt_list(be, l), 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;
 
@@ -1619,11 +1599,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);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - merged

2021-01-30 Thread Niels Nes
Changeset: c34cc41ca842 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=c34cc41ca842
Branch: nospare
Log Message:

merged


diffs (97 lines):

diff --git a/sql/test/mergetables/Tests/All b/sql/test/mergetables/Tests/All
--- a/sql/test/mergetables/Tests/All
+++ b/sql/test/mergetables/Tests/All
@@ -28,3 +28,4 @@ sqlsmith-exists
 sqlsmith-exists2
 
 mergetable_rel_push_aggr_down
+multiple-merge-tables
diff --git a/sql/test/mergetables/Tests/multiple-merge-tables.test 
b/sql/test/mergetables/Tests/multiple-merge-tables.test
new file mode 100644
--- /dev/null
+++ b/sql/test/mergetables/Tests/multiple-merge-tables.test
@@ -0,0 +1,84 @@
+statement ok
+create table t (i int)
+
+statement ok
+insert into t values (42), (666)
+
+statement ok
+create merge table mt1 (like t)
+
+statement ok
+create merge table mt2 (like t)
+
+statement ok
+create temp table mycount(cc BIGINT) ON COMMIT PRESERVE ROWS
+
+statement ok
+insert into mycount SELECT (SELECT COUNT(*) FROM sys.dependencies) + (SELECT 
COUNT(*) FROM sys.objects)
+
+statement ok
+alter table mt1 add table t
+
+query I rowsort
+select i from mt1
+
+42
+666
+
+statement error
+select i from mt2
+
+statement ok
+alter table mt2 add table t
+
+query I rowsort
+select i from mt1
+
+42
+666
+
+query I rowsort
+select i from mt2
+
+42
+666
+
+statement ok
+alter table mt1 drop table t
+
+statement error
+select i from mt1
+
+query I rowsort
+select i from mt2
+
+42
+666
+
+statement ok
+alter table mt2 drop table t
+
+statement error
+select i from mt1
+
+statement error
+select i from mt2
+
+query I rowsort
+SELECT CAST((SELECT COUNT(*) FROM sys.dependencies) + (SELECT COUNT(*) FROM 
sys.objects) - (SELECT cc FROM mycount) AS BIGINT)
+
+0
+
+statement ok
+drop table mycount
+
+statement ok
+drop table mt1
+
+statement ok
+drop table mt2
+
+statement ok
+drop table t
+
+
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list


MonetDB: nospare - don't touch possibly destroyed objects

2021-01-30 Thread Niels Nes
Changeset: fdf485d9a7ef for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=fdf485d9a7ef
Modified Files:
sql/storage/store.c
Branch: nospare
Log Message:

don't touch possibly destroyed objects


diffs (32 lines):

diff --git a/sql/storage/store.c b/sql/storage/store.c
--- a/sql/storage/store.c
+++ b/sql/storage/store.c
@@ -151,8 +151,10 @@ key_destroy(sqlstore *store, sql_key *k)
return;
list_destroy2(k->columns, store);
k->columns = NULL;
+   /*
if ((k->type == pkey) && (k->t->pkey == (sql_ukey *) k))
k->t->pkey = NULL;
+   */
_DELETE(k->base.name);
_DELETE(k);
 }
@@ -166,7 +168,7 @@ idx_destroy(sqlstore *store, sql_idx * i
list_destroy2(i->columns, store);
i->columns = NULL;
 
-   if (isTable(i->t))
+   if (i->data)
store->storage_api.destroy_idx(store, i);
_DELETE(i->base.name);
_DELETE(i);
@@ -197,7 +199,7 @@ column_destroy(sqlstore *store, sql_colu
assert(c->base.refcnt > 0);
if (--(c->base.refcnt) > 0)
return;
-   if (isTable(c->t))
+   if (c->data)
store->storage_api.destroy_col(store, c);
_DELETE(c->def);
_DELETE(c->base.name);
___
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list