Changeset: 574f72c57cdc for MonetDB URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=574f72c57cdc Modified Files: sql/server/rel_unnest.c sql/test/SQLancer/Tests/sqlancer07.sql sql/test/SQLancer/Tests/sqlancer07.stable.out Branch: octbugs Log Message:
Look for empty lists diffs (91 lines): 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 @@ -3209,27 +3209,33 @@ rewrite_values(visitor *v, sql_rel *rel) list *exps = sa_list(v->sql->sa); sql_rel *cur = NULL; list *vals = exp_get_values(e); - for(int i = 0; i<list_length(vals); i++) { - sql_rel *nrel = rel_project(v->sql->sa, NULL, sa_list(v->sql->sa)); - set_processed(nrel); - for(node *n = rel->exps->h; n; n = n->next) { - sql_exp *e = n->data; - if (i == 0) - append(exps, exp_ref(v->sql, e)); - list *vals = exp_get_values(e); - sql_exp *v = list_fetch(vals, i); - append(nrel->exps, v); - rel_set_exps(nrel, nrel->exps); + if (vals) { + for(int i = 0; i<list_length(vals); i++) { + sql_rel *nrel = rel_project(v->sql->sa, NULL, sa_list(v->sql->sa)); + set_processed(nrel); + for(node *n = rel->exps->h; n; n = n->next) { + sql_exp *e = n->data; + list *vals = exp_get_values(e); + + if (vals) { + if (i == 0) + append(exps, exp_ref(v->sql, e)); + sql_exp *v = list_fetch(vals, i); + append(nrel->exps, v); + rel_set_exps(nrel, nrel->exps); + } + } + if (cur) { + nrel = rel_setop(v->sql->sa, cur, nrel, op_union); + rel_set_exps(nrel, exps); + set_processed(nrel); + } + if (!list_empty(nrel->exps)) + cur = nrel; } - if (cur) { - nrel = rel_setop(v->sql->sa, cur, nrel, op_union); - rel_set_exps(nrel, exps); - set_processed(nrel); - } - cur = nrel; + rel = cur; + set_single(rel); } - rel = cur; - set_single(rel); return rel; } diff --git a/sql/test/SQLancer/Tests/sqlancer07.sql b/sql/test/SQLancer/Tests/sqlancer07.sql --- a/sql/test/SQLancer/Tests/sqlancer07.sql +++ b/sql/test/SQLancer/Tests/sqlancer07.sql @@ -222,3 +222,9 @@ SELECT t0.c0 FROM t0 WHERE (EXISTS (SELE SELECT CAST(SUM(count) AS BIGINT) FROM (SELECT CAST((EXISTS (SELECT ALL TRUE, 0.3, INTERVAL '5' MONTH, TIME '16:59:58' WHERE FALSE)) IN ((SELECT DISTINCT FALSE FROM t1), (('0.9')NOT ILIKE(''))) AS INT) as count FROM t0) as res; -- NULL ROLLBACK; + +START TRANSACTION; +CREATE TABLE "t1" ("c0" BIGINT NOT NULL,CONSTRAINT "t1_c0_pkey" PRIMARY KEY ("c0")); +INSERT INTO t1(c0) VALUES(2), (+ ((VALUES (sql_min(3, 4))))); +SELECT * from t1; +ROLLBACK; diff --git a/sql/test/SQLancer/Tests/sqlancer07.stable.out b/sql/test/SQLancer/Tests/sqlancer07.stable.out --- a/sql/test/SQLancer/Tests/sqlancer07.stable.out +++ b/sql/test/SQLancer/Tests/sqlancer07.stable.out @@ -315,6 +315,18 @@ stdout of test 'sqlancer07` in directory % 1 # length [ NULL ] #ROLLBACK; +#START TRANSACTION; +#CREATE TABLE "t1" ("c0" BIGINT NOT NULL,CONSTRAINT "t1_c0_pkey" PRIMARY KEY ("c0")); +#INSERT INTO t1(c0) VALUES(2), (+ ((VALUES (sql_min(3, 4))))); +[ 2 ] +#SELECT * from t1; +% sys.t1 # table_name +% c0 # name +% bigint # type +% 1 # length +[ 2 ] +[ 3 ] +#ROLLBACK; # 10:16:14 > # 10:16:14 > "Done." _______________________________________________ checkin-list mailing list checkin-list@monetdb.org https://www.monetdb.org/mailman/listinfo/checkin-list