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