MonetDB: Jun2020 - approved output
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...
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 ...
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 */ + push
MonetDB: Jun2020 - backported df9f64e326f2 : Don't generate the ...
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
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
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