Changeset: f2de8d0c1198 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/f2de8d0c1198
Added Files:
        sql/test/BugTracker-2025/Tests/7725-crash-find-rel-ref.test
Modified Files:
        sql/server/rel_exp.c
        sql/server/rel_unnest.c
        sql/test/BugTracker-2025/Tests/All
Branch: Mar2025
Log Message:

Add proper ref for complex expression. Create projection with the expression if 
no rel input. Fix #7725


diffs (47 lines):

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
@@ -803,6 +803,8 @@ exp_ref(mvc *sql, sql_exp *e)
        sql_exp *ne = exp_propagate(sql->sa, exp_column(sql->sa, 
exp_relname(e), exp_name(e), exp_subtype(e), exp_card(e), has_nil(e), 
is_unique(e), is_intern(e)), e);
        if (ne) {
                ne->nid = e->alias.label;
+               if (!ne->nid)
+                       ne->nid = exp_get_label(e);
                ne->alias.label = ne->nid;
        }
        return ne;
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
@@ -3465,7 +3465,11 @@ rewrite_compare(visitor *v, sql_rel *rel
                                }
                                if (quantifier) {
                                        sql_subfunc *a;
-
+                                       if (rsq == NULL) {
+                                               rsq = rel_project(v->sql->sa, 
NULL, sa_list(v->sql->sa));
+                                               append(rsq->exps, re);
+                                               re = exp_ref(v->sql, re);
+                                       }
                                        rsq = rel_groupby(v->sql, rsq, NULL);
                                        a = sql_bind_func(v->sql, "sys", 
"null", exp_subtype(re), NULL, F_AGGR, true, true);
                                        rnull = exp_aggr1(v->sql->sa, re, a, 0, 
1, CARD_AGGR, has_nil(re));
diff --git a/sql/test/BugTracker-2025/Tests/7725-crash-find-rel-ref.test 
b/sql/test/BugTracker-2025/Tests/7725-crash-find-rel-ref.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2025/Tests/7725-crash-find-rel-ref.test
@@ -0,0 +1,6 @@
+statement error 22018!conversion of string 'EUROPE' to type bte failed.
+SELECT ( WITH x ( x ) AS ( SELECT DISTINCT 1 ) SELECT ( SELECT x FROM x WHERE 
x = ( SELECT ( SELECT x FROM x WHERE EXISTS ( SELECT - x , x FROM x ) ) WHERE ( 
WITH x AS ( SELECT * FROM generate_series ( 8888 , 8100 ) EXCEPT SELECT * FROM 
generate_series ( 44 , 3 ) ) SELECT 2 WHERE FALSE ) > ANY ( 'EUROPE' ) GROUP BY 
1 ) ) FROM x )
+
+statement ok
+SELECT (SELECT * FROM (select 1))
+GROUP BY 1;
diff --git a/sql/test/BugTracker-2025/Tests/All 
b/sql/test/BugTracker-2025/Tests/All
--- a/sql/test/BugTracker-2025/Tests/All
+++ b/sql/test/BugTracker-2025/Tests/All
@@ -49,3 +49,4 @@ 7736-scale-reduction-crash
 7737-join-order
 7748-update-returning-subquery-crash
 7753-like-in-projection
+7725-crash-find-rel-ref
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to