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

Reply via email to