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*>Kz0')),
+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

Reply via email to