Changeset: 2b21a252268f for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=2b21a252268f Modified Files: gdk/gdk_bat.c gdk/gdk_batop.c gdk/gdk_private.h sql/backends/monet5/sql_statement.c sql/server/rel_exp.c sql/test/SQLancer/Tests/sqlancer04.test sql/test/SQLancer/Tests/sqlancer05.test Branch: default Log Message:
Merged with Oct2020 diffs (truncated from 572 to 300 lines): diff --git a/gdk/gdk_align.c b/gdk/gdk_align.c --- a/gdk/gdk_align.c +++ b/gdk/gdk_align.c @@ -284,8 +284,8 @@ VIEWreset(BAT *b) if (tp == 0) { /* only sharing the vheap */ - assert(ATOMstorage(b->ttype) == TYPE_str); - return unshare_string_heap(b); + assert(ATOMvarsized(b->ttype)); + return unshare_varsized_heap(b); } BAT *v = VIEWcreate(b->hseqbase, b); diff --git a/gdk/gdk_bat.c b/gdk/gdk_bat.c --- a/gdk/gdk_bat.c +++ b/gdk/gdk_bat.c @@ -1062,7 +1062,7 @@ BUNappend(BAT *b, const void *t, bool fo } } - if (unshare_string_heap(b) != GDK_SUCCEED) { + if (unshare_varsized_heap(b) != GDK_SUCCEED) { return GDK_FAIL; } diff --git a/gdk/gdk_batop.c b/gdk/gdk_batop.c --- a/gdk/gdk_batop.c +++ b/gdk/gdk_batop.c @@ -19,10 +19,10 @@ #include "gdk_private.h" gdk_return -unshare_string_heap(BAT *b) +unshare_varsized_heap(BAT *b) { assert(b->batCacheid > 0); - if (ATOMstorage(b->ttype) == TYPE_str && + if (ATOMvarsized(b->ttype) && b->tvheap->parentid != b->batCacheid) { Heap *h = GDKzalloc(sizeof(Heap)); if (h == NULL) @@ -116,7 +116,7 @@ insert_string_bat(BAT *b, BAT *n, struct ci->tpe == cand_dense) { toff = 0; } else if (b->tvheap->parentid != bid && - unshare_string_heap(b) != GDK_SUCCEED) { + unshare_varsized_heap(b) != GDK_SUCCEED) { return GDK_FAIL; } } @@ -191,7 +191,7 @@ insert_string_bat(BAT *b, BAT *n, struct } } } - } else if (unshare_string_heap(b) != GDK_SUCCEED) + } else if (unshare_varsized_heap(b) != GDK_SUCCEED) return GDK_FAIL; if (toff == 0 && n->twidth == b->twidth && ci->tpe == cand_dense) { /* we don't need to do any translation of offset diff --git a/gdk/gdk_private.h b/gdk/gdk_private.h --- a/gdk/gdk_private.h +++ b/gdk/gdk_private.h @@ -247,7 +247,7 @@ ssize_t strToStr(char **restrict dst, si __attribute__((__visibility__("hidden"))); gdk_return strWrite(const char *a, stream *s, size_t cnt) __attribute__((__visibility__("hidden"))); -gdk_return unshare_string_heap(BAT *b) +gdk_return unshare_varsized_heap(BAT *b) __attribute__((__warn_unused_result__)) __attribute__((__visibility__("hidden"))); void VIEWdestroy(BAT *b) diff --git a/monetdb5/optimizer/opt_emptybind.c b/monetdb5/optimizer/opt_emptybind.c --- a/monetdb5/optimizer/opt_emptybind.c +++ b/monetdb5/optimizer/opt_emptybind.c @@ -35,21 +35,6 @@ } } while (0) -static int -withoutMitosis(MalBlkPtr mb) -{ - InstrPtr p; - - for(int i = mb->stop-1; i>=0; i--) { - p = mb->stmt[i]; - if (p->token == ENDsymbol) - break; - if (getFunctionId(p) == mitosisRef) - return (p->token == REMsymbol); - } - return 0; -} - str OPTemptybindImplementation(Client cntxt, MalBlkPtr mb, MalStkPtr stk, InstrPtr pci) { @@ -62,7 +47,6 @@ OPTemptybindImplementation(Client cntxt, str sch,tbl; int etop= 0, esize= 256; str msg = MAL_SUCCEED; - int no_mitosis = withoutMitosis(mb); (void) stk; (void) cntxt; @@ -211,19 +195,6 @@ OPTemptybindImplementation(Client cntxt, continue; } } - // delta operations without updates can be replaced by an pack of base and inserts - if (getModuleId(p)== sqlRef && getFunctionId(p) == deltaRef && p->argc == 5){ - if (no_mitosis && empty[getArg(p,2)] && empty[getArg(p,3)]){ - actions++; - clrFunction(p); - setModuleId(p,matRef); - setFunctionId(p,packRef); - p->argc = 3; - getArg(p, 2) = getArg(p, 4); - p->typechk= TYPE_UNKNOWN; - } - continue; - } if (getModuleId(p)== sqlRef && getFunctionId(p) == projectdeltaRef) { if( empty[getArg(p,3)] && empty[getArg(p,4)] ){ diff --git a/sql/backends/monet5/generator/Tests/generator01.stable.err b/sql/backends/monet5/generator/Tests/generator01.stable.err --- a/sql/backends/monet5/generator/Tests/generator01.stable.err +++ b/sql/backends/monet5/generator/Tests/generator01.stable.err @@ -103,7 +103,7 @@ ERROR = !Illegal generator range CODE = 42000 MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685 QUERY = select * from generate_series(cast(null as timestamp),10,1) ; -ERROR = !types tinyint(4,0) and timestamp(7,0) are not equal for column '%2' +ERROR = !types tinyint(4,0) and timestamp(7,0) are not equal CODE = 42000 MAPI = (monetdb) /var/tmp/mtest-30274/.s.monetdb.37685 QUERY = select * from generate_series(null,cast(10 as timestamp),cast(1 as interval second)) ; diff --git a/sql/backends/monet5/generator/Tests/generator04.stable.err b/sql/backends/monet5/generator/Tests/generator04.stable.err --- a/sql/backends/monet5/generator/Tests/generator04.stable.err +++ b/sql/backends/monet5/generator/Tests/generator04.stable.err @@ -53,7 +53,7 @@ MAPI = (monetdb) /var/tmp/mtest-30274/. QUERY = select * from generate_series( timestamp '2008-03-01 00:00', timestamp '2008-03-04 12:00'); -ERROR = !types timestamp(7,0) and tinyint(8,0) are not equal for column '%1' +ERROR = !types timestamp(7,0) and tinyint(8,0) are not equal CODE = 42000 # 21:38:52 > diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -3151,11 +3151,12 @@ stmt_convert(backend *be, stmt *v, stmt q = pushInt(mb, q, 3); } q = pushArgument(mb, q, v->nr); - if (sel && !pushed && !v->cand) + if (sel && !pushed && !v->cand) { q = pushArgument(mb, q, sel->nr); - else if (v->nrcols > 0 && t->type->eclass != EC_EXTERNAL) + pushed = 1; + } else if (v->nrcols > 0 && t->type->eclass != EC_EXTERNAL) { q = pushNil(mb, q, TYPE_bat); - + } if (t->type->eclass == EC_DEC || EC_TEMP_FRAC(t->type->eclass) || EC_INTERVAL(t->type->eclass)) { /* digits, scale of the result decimal */ q = pushInt(mb, q, t->digits); @@ -3196,14 +3197,13 @@ stmt_convert(backend *be, stmt *v, stmt return NULL; } s->op1 = v; - s->nrcols = 0; /* function without arguments returns single value */ s->key = v->key; s->nrcols = v->nrcols; s->aggr = v->aggr; s->op4.typeval = *t; s->nr = getDestVar(q); s->q = q; - s->cand = sel; + s->cand = pushed ? sel : NULL; return s; } return NULL; @@ -3336,7 +3336,7 @@ stmt_Nop(backend *be, stmt *ops, stmt *s if (f->func->type == F_FUNC && f->func->lang == FUNC_LANG_INT && push_cands) { for (n = ops->op4.lval->h; n; n = n->next) { stmt *op = n->data; - + if (op->nrcols > 0) { if (op->cand && op->cand == sel) { q = pushNil(mb, q, TYPE_bat); diff --git a/sql/server/rel_exp.c b/sql/server/rel_exp.c --- a/sql/server/rel_exp.c +++ b/sql/server/rel_exp.c @@ -2973,9 +2973,9 @@ exp_check_type(mvc *sql, sql_subtype *t, t->type->sqlname, t->digits, t->scale, - (exp->type == e_column ? " for column '" : ""), - (exp->type == e_column ? exp_name(exp) : ""), - (exp->type == e_column ? "'" : "") + (exp->type == e_column && !has_label(exp) ? " for column '" : ""), + (exp->type == e_column && !has_label(exp) ? exp_name(exp) : ""), + (exp->type == e_column && !has_label(exp) ? "'" : "") ); return res; } diff --git a/sql/test/SQLancer/Tests/sqlancer04.sql b/sql/test/SQLancer/Tests/sqlancer04.sql --- a/sql/test/SQLancer/Tests/sqlancer04.sql +++ b/sql/test/SQLancer/Tests/sqlancer04.sql @@ -424,3 +424,5 @@ WHERE (v4.vc0) IN (-2081865947, 30436)) 0.10216334194461484941029993933625519275665283203125) AS STRING(478)))) AS sub2 ON ((greatest(r'', r'32228'))NOT ILIKE(CAST(30792 AS STRING(381))))) as res; ROLLBACK; + +select cast(count(1) as interval second) from (values (false)) as v6(vc0); --error diff --git a/sql/test/SQLancer/Tests/sqlancer04.stable.err b/sql/test/SQLancer/Tests/sqlancer04.stable.err --- a/sql/test/SQLancer/Tests/sqlancer04.stable.err +++ b/sql/test/SQLancer/Tests/sqlancer04.stable.err @@ -55,6 +55,10 @@ MAPI = (monetdb) /var/tmp/mtest-13844/. QUERY = select coalesce(-1129107763, '1415606329') from (values(1),(2)) as t0(c0); ERROR = !value too long for type (var)char(10) CODE = 22001 +MAPI = (monetdb) /var/tmp/mtest-150622/.s.monetdb.34547 +QUERY = select cast(count(1) as interval second) from (values (false)) as v6(vc0); --error +ERROR = !types bigint(64,0) and sec_interval(13,0) are not equal +CODE = 42000 # 09:44:50 > # 09:44:50 > "Done." diff --git a/sql/test/SQLancer/Tests/sqlancer04.test b/sql/test/SQLancer/Tests/sqlancer04.test --- a/sql/test/SQLancer/Tests/sqlancer04.test +++ b/sql/test/SQLancer/Tests/sqlancer04.test @@ -776,4 +776,7 @@ 2 statement ok ROLLBACK +statement error +select cast(count(1) as interval second) from (values (false)) as v6(vc0) + 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 @@ -397,3 +397,53 @@ select cast(sum(count) as bigint) from ( select cast(interval '-1' second as time); --23:59:59 ROLLBACK; + +START TRANSACTION; +CREATE TABLE "sys"."t2" ("c0" INTERVAL MONTH,"c1" BINARY LARGE OBJECT); +COPY 11 RECORDS INTO "sys"."t2" FROM stdin USING DELIMITERS E'\t',E'\n','"'; +NULL E0 +NULL A0B0 +NULL 00 +NULL NULL +1655951380 NULL +1624060581 NULL +503097283 NULL +1181487537 NULL +NULL +NULL 4D3ABFB0 +1233829956 0C + +create view v0(vc0, vc1, vc2) as (values (length(r'-165227345'), greatest(interval '773370894' second, interval '-320486280' second), +sql_add(cast(date '1970-01-06' as timestamp), case 0.34182486343556306440660819134791381657123565673828125 when 20419 +then interval '-359816023' second else interval '413001394' second end))) with check option; + +select t2.c1 from (values (10, 773370894.000, timestamp '1983-02-07 02:36:34')) v0, t2 +right outer join (values (47940718, null)) as sub0 on nullif(true, (t2.c1) between (t2.c1) and (t2.c1)); + +select t2.c1 from v0, t2 right outer join (values (least(ifthenelse(false, r'', r'47940718'), sql_max(r'栩', r'U*>Kz0')), +case cast(interval '-165227345' month as string) when "insert"(r'f3', 0.57506007, -1550051844, r'0.06527867754732408') +then r'u' when r'2033856974' then case when true then r'' when false then r'-1543387917' when true then r'0.4055556886118663' +when false then r'c' else r'E\n' end end)) as sub0 on nullif(not (false), (t2.c1) not between asymmetric (t2.c1) and (t2.c1)) +where case ((50)*(1836147184)) when least(5110, 1303739364) then (false) = false when scale_down(0.07871449894764926, +0.26471586054989171277185278086108155548572540283203125) then least(true, true) when +cast(0.92609287116711858089956876938231289386749267578125 as double) then greatest(true, false) end; +ROLLBACK; + +START TRANSACTION; +create view v5(vc0, vc1, vc2) as (values (2090916872, -1.850350369280157e-11, 566614814)) with check option; + +create view v29(vc0, vc1) as (values (0.2, 0.2), (0.4, 0.5)) with check option; + +create view v57(vc0, vc1) as (values (0.6, 0.7), (0.8, 0.9)) with check option; + +create view v76(vc0) as (with cte0(c0,c1,c2,c3) as (select 0.32, 1, true, 1), cte1(c0,c1) as (select -0.50347245, 23.2) +select distinct true from (values(1),(2)) l0v54,cte0 as l0cte0,cte1 as l0cte1) with check option; + +create view v82(vc0, vc1) as (with cte1(c0,c1,c2) as (select 1, case when false +then true when false then false end, 1 from v29 as l1v29) +select case l0cte1.c1 when true then least(null, l0cte1.c0) end, 1 from cte1 as l0cte1 +join (select 1, '1', cast(l1v57.vc1 as bigint) from v57 as l1v57, +v5 as l1v5, v76 as l1v76) as sub1 on false) with check option; + +WITH cte0(c0,c1,c2) AS (SELECT CAST('1' AS INT), 1, 0.82 FROM v82 AS l1v82) SELECT 1 FROM cte0 AS l0cte0; +ROLLBACK; _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list