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

Reply via email to