Skip to content

Commit

Permalink
Fix SQL so it respects custom foreignkeyfield.constraint_name
Browse files Browse the repository at this point in the history
Refs #2957
  • Loading branch information
coleifer committed Dec 12, 2024
1 parent 9b038b1 commit 2b77c67
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 5 deletions.
15 changes: 10 additions & 5 deletions peewee.py
Original file line number Diff line number Diff line change
Expand Up @@ -6145,15 +6145,20 @@ def drop_sequence(self, field):
self.database.execute(seq_ctx)

def _create_foreign_key(self, field):
name = 'fk_%s_%s_refs_%s' % (field.model._meta.table_name,
field.column_name,
field.rel_model._meta.table_name)
if not field.constraint_name:
name = 'fk_%s_%s_refs_%s' % (field.model._meta.table_name,
field.column_name,
field.rel_model._meta.table_name)
nodes = NodeList((SQL(' CONSTRAINT'),
Entity(_truncate_constraint_name(name))))
else:
nodes = NodeList(())
return (self
._create_context()
.literal('ALTER TABLE ')
.sql(field.model)
.literal(' ADD CONSTRAINT ')
.sql(Entity(_truncate_constraint_name(name)))
.literal(' ADD')
.sql(nodes)
.literal(' ')
.sql(field.foreign_key_constraint()))

Expand Down
8 changes: 8 additions & 0 deletions tests/schema.py
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,14 @@ def test_table_and_index_creation(self):
('CREATE INDEX "tm_named_constraints_fk_id" '
'ON "tm_named_constraints" ("fk_id")')])

sql, params = (TMNamedConstraints
._schema
._create_foreign_key(TMNamedConstraints.fk)
.query())
self.assertEqual(sql, (
'ALTER TABLE "tm_named_constraints" ADD CONSTRAINT "tmc_fk" '
'FOREIGN KEY ("fk_id") REFERENCES "tm_named_constraints" ("id")'))

def test_index_name_truncation(self):
class LongIndex(TestModel):
a123456789012345678901234567890 = CharField()
Expand Down

0 comments on commit 2b77c67

Please sign in to comment.