diff --git a/core/translate/alter.rs b/core/translate/alter.rs index 77a1949ea..4f8de0d99 100644 --- a/core/translate/alter.rs +++ b/core/translate/alter.rs @@ -6,7 +6,7 @@ use turso_parser::{ use crate::{ function::{AlterTableFunc, Func}, - schema::{Column, Table}, + schema::{Column, Table, RESERVED_TABLE_PREFIXES}, translate::{ emitter::Resolver, expr::{walk_expr, WalkControl}, @@ -41,6 +41,17 @@ pub fn translate_alter_table( crate::bail_parse_error!("table {} may not be modified", table_name); } + if let ast::AlterTableBody::RenameTo(new_table_name) = &alter_table { + let normalized_new_name = normalize_ident(new_table_name.as_str()); + + if RESERVED_TABLE_PREFIXES + .iter() + .any(|prefix| normalized_new_name.starts_with(prefix)) + { + crate::bail_parse_error!("Object name reserved for internal use: {}", new_table_name); + } + } + let table_indexes = resolver.schema.get_indices(table_name).collect::>(); if !table_indexes.is_empty() && !resolver.schema.indexes_enabled() {