mirror of
https://github.com/simonw/sqlite-utils.git
synced 2026-08-13 04:44:19 +02:00
parent
e6be6267a4
commit
88b48fa167
3 changed files with 42 additions and 0 deletions
|
|
@ -5270,6 +5270,13 @@ def _decode_default_value(value: str) -> object:
|
|||
# It's a binary string, stored as hex
|
||||
to_decode = value[2:-1]
|
||||
return binascii.unhexlify(to_decode)
|
||||
upper = value.upper()
|
||||
if upper == "TRUE":
|
||||
return True
|
||||
if upper == "FALSE":
|
||||
return False
|
||||
if upper == "NULL":
|
||||
return None
|
||||
# If it is a string containing a floating point number:
|
||||
try:
|
||||
return float(value)
|
||||
|
|
|
|||
|
|
@ -1509,6 +1509,26 @@ def test_create_transform(fresh_db, cols, kwargs, expected_schema, should_transf
|
|||
assert fresh_db.table("demo").count == 1
|
||||
|
||||
|
||||
def test_create_transform_keyword_literal_defaults_unchanged(fresh_db):
|
||||
fresh_db.execute(
|
||||
"create table demo ("
|
||||
"id integer primary key, "
|
||||
"enabled integer default TRUE, "
|
||||
"disabled integer default FALSE, "
|
||||
"nullable text default NULL"
|
||||
")"
|
||||
)
|
||||
traces = []
|
||||
with fresh_db.tracer(lambda sql, parameters: traces.append((sql, parameters))):
|
||||
fresh_db.table("demo").create(
|
||||
{"id": int, "enabled": int, "disabled": int, "nullable": str},
|
||||
pk="id",
|
||||
defaults={"enabled": True, "disabled": False, "nullable": None},
|
||||
transform=True,
|
||||
)
|
||||
assert not any(sql.startswith("CREATE TABLE") for sql, _ in traces)
|
||||
|
||||
|
||||
def test_rename_table(fresh_db):
|
||||
fresh_db.table("t").insert({"foo": "bar"})
|
||||
assert ["t"] == fresh_db.table_names()
|
||||
|
|
|
|||
|
|
@ -393,6 +393,21 @@ def test_table_default_values_escaped_quotes(fresh_db):
|
|||
assert fresh_db.table("t").default_values == {"name": "O'Brien"}
|
||||
|
||||
|
||||
def test_table_default_values_keyword_literals(fresh_db):
|
||||
fresh_db.execute(
|
||||
"create table t ("
|
||||
"enabled integer default TRUE, "
|
||||
"disabled integer default false, "
|
||||
"nullable text default NULL"
|
||||
")"
|
||||
)
|
||||
assert fresh_db.table("t").default_values == {
|
||||
"enabled": True,
|
||||
"disabled": False,
|
||||
"nullable": None,
|
||||
}
|
||||
|
||||
|
||||
def test_pks_use_primary_key_declaration_order(fresh_db):
|
||||
# PRIMARY KEY (a, b) declared against columns stored in order (b, a) -
|
||||
# pks must follow the declaration order, which is what SQLite uses to
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue