Changeset: cdb427549a87 for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/cdb427549a87
Added Files:
sql/test/BugTracker-2025/Tests/7670-missing-table-compatibility-checks.test
Modified Files:
sql/server/rel_schema.c
sql/test/BugTracker-2025/Tests/7674-rel_find_designated_index_crash.test
sql/test/BugTracker-2025/Tests/All
Branch: Mar2025
Log Message:
added missing table compatibility checks
fixes issue #7670
diffs (82 lines):
diff --git a/sql/server/rel_schema.c b/sql/server/rel_schema.c
--- a/sql/server/rel_schema.c
+++ b/sql/server/rel_schema.c
@@ -2028,22 +2028,31 @@ sql_alter_table(sql_query *query, dlist
if (!(pt = find_table_or_view_on_scope(sql, t->s, nsname,
ntname, "ALTER TABLE", false)))
return NULL;
+ const char *errt = TABLE_TYPE_DESCRIPTION(t->type,
t->properties);
+ const char *errpt = TABLE_TYPE_DESCRIPTION(pt->type,
pt->properties);
if (isView(pt))
- return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
can't add/drop a view into a %s",
-
TABLE_TYPE_DESCRIPTION(t->type, t->properties));
+ return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
can't add/drop a view into a %s", errt);
if (isDeclaredTable(pt))
- return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
can't add/drop a declared table into a %s",
-
TABLE_TYPE_DESCRIPTION(t->type, t->properties));
+ return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
can't add/drop a declared table into a %s", errt);
if (isTempSchema(pt->s))
- return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
can't add/drop a temporary table into a %s",
-
TABLE_TYPE_DESCRIPTION(t->type, t->properties));
+ return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
can't add/drop a temporary table into a %s", errt);
if (isReplicaTable(t) && isMergeTable(pt))
- return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
can't add/drop a %s table into a %s",
-
TABLE_TYPE_DESCRIPTION(pt->type, pt->properties),
TABLE_TYPE_DESCRIPTION(t->type, t->properties));
+ return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
can't add/drop a %s table into a %s", errpt, errt);
nsname = pt->s->base.name;
if (strcmp(sname, nsname) != 0)
- return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
all children tables of '%s.%s' must be part of schema '%s'",
- sname, tname, sname);
+ return sql_error(sql, 02, SQLSTATE(42000) "ALTER TABLE:
all children tables of '%s.%s' must be part of schema '%s'", sname, tname,
sname);
+
+ if (ol_length(t->columns) != ol_length(pt->columns))
+ return sql_error(sql, 02, SQLSTATE(3F000) "ALTER %s: to
be added table doesn't match %s definition", errt, errt);
+ for (node *n = ol_first_node(t->columns), *m =
ol_first_node(pt->columns); n && m; n = n->next, m = m->next) {
+ sql_column *nc = n->data;
+ sql_column *mc = m->data;
+
+ if (subtype_cmp(&nc->type, &mc->type) != 0)
+ return sql_error(sql, 02, SQLSTATE(3F000) "ALTER %s: to
be added table column type doesn't match %s definition", errt, errt);
+ if (nc->null != mc->null)
+ return sql_error(sql, 02, SQLSTATE(3F000)
"ALTER %s: to be added table column NULL check doesn't match %s definition",
errt, errt);
+ }
if (te->token == SQL_TABLE) {
symbol *extra = dl->h->next->next->next->data.sym;
diff --git
a/sql/test/BugTracker-2025/Tests/7670-missing-table-compatibility-checks.test
b/sql/test/BugTracker-2025/Tests/7670-missing-table-compatibility-checks.test
new file mode 100644
--- /dev/null
+++
b/sql/test/BugTracker-2025/Tests/7670-missing-table-compatibility-checks.test
@@ -0,0 +1,8 @@
+statement ok
+CREATE TABLE table1 (column1 STRING, column2 INT)
+
+statement ok
+CREATE MERGE TABLE table2 (column3 INT, column4 VARCHAR(100)) PARTITION BY
VALUES USING (UPPER(column4))
+
+statement error 3F000!ALTER LIST PARTITION TABLE: to be added table column
type doesn't match LIST PARTITION TABLE definition
+ALTER TABLE table2 SET TABLE table1 AS PARTITION IN (4, 5, 6)
diff --git
a/sql/test/BugTracker-2025/Tests/7674-rel_find_designated_index_crash.test
b/sql/test/BugTracker-2025/Tests/7674-rel_find_designated_index_crash.test
--- a/sql/test/BugTracker-2025/Tests/7674-rel_find_designated_index_crash.test
+++ b/sql/test/BugTracker-2025/Tests/7674-rel_find_designated_index_crash.test
@@ -13,8 +13,7 @@ ALTER TABLE table1 SET SCHEMA schema1
statement error 42000!syntax error, unexpected IDENT, expecting INSERT or READ
or SCHEMA or TABLE in: "alter table table1 set access"
ALTER TABLE table1 SET ACCESS READ ONLY
-skipif knownfail
-statement ok
+statement error 42S12!COMMENT ON: no such index 'index1'
COMMENT ON INDEX index1 IS 'Index created for analytical queries'
statement error 42S02!ALTER TABLE: no such table 'table1'
diff --git a/sql/test/BugTracker-2025/Tests/All
b/sql/test/BugTracker-2025/Tests/All
--- a/sql/test/BugTracker-2025/Tests/All
+++ b/sql/test/BugTracker-2025/Tests/All
@@ -25,6 +25,7 @@ 7661_trigger_crash
7662-drop-role-user
7663-alter-user-role
7664-session-user
+7670-missing-table-compatibility-checks
7671-lag-over-empty-bat
7674-rel_find_designated_index_crash
7680-union-all
_______________________________________________
checkin-list mailing list -- [email protected]
To unsubscribe send an email to [email protected]