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
[email protected]
https://www.monetdb.org/mailman/listinfo/checkin-list