From b6840646baf97e4d324d2c53c036ffeeedab9822 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Tue, 12 Jan 2021 15:17:27 -0800 Subject: [PATCH] .add_missing_columns() is now case insensitive, closes #221 --- sqlite_utils/db.py | 4 ++-- tests/test_create.py | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/sqlite_utils/db.py b/sqlite_utils/db.py index dc2a2e8..c6bc606 100644 --- a/sqlite_utils/db.py +++ b/sqlite_utils/db.py @@ -1973,9 +1973,9 @@ class Table(Queryable): def add_missing_columns(self, records): needed_columns = suggest_column_types(records) - current_columns = self.columns_dict + current_columns = {c.lower() for c in self.columns_dict} for col_name, col_type in needed_columns.items(): - if col_name not in current_columns: + if col_name.lower() not in current_columns: self.add_column(col_name, col_type) return self diff --git a/tests/test_create.py b/tests/test_create.py index a658757..bee47a7 100644 --- a/tests/test_create.py +++ b/tests/test_create.py @@ -503,6 +503,16 @@ def test_insert_row_alter_table_invalid_column_characters(fresh_db): table.insert({"foo": "baz", "new_col[abc]": 1.2}, alter=True) +def test_add_missing_columns_case_insensitive(fresh_db): + table = fresh_db["foo"] + table.insert({"id": 1, "name": "Cleo"}, pk="id") + table.add_missing_columns([{"Name": ".", "age": 4}]) + assert ( + table.schema + == "CREATE TABLE [foo] (\n [id] INTEGER PRIMARY KEY,\n [name] TEXT\n, [age] INTEGER)" + ) + + @pytest.mark.parametrize("use_table_factory", [True, False]) def test_insert_replace_rows_alter_table(fresh_db, use_table_factory): first_row = {"id": 1, "title": "Hedgehogs of the world", "author_id": 1}