Changeset: 3a0986071c5c for MonetDB URL: https://dev.monetdb.org/hg/MonetDB/rev/3a0986071c5c Added Files: sql/test/BugTracker-2024/Tests/recursive-merge-table-crash-7443.test sql/test/BugTracker-2024/Tests/unaligned_mats-7442.test Modified Files: sql/backends/monet5/sql_statement.c sql/server/rel_basetable.c sql/server/rel_optimizer.c sql/test/BugTracker-2024/Tests/All Branch: Dec2023 Log Message:
fixed issues #7442 and #7443 for recursive merge tables lookup columns names correctly in case of a large delete (all rows deleted), the empty binds optimizer should also clean out the sql.tid calls. diffs (96 lines): diff --git a/sql/backends/monet5/sql_statement.c b/sql/backends/monet5/sql_statement.c --- a/sql/backends/monet5/sql_statement.c +++ b/sql/backends/monet5/sql_statement.c @@ -595,7 +595,7 @@ stmt_tid(backend *be, sql_table *t, int if (t && isTable(t) && partition) { sql_trans *tr = be->mvc->session->tr; sqlstore *store = tr->store; - BUN rows = (BUN) store->storage_api.count_col(tr, ol_first_node(t->columns)->data, QUICK); + BUN rows = (BUN) store->storage_api.count_col(tr, ol_first_node(t->columns)->data, RDONLY); setRowCnt(mb,getArg(q,0),rows); } diff --git a/sql/server/rel_basetable.c b/sql/server/rel_basetable.c --- a/sql/server/rel_basetable.c +++ b/sql/server/rel_basetable.c @@ -487,7 +487,7 @@ rel_rename_part(mvc *sql, sql_rel *p, sq for (node *n = mt_rel->exps->h; n; n = n->next) { sql_exp *e = n->data; node *cn = NULL, *ci = NULL; - const char *nname = exp_name(e); + const char *nname = e->r; if (nname[0] == '%' && strcmp(nname, TID) == 0) { list_append(p->exps, exp_alias(sql->sa, mtalias, TID, pname, TID, sql_bind_localtype("oid"), CARD_MULTI, 0, 1, 1)); @@ -496,7 +496,7 @@ rel_rename_part(mvc *sql, sql_rel *p, sq sql_column *c = cn->data, *rc = ol_fetch(t->columns, c->colnr); /* with name find column in merge table, with colnr find column in member */ - sql_exp *ne = exp_alias(sql->sa, mtalias, c->base.name, pname, rc->base.name, &rc->type, CARD_MULTI, rc->null, is_column_unique(rc), 0); + sql_exp *ne = exp_alias(sql->sa, mtalias, exp_name(e), pname, rc->base.name, &rc->type, CARD_MULTI, rc->null, is_column_unique(rc), 0); if (rc->t->pkey && ((sql_kc*)rc->t->pkey->k.columns->h->data)->c == rc) { prop *p = ne->p = prop_create(sql->sa, PROP_HASHCOL, ne->p); p->value.pval = rc->t->pkey; diff --git a/sql/server/rel_optimizer.c b/sql/server/rel_optimizer.c --- a/sql/server/rel_optimizer.c +++ b/sql/server/rel_optimizer.c @@ -92,7 +92,7 @@ merge_table_prune_and_unionize(visitor * if (cname[0] == '%') /* Ignore TID and indexes here */ continue; - mt_col = ol_find_name(mt->columns, exp_name(e))->data; + mt_col = ol_find_name(mt->columns, cname)->data; col = ol_fetch(pt->columns, mt_col->colnr); assert(e && e->type == e_column && 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 @@ -5,4 +5,6 @@ where-case-null-issue-7429 create-index-query-issue-7430 alloc-overflow-7432 gc-col-crash-7440 +unaligned_mats-7442 +recursive-merge-table-crash-7443 greatest-as-colname-7444 diff --git a/sql/test/BugTracker-2024/Tests/recursive-merge-table-crash-7443.test b/sql/test/BugTracker-2024/Tests/recursive-merge-table-crash-7443.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2024/Tests/recursive-merge-table-crash-7443.test @@ -0,0 +1,18 @@ +statement ok +CREATE MERGE TABLE a (b int, subtable2 varchar(32)) PARTITION BY VALUES ON (b) + +statement ok +CREATE MERGE TABLE t1 (c int, d varchar(32)) PARTITION BY RANGE ON (c) + +statement ok +CREATE TABLE id (t1907060_1 int, age varchar(32)) + +statement ok +ALTER TABLE a ADD TABLE id AS PARTITION IN ('1', '2', '3') + +statement ok +ALTER TABLE t1 ADD TABLE a AS PARTITION FROM '0' TO '100' + +query IT +SELECT c, d FROM t1 +---- diff --git a/sql/test/BugTracker-2024/Tests/unaligned_mats-7442.test b/sql/test/BugTracker-2024/Tests/unaligned_mats-7442.test new file mode 100644 --- /dev/null +++ b/sql/test/BugTracker-2024/Tests/unaligned_mats-7442.test @@ -0,0 +1,13 @@ +statement ok +CREATE TABLE v0 ( v2 , v1 ) as ( select i , cast ( i as string ) from generate_series ( 1 , 1000 ) as t ( i ) ) + +statement ok +INSERT INTO v0 ( v1 ) SELECT v0 . v2 FROM v0 , v0 AS sum_f1 + +statement ok +DELETE FROM v0 WHERE ( 10 ) + +query I rowsort +SELECT count ( v1 ) FROM v0 WHERE v2 IN ( SELECT ( row_number ( ) OVER ( ) ) FROM v0 ) +---- +0 _______________________________________________ checkin-list mailing list -- checkin-list@monetdb.org To unsubscribe send an email to checkin-list-le...@monetdb.org