Skip to content

Commit 15741f7

Browse files
Fixed unique index and unconventionally named index (#196)
1 parent fbd4d11 commit 15741f7

File tree

2 files changed

+14
-8
lines changed

2 files changed

+14
-8
lines changed

src/sqlacodegen/generators.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -373,15 +373,19 @@ def render_column(self, column: Column[Any], show_name: bool) -> str:
373373
for c in column.table.constraints
374374
)
375375
is_unique = is_unique or any(
376-
i.unique and set(i.columns) == {column} for i in column.table.indexes
376+
i.unique and set(i.columns) == {column} and uses_default_name(i)
377+
for i in column.table.indexes
377378
)
378379
is_primary = any(
379380
isinstance(c, PrimaryKeyConstraint)
380381
and column.name in c.columns
381382
and uses_default_name(c)
382383
for c in column.table.constraints
383384
)
384-
has_index = any(set(i.columns) == {column} for i in column.table.indexes)
385+
has_index = any(
386+
set(i.columns) == {column} and uses_default_name(i)
387+
for i in column.table.indexes
388+
)
385389

386390
if show_name:
387391
args.append(repr(column.name))
@@ -407,7 +411,7 @@ def render_column(self, column: Column[Any], show_name: bool) -> str:
407411
if is_unique:
408412
column.unique = True
409413
kwargs["unique"] = True
410-
elif has_index:
414+
if has_index:
411415
column.index = True
412416
kwarg.append("index")
413417
kwargs["index"] = True
@@ -1100,7 +1104,7 @@ def render_table_args(self, table: Table) -> str:
11001104

11011105
# Render indexes
11021106
for index in sorted(table.indexes, key=lambda i: i.name):
1103-
if len(index.columns) > 1:
1107+
if len(index.columns) > 1 or not uses_default_name(index):
11041108
args.append(self.render_index(index))
11051109

11061110
if table.schema:

tests/test_generators.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ def test_indexes(self, generator: CodeGenerator) -> None:
326326
'simple_items', metadata,
327327
Column('id', Integer),
328328
Column('number', Integer, index=True),
329-
Column('text', String, unique=True),
329+
Column('text', String, unique=True, index=True),
330330
Index('ix_empty'),
331331
Index('ix_text_number', 'text', 'number', unique=True)
332332
)
@@ -1000,12 +1000,14 @@ def test_indexes(self, generator: CodeGenerator) -> None:
10001000
class SimpleItems(Base):
10011001
__tablename__ = 'simple_items'
10021002
__table_args__ = (
1003-
Index('idx_text_number', 'text', 'number'),
1003+
Index('idx_number', 'number'),
1004+
Index('idx_text', 'text', unique=True),
1005+
Index('idx_text_number', 'text', 'number')
10041006
)
10051007
10061008
id = Column(Integer, primary_key=True)
1007-
number = Column(Integer, index=True)
1008-
text = Column(String, unique=True)
1009+
number = Column(Integer)
1010+
text = Column(String)
10091011
""",
10101012
)
10111013

0 commit comments

Comments
 (0)