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

Reply via email to