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 -- [email protected]
To unsubscribe send an email to [email protected]