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