From f0d9ead19f24d73dc4849b9bc72b348420fec2e8 Mon Sep 17 00:00:00 2001 From: Pavan-Nambi Date: Thu, 9 Oct 2025 08:17:46 +0530 Subject: [PATCH] add more tests refactor and use sort_unstable_by_key --- core/translate/schema.rs | 17 +++++++++-------- testing/create_table.test | 10 +++++++++- 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/core/translate/schema.rs b/core/translate/schema.rs index f7fde9f51..ce8f40f7f 100644 --- a/core/translate/schema.rs +++ b/core/translate/schema.rs @@ -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::>(); + + 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()); } } } diff --git a/testing/create_table.test b/testing/create_table.test index e961c017f..289e0e98f 100755 --- a/testing/create_table.test +++ b/testing/create_table.test @@ -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); -} \ No newline at end of file +} + +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); +}