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