Merge 'Fix disallow reserved prefixes in ALTER TABLE RENAME TO' from xmchx

Closes #3574

Closes #3663
This commit is contained in:
Pekka Enberg
2025-10-12 18:37:44 +03:00
committed by GitHub

View File

@@ -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::<Vec<_>>();
if !table_indexes.is_empty() && !resolver.schema.indexes_enabled() {