Use assertion to enforce <=999 columns

This commit is contained in:
Simon Willison 2019-07-28 14:41:57 +03:00
commit 0c1b8b7f96
2 changed files with 7 additions and 2 deletions

View file

@ -6,6 +6,8 @@ import itertools
import json
import pathlib
SQLITE_MAX_VARS = 999
try:
import numpy as np
except ImportError:
@ -854,7 +856,10 @@ class Table:
# Peek at first record to count its columns:
first_record = next(records)
num_columns = len(first_record.keys())
batch_size = max(1, min(batch_size, 999 // num_columns))
assert (
num_columns <= SQLITE_MAX_VARS
), "Rows can have a maximum of {} columns".format(SQLITE_MAX_VARS)
batch_size = max(1, min(batch_size, SQLITE_MAX_VARS // num_columns))
for chunk in chunks(itertools.chain([first_record], records), batch_size):
chunk = list(chunk)
if first:

View file

@ -530,7 +530,7 @@ def test_bulk_insert_more_than_999_values(fresh_db):
def test_error_if_more_than_999_columns(fresh_db, num_columns, should_error):
record = dict([("c{}".format(i), i) for i in range(num_columns)])
if should_error:
with pytest.raises(Exception):
with pytest.raises(AssertionError):
fresh_db["big"].insert(record)
else:
fresh_db["big"].insert(record)