mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-07-23 09:24:31 +02:00
Fix ValueTracker skipping type evaluation for empty strings
`ValueTracker.evaluate()` used `if not value` to skip NULL values, but this also skipped empty strings (`""`), `0`, and other falsy values. A CSV column containing only empty strings was incorrectly inferred as INTEGER (the initial default) instead of TEXT. Replace the falsy check with an explicit `if value is None` so that only NULL is skipped and all other values — including `""` — are evaluated against the type tests.
This commit is contained in:
parent
a947dc6739
commit
cffe30fd2f
2 changed files with 19 additions and 1 deletions
|
|
@ -490,7 +490,7 @@ class ValueTracker:
|
|||
return "text"
|
||||
|
||||
def evaluate(self, value: object) -> None:
|
||||
if not value or not self.couldbe:
|
||||
if value is None or not self.couldbe:
|
||||
return
|
||||
not_these: List[str] = []
|
||||
for name, test in self.couldbe.items():
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
from sqlite_utils import utils
|
||||
from sqlite_utils.utils import TypeTracker
|
||||
import csv
|
||||
import io
|
||||
import pytest
|
||||
|
|
@ -73,6 +74,23 @@ def test_maximize_csv_field_size_limit():
|
|||
assert rows_list2[0]["text"] == long_value
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"rows,expected_types",
|
||||
[
|
||||
([{"a": ""}], {"a": "text"}),
|
||||
([{"a": ""}, {"a": ""}], {"a": "text"}),
|
||||
([{"a": "1"}, {"a": ""}], {"a": "text"}),
|
||||
([{"a": "0"}], {"a": "integer"}),
|
||||
([{"a": "1"}], {"a": "integer"}),
|
||||
([{"a": None}], {"a": "integer"}),
|
||||
],
|
||||
)
|
||||
def test_type_tracker_empty_strings(rows, expected_types):
|
||||
tracker = TypeTracker()
|
||||
list(tracker.wrap(iter(rows)))
|
||||
assert tracker.types == expected_types
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"input,expected",
|
||||
(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue