Changeset: cab786dadffc for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cab786dadffc
Added Files:
        sql/test/BugTracker-2024/Tests/count-unnest-crash-7436.test
Modified Files:
        sql/server/rel_unnest.c
        sql/test/BugTracker-2024/Tests/All
Branch: Dec2023
Log Message:

fixes for issue #7436

when injecting a column for the count of sub queries use it from the first
found project.


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
@@ -1191,10 +1191,19 @@ push_up_groupby(mvc *sql, sql_rel *rel, 
                                        /* count_nil(* or constant) -> 
count(t.TID) */
                                        if (exp_is_count(e, r) && (!e->l || 
exps_is_constant(e->l))) {
                                                sql_rel *p = r->l; /* ugh */
+                                               sql_rel *pp = r;
+                                               while(p && p->l && 
(!is_project(p->op) && !is_base(p->op))) { /* find first project */
+                                                       pp = p;
+                                                       p = p->l;
+                                               }
+                                               if (p && p->l && 
is_project(p->op) && list_empty(p->exps)) { /* skip empty project */
+                                                       pp = p;
+                                                       p = p->l;
+                                               }
                                                sql_exp *col = 
list_length(p->exps) ? p->exps->t->data : NULL;
                                                const char *cname = col ? 
exp_name(col) : NULL;
 
-                                               if ((!cname || strcmp(cname, 
TID) != 0) && !(r->l = p = rel_add_identity(sql, p, &col)))
+                                               if ((!cname || strcmp(cname, 
TID) != 0) && !(pp->l = p = rel_add_identity(sql, p, &col)))
                                                        return NULL;
                                                col = exp_ref(sql, col);
                                                append(e->l=sa_list(sql->sa), 
col);
diff --git a/sql/test/BugTracker-2024/Tests/All 
b/sql/test/BugTracker-2024/Tests/All
--- a/sql/test/BugTracker-2024/Tests/All
+++ b/sql/test/BugTracker-2024/Tests/All
@@ -1,10 +1,11 @@
+pkey-check-failed-7425
 inequality-hash-issue-7426
-pkey-check-failed-7425
 where-between-issue-7428
 where-case-null-issue-7429
 create-index-query-issue-7430
 alloc-overflow-7432
 rewrite-count-crash-7433
+count-unnest-crash-7436
 bind-exps-crash-7438
 exps-cards-crash-7439
 gc-col-crash-7440
diff --git a/sql/test/BugTracker-2024/Tests/count-unnest-crash-7436.test 
b/sql/test/BugTracker-2024/Tests/count-unnest-crash-7436.test
new file mode 100644
--- /dev/null
+++ b/sql/test/BugTracker-2024/Tests/count-unnest-crash-7436.test
@@ -0,0 +1,5 @@
+statement ok
+CREATE TABLE v0 ( v1 DOUBLE )
+
+statement ok
+DELETE FROM v0 WHERE ( v1 ) IS NULL OR ( SELECT DENSE_RANK ( ) OVER ( 
PARTITION BY count ( * ) ORDER BY v1 % 10 ) WHERE 0 BETWEEN v1 AND v1 ) < 4
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to