Changeset: ac64f84b01fb for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=ac64f84b01fb Branch: default Log Message:
Merge with Oct2020 branch. diffs (truncated from 125648 to 300 lines): diff --git a/monetdb5/modules/kernel/bat5.c b/monetdb5/modules/kernel/bat5.c --- a/monetdb5/modules/kernel/bat5.c +++ b/monetdb5/modules/kernel/bat5.c @@ -1047,12 +1047,12 @@ BKCreuseBAT(bat *ret, const bat *bid, co } } - BATsetcount(bn, BATcount(b) - BATcount(bs)); - bn->tsorted = false; - bn->trevsorted = false; + BATsetcount(bn, BATcount(b) - BATcount(bs)); + bn->tsorted = false; + bn->trevsorted = false; bn->tseqbase = oid_nil; bn->tkey = b->tkey; - + bn->tnonil = b->tnonil; BBPunfix(b->batCacheid); BBPunfix(bs->batCacheid); @@ -1109,9 +1109,9 @@ BKCreuseBATmap(bat *ret, const bat *bid, } } - BATsetcount(bn, BATcount(b)-BATcount(bs)); - bn->tsorted = false; - bn->trevsorted = false; + BATsetcount(bn, BATcount(b)-BATcount(bs)); + bn->tsorted = false; + bn->trevsorted = false; bn->tseqbase = oid_nil; diff --git a/monetdb5/modules/mal/pcre.c b/monetdb5/modules/mal/pcre.c --- a/monetdb5/modules/mal/pcre.c +++ b/monetdb5/modules/mal/pcre.c @@ -1407,7 +1407,7 @@ PCREilike3(bit *ret, const str *s, const static str PCREilike2(bit *ret, const str *s, const str *pat) { - char *esc = "\\"; + char *esc = ""; return PCREilike3(ret, s, pat, &esc); } @@ -1619,7 +1619,7 @@ pcre_clean( } static str -BATPCRElike3(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, const str *esc, const bit *isens, const bit *not) +BATPCRElike3(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci, const str *esc, const bit *isens, const bit *not) { str msg = MAL_SUCCEED, input = NULL, pat = NULL; BAT *b = NULL, *pbn = NULL, *bn = NULL; @@ -1758,7 +1758,7 @@ BATPCRElike(Client cntxt, MalBlkPtr mb, static str BATPCRElike2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { - char *esc = "\\"; + char *esc = ""; bit no = FALSE; return BATPCRElike3(cntxt, mb, stk, pci, &esc, &no, &no); @@ -1776,7 +1776,7 @@ BATPCREnotlike(Client cntxt, MalBlkPtr m static str BATPCREnotlike2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { - char *esc = "\\"; + char *esc = ""; bit no = FALSE, yes = TRUE; return BATPCRElike3(cntxt, mb, stk, pci, &esc, &no, &yes); @@ -1794,7 +1794,7 @@ BATPCREilike(Client cntxt, MalBlkPtr mb, static str BATPCREilike2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { - char *esc = "\\"; + char *esc = ""; bit yes = TRUE, no = FALSE; return BATPCRElike3(cntxt, mb, stk, pci, &esc, &yes, &no); @@ -1812,7 +1812,7 @@ BATPCREnotilike(Client cntxt, MalBlkPtr static str BATPCREnotilike2(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { - char *esc = "\\"; + char *esc = ""; bit yes = TRUE; return BATPCRElike3(cntxt, mb, stk, pci, &esc, &yes, &yes); 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 @@ -131,7 +131,7 @@ no_updates(InstrPtr *old, int *vars, int str OPTpushselectImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { - int i, j, limit, slimit, actions=0, *vars, *nvars = NULL, *slices = NULL, push_down_delta = 0, nr_topn = 0, nr_likes = 0; + int i, j, limit, slimit, actions=0, *vars, *nvars = NULL, *slices = NULL, push_down_delta = 0, nr_topn = 0, nr_likes = 0, no_mito = 0; char *rslices = NULL, *oclean = NULL; InstrPtr p, *old; subselect_t subselects; @@ -143,6 +143,7 @@ OPTpushselectImplementation(Client cntxt if( mb->errors) return MAL_SUCCEED; + no_mito = !isOptimizerEnabled(mb, "mitosis"); (void) stk; (void) pci; vars= (int*) GDKzalloc(sizeof(int)* mb->vtop); @@ -176,7 +177,8 @@ OPTpushselectImplementation(Client cntxt if (isLikeOp(p)) nr_likes++; - if (getModuleId(p) == sqlRef && getFunctionId(p) == deltaRef) + if ((getModuleId(p) == sqlRef && getFunctionId(p) == deltaRef) || + (no_mito && getModuleId(p) == matRef && getFunctionId(p) == packRef && p->argc == (p->retc+2))) push_down_delta++; if (/* DISABLES CODE */ (0) && getModuleId(p) == sqlRef && getFunctionId(p) == tidRef) { /* rewrite equal table ids */ @@ -610,6 +612,10 @@ OPTpushselectImplementation(Client cntxt * s = subdelta(nc, uid, nu, ni); * * doesn't handle Xselect(x, .. z, C1.. cases) ie multicolumn selects + * + * also handle (if no_mito) + * c = pack(b, ins) + * s = select(c, C1..) */ lastbat = lastbat_arg(mb, p); if (isSelect(p) && p->retc == 1 && lastbat == 2) { @@ -620,7 +626,40 @@ OPTpushselectImplementation(Client cntxt var = getArg(q, 1); q = old[vars[var]]; } - if (q && getModuleId(q) == sqlRef && getFunctionId(q) == deltaRef) { + if (no_mito && q && getModuleId(q) == matRef && getFunctionId(q) == packRef && q->argc == (q->retc+2)) { + InstrPtr r = copyInstruction(p); + InstrPtr t = copyInstruction(p); + + if( r == NULL || t == NULL){ + freeInstruction(r); + freeInstruction(t); + 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(t, 0) = newTmpVariable(mb, newBatType(TYPE_oid)); + setVarCList(mb,getArg(t,0)); + getArg(t, 1) = getArg(q, 2); /* inserts */ + pushInstruction(mb,t); + + InstrPtr u = copyInstruction(q); /* pack result */ + getArg(u, 0) = getArg(p,0); + getArg(u, 1) = getArg(r,0); + getArg(u, 2) = getArg(t,0); + u->typechk = TYPE_UNKNOWN; + pushInstruction(mb,u); + oclean[i] = 1; + continue; + } else if (q && getModuleId(q) == sqlRef && getFunctionId(q) == deltaRef) { InstrPtr r = copyInstruction(p); InstrPtr s = copyInstruction(p); InstrPtr t = copyInstruction(p); @@ -673,10 +712,49 @@ OPTpushselectImplementation(Client cntxt continue; } } else if (getModuleId(p) == algebraRef && getFunctionId(p) == projectionRef) { + int id = getArg(p, 1); + InstrPtr s = old[vars[id]]; int var = getArg(p, 2); InstrPtr q = old[vars[var]]; - if (getModuleId(q) == sqlRef && getFunctionId(q) == deltaRef && q->argc == 5) { + if (no_mito && + getModuleId(q) == matRef && getFunctionId(q) == packRef && q->argc == 3 && + getModuleId(s) == matRef && getFunctionId(s) == packRef && s->argc == 3) { + InstrPtr r = copyInstruction(p); + InstrPtr t = copyInstruction(p); + + if( r == NULL || t == NULL){ + freeInstruction(r); + freeInstruction(t); + 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, getArgType(mb, p, 0)); + setVarCList(mb,getArg(r,0)); + getArg(r, 1) = getArg(s, 1); + getArg(r, 2) = getArg(q, 1); /* column */ + r->typechk = TYPE_UNKNOWN; + pushInstruction(mb,r); + getArg(t, 0) = newTmpVariable(mb, getArgType(mb, p, 0)); + setVarCList(mb,getArg(t,0)); + getArg(t, 1) = getArg(s, 2); + getArg(t, 2) = getArg(q, 2); /* inserts */ + pushInstruction(mb,t); + + InstrPtr u = copyInstruction(q); /* pack result */ + getArg(u, 0) = getArg(p,0); + getArg(u, 1) = getArg(r,0); + getArg(u, 2) = getArg(t,0); + u->typechk = TYPE_UNKNOWN; + pushInstruction(mb,u); + oclean[i] = 1; + continue; + } else if (getModuleId(q) == sqlRef && getFunctionId(q) == deltaRef && q->argc == 5) { q = copyInstruction(q); if( q == NULL){ GDKfree(vars); diff --git a/sql/backends/monet5/sql.c b/sql/backends/monet5/sql.c --- a/sql/backends/monet5/sql.c +++ b/sql/backends/monet5/sql.c @@ -4080,6 +4080,9 @@ vacuum(Client cntxt, MalBlkPtr mb, MalSt throw(SQL, name, SQLSTATE(42000) "%s not allowed on tables with indices", name + 4); if (t->system) throw(SQL, name, SQLSTATE(42000) "%s not allowed on system tables", name + 4); + if (!isTable(t)) + throw(SQL, name, SQLSTATE(42000) "%s: %s '%s' is not persistent", name + 4, + TABLE_TYPE_DESCRIPTION(t->type, t->properties), t->base.name); if (has_snapshots(m->session->tr)) throw(SQL, name, SQLSTATE(42000) "%s not allowed on snapshots", name + 4); diff --git a/sql/server/rel_unnest.c b/sql/server/rel_unnest.c --- a/sql/server/rel_unnest.c +++ b/sql/server/rel_unnest.c @@ -2759,7 +2759,7 @@ rewrite_compare_exps(visitor *v, sql_rel sql_find_subtype(&bt, "boolean", 0, 0); if (!(e = exp_check_type(v->sql, &bt, rel, e, type_equal))) return NULL; - n->data = exp_compare(v->sql->sa, e, exp_atom_bool(v->sql->sa, 1), cmp_equal); + n->data = e = exp_compare(v->sql->sa, e, exp_atom_bool(v->sql->sa, 1), cmp_equal); v->changes++; } if (is_compare(e->type) && e->flag == cmp_or) { diff --git a/sql/test/SQLancer/Tests/sqlancer05.sql b/sql/test/SQLancer/Tests/sqlancer05.sql --- a/sql/test/SQLancer/Tests/sqlancer05.sql +++ b/sql/test/SQLancer/Tests/sqlancer05.sql @@ -268,3 +268,101 @@ SELECT t1.c0 FROM t1 WHERE t1.c0 NOT ILI SELECT t1.c0 NOT ILIKE t1.c0 FROM t1; --14 * false ROLLBACK; + +START TRANSACTION; +CREATE TABLE "sys"."t0" ("c0" INTERVAL MONTH,"c1" INTERVAL SECOND); +create view v0(c0) as (select all t0.c1 from t0); +CALL sys.reuse('sys', 'v0'); --error not persistent +ROLLBACK; + +CREATE TABLE "sys"."t1" ("c1" BOOLEAN); +INSERT INTO t1(c1) VALUES(TRUE), (FALSE), (FALSE); +INSERT INTO t1(c1) VALUES((- (2127809083)) NOT IN (CASE TIME '22:10:54' WHEN TIME '19:30:46' THEN -1396572561 WHEN TIME '15:58:42' THEN -1164282298 END, + (-767637633), COALESCE(1638931666, 596854699))), (TRUE); +INSERT INTO t1(c1) VALUES(FALSE), (TRUE), (FALSE), (FALSE), (FALSE), (FALSE), (TRUE), (TRUE), (FALSE), (TRUE); +DELETE FROM t1 WHERE t1.c1; +CALL sys.reuse('sys', 't1'); +DROP TABLE "sys"."t1"; + +START TRANSACTION; +CREATE TABLE "sys"."t0" ("c0" DATE NOT NULL,CONSTRAINT "t0_c0_pkey" PRIMARY KEY ("c0"),CONSTRAINT "t0_c0_unique" UNIQUE ("c0")); +COPY 4 RECORDS INTO "sys"."t0" FROM stdin USING DELIMITERS E'\t',E'\n','"'; +1970-01-10 +1970-01-08 +1970-01-11 +1970-01-04 + +CREATE TABLE "sys"."t1" ("c0" BIGINT NOT NULL,"c1" BOOLEAN,CONSTRAINT "t1_c0_pkey" PRIMARY KEY ("c0")); +COPY 36 RECORDS INTO "sys"."t1" FROM stdin USING DELIMITERS E'\t',E'\n','"'; +23 false +24 false +25 false +229738198 NULL +1819118647 NULL +26 false +2058744872 NULL +-168288931 NULL +166463833 NULL +-255018368 NULL +27 false +-233859923 false +77211519 NULL +28 false +159399657 NULL +29 false +2026785942 NULL +-418264598 NULL +1594290070 NULL _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list