Changeset: 31c668505b8c for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB?cmd=changeset;node=31c668505b8c
Modified Files:
        sql/server/rel_unnest.c
        sql/test/SQLancer/Tests/sqlancer07.stable.out
Branch: octbugs
Log Message:

Union lists of values with subrelations


diffs (50 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
@@ -3203,7 +3203,7 @@ rewrite_values(visitor *v, sql_rel *rel)
                return rel;
        sql_exp *e = rel->exps->h->data;
 
-       if (!is_values(e) || list_length(exp_get_values(e))<=1 || 
!rel_has_freevar(v->sql, rel))
+       if (!is_values(e) || list_length(exp_get_values(e))<=1 || 
(!rel_has_freevar(v->sql, rel) && !exp_has_rel(e)))
                return rel;
 
        list *exps = sa_list(v->sql->sa);
@@ -3267,7 +3267,7 @@ rel_unnest(mvc *sql, sql_rel *rel)
        rel = rel_exp_visitor_bottomup(&v, rel, &rewrite_ifthenelse, false);    
/* add isnull handling */
        rel = rel_exp_visitor_bottomup(&v, rel, &reset_exp_used, false);        
/* reset used flag from ifthenelse re-writer, so it can be used again by the 
rel_dce optimizer */
 
-       rel = rel_visitor_bottomup(&v, rel, &rewrite_values);
+       rel = rel_visitor_bottomup(&v, rel, &rewrite_values); /* must come 
before rewrite_exp_rel */
        rel = rel_exp_visitor_bottomup(&v, rel, &rewrite_exp_rel, true);
        rel = rel_visitor_bottomup(&v, rel, &rewrite_join2semi);        /* 
where possible convert anyequal functions into marks */
        if (v.changes > 0)
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
@@ -276,6 +276,13 @@ stdout of test 'sqlancer07` in directory
 #ROLLBACK;
 #START TRANSACTION;
 #CREATE TABLE "t1" ("c0" DOUBLE PRECISION NOT NULL);
+#select 1 from (values (0.86), ((select 3 from t1))) as sub0(c0);
+% .%6 # table_name
+% %6 # name
+% tinyint # type
+% 1 # length
+[ 1    ]
+[ 1    ]
 #select sub0.c0 from (values (0.86), ((select 3 from t1))) as sub0(c0); -- 
this one is right
 % .sub0 # table_name
 % c0 # name
@@ -283,6 +290,11 @@ stdout of test 'sqlancer07` in directory
 % 5 # length
 [ 0.86 ]
 [ NULL ]
+#select sub0.c0 from (values (0.86), ((select 3 from t1))) as sub0(c0) WHERE 
NOT TRUE;
+% .sub0 # table_name
+% c0 # name
+% decimal # type
+% 5 # length
 #select sub0.c0 from (values (0.86), ((select 3))) as sub0(c0);
 % .sub0 # table_name
 % c0 # name
_______________________________________________
checkin-list mailing list
checkin-list@monetdb.org
https://www.monetdb.org/mailman/listinfo/checkin-list

Reply via email to