This commit is contained in:
ikatyal2110 2026-07-12 21:36:16 -05:00 committed by GitHub
commit de6a4a2e9d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 25 additions and 0 deletions

View file

@ -1400,6 +1400,7 @@ class Database:
extracts: Optional[Union[Dict[str, str], List[str]]] = None,
if_not_exists: bool = False,
strict: bool = False,
autoincrement: bool = False,
) -> str:
"""
Returns the SQL ``CREATE TABLE`` statement for creating the specified table.
@ -1496,6 +1497,8 @@ class Database:
column_extras = []
if column_name == single_pk:
column_extras.append("PRIMARY KEY")
if autoincrement:
column_extras.append("AUTOINCREMENT")
if column_name in not_null:
column_extras.append("NOT NULL")
if column_name in defaults and defaults[column_name] is not None:
@ -2842,6 +2845,8 @@ class Table(Queryable):
if column_order is not None:
column_order = [rename.get(col) or col for col in column_order]
has_autoincrement = "autoincrement" in self.schema.lower()
sqls = []
sqls.append(
self.db.create_table_sql(
@ -2853,6 +2858,7 @@ class Table(Queryable):
foreign_keys=create_table_foreign_keys,
column_order=column_order,
strict=self.strict if strict is None else strict,
autoincrement=has_autoincrement,
).strip()
)

View file

@ -880,6 +880,25 @@ def test_transform_with_indexes_errors(fresh_db, transform_params):
)
def test_transform_preserves_autoincrement(fresh_db):
fresh_db.execute(
"CREATE TABLE t (id INTEGER PRIMARY KEY AUTOINCREMENT, val TEXT)"
)
fresh_db["t"].insert({"val": "one"})
fresh_db["t"].insert({"val": "two"})
fresh_db["t"].transform(rename={"val": "value"})
assert "AUTOINCREMENT" in fresh_db["t"].schema
# Confirm the column is still the primary key
assert fresh_db["t"].pks == ["id"]
def test_transform_without_autoincrement_not_affected(fresh_db):
fresh_db.execute("CREATE TABLE t (id INTEGER PRIMARY KEY, val TEXT)")
fresh_db["t"].insert({"val": "one"})
fresh_db["t"].transform(rename={"val": "value"})
assert "AUTOINCREMENT" not in fresh_db["t"].schema
def test_transform_with_unique_constraint_implicit_index(fresh_db):
dogs = fresh_db["dogs"]
# Create a table with a UNIQUE constraint on 'name', which creates an implicit index