mirror of
https://github.com/aljazceru/turso.git
synced 2026-02-19 23:15:28 +01:00
add more tests
refactor and use sort_unstable_by_key
This commit is contained in:
@@ -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());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user