add more tests

refactor and use sort_unstable_by_key
This commit is contained in:
Pavan-Nambi
2025-10-09 08:17:46 +05:30
parent f138448da2
commit f0d9ead19f
2 changed files with 18 additions and 9 deletions

View File

@@ -40,15 +40,16 @@ pub fn translate_create_table(
bail_parse_error!("TEMPORARY table not supported yet");
}
// maybe we can do better than this.
if let ast::CreateTableBody::ColumnsAndConstraints { columns, .. } = &body {
for i in 0..columns.len() {
let name1 = normalize_ident(columns[i].col_name.as_str());
for j in (i + 1)..columns.len() {
let name2 = normalize_ident(columns[j].col_name.as_str());
if name1 == name2 {
bail_parse_error!("duplicate column name: {}", columns[i].col_name.as_str());
}
let mut indexes = (0..columns.len()).collect::<Vec<usize>>();
indexes.sort_unstable_by_key(|&i| normalize_ident(columns[i].col_name.as_str()));
for w in indexes.windows(2) {
let name1 = normalize_ident(columns[w[0]].col_name.as_str());
let name2 = normalize_ident(columns[w[1]].col_name.as_str());
if name1 == name2 {
bail_parse_error!("duplicate column name: {}", columns[w[0]].col_name.as_str());
}
}
}

View File

@@ -57,4 +57,12 @@ do_execsql_test_on_specific_db {:memory:} col-named-rowid {
# https://github.com/tursodatabase/turso/issues/3637
do_execsql_test_in_memory_any_error create_table_duplicate_column_names {
CREATE TABLE t(a, a);
}
}
do_execsql_test_in_memory_any_error create_table_duplicate_column_names_case_insensitive {
CREATE TABLE t(A, a);
}
do_execsql_test_in_memory_any_error create_table_duplicate_column_names_quoted {
CREATE TABLE t("a", a);
}