Fix for bug with extra columns in later chunks, closes #234

Thanks @nieuwenhoven for the fix, proposed in #225
This commit is contained in:
Simon Willison 2021-02-14 13:03:17 -08:00
commit 8f042ae1fd
2 changed files with 20 additions and 6 deletions

View file

@ -1904,12 +1904,10 @@ class Table(Queryable):
if hash_id:
all_columns.insert(0, hash_id)
else:
all_columns += [
column
for record in chunk
for column in record
if column not in all_columns
]
for record in chunk:
all_columns += [
column for column in record if column not in all_columns
]
validate_column_names(all_columns)
first = False

View file

@ -569,6 +569,22 @@ def test_insert_replace_rows_alter_table(fresh_db, use_table_factory):
] == list(table.rows)
def test_insert_all_with_extra_columns_in_later_chunks(fresh_db):
chunk = [
{"record": "Record 1"},
{"record": "Record 2"},
{"record": "Record 3"},
{"record": "Record 4", "extra": 1},
]
fresh_db["t"].insert_all(chunk, batch_size=2, alter=True)
assert list(fresh_db["t"].rows) == [
{"record": "Record 1", "extra": None},
{"record": "Record 2", "extra": None},
{"record": "Record 3", "extra": None},
{"record": "Record 4", "extra": 1},
]
def test_bulk_insert_more_than_999_values(fresh_db):
"Inserting 100 items with 11 columns should work"
fresh_db["big"].insert_all(