]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
:paramref:`.MetaData.naming_convention` feature will now also
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 12 Mar 2014 19:09:48 +0000 (15:09 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 12 Mar 2014 19:09:48 +0000 (15:09 -0400)
apply to :class:`.CheckConstraint` objects that are associated
directly with a :class:`.Column` instead of just on the
:class:`.Table`.

doc/build/changelog/changelog_09.rst
lib/sqlalchemy/sql/naming.py
test/sql/test_metadata.py

index 2a8c24f91ef0bb0e06d4098fde6f20d0f65e132c..20a0b656d1310b75565ae247ee83e5e757d518c5 100644 (file)
 .. changelog::
     :version: 0.9.4
 
+    .. change::
+        :tags: bug, sql
+
+        :paramref:`.MetaData.naming_convention` feature will now also
+        apply to :class:`.CheckConstraint` objects that are associated
+        directly with a :class:`.Column` instead of just on the
+        :class:`.Table`.
+
     .. change::
         :tags: bug, sql
         :tickets: 2991
index bbb8431211ea74092acbf33e3dacb2b2db458c2f..3ba7f510599371db0b451a8de91c515ca36c17c6 100644 (file)
@@ -10,7 +10,7 @@
 """
 
 from .schema import Constraint, ForeignKeyConstraint, PrimaryKeyConstraint, \
-                UniqueConstraint, CheckConstraint, Index, Table
+                UniqueConstraint, CheckConstraint, Index, Table, Column
 from .. import event, events
 from .. import exc
 from .elements import _truncated_label
@@ -107,7 +107,14 @@ def _get_convention(dict_, key):
 @event.listens_for(Constraint, "after_parent_attach")
 @event.listens_for(Index, "after_parent_attach")
 def _constraint_name(const, table):
-    if isinstance(table, Table):
+    if isinstance(table, Column):
+        # for column-attached constraint, set another event
+        # to link the column attached to the table as this constraint
+        # associated with the table.
+        event.listen(table, "after_parent_attach",
+                    lambda col, table: _constraint_name(const, table)
+                )
+    elif isinstance(table, Table):
         metadata = table.metadata
         convention = _get_convention(metadata.naming_convention, type(const))
         if convention is not None:
index fd166bc17a5c2e743bea596a65a2b0000a49631a..978f4f1f4e5f0c72d5dd5a8e521309f793c7466b 100644 (file)
@@ -2679,6 +2679,23 @@ class NamingConventionTest(fixtures.TestBase):
             CheckConstraint, u1.c.data == 'x'
         )
 
+    def test_column_attached_ck_name(self):
+        m = MetaData(naming_convention={
+                        "ck": "ck_%(table_name)s_%(constraint_name)s"
+                    })
+        ck = CheckConstraint('x > 5', name='x1')
+        Table('t', m, Column('x', ck))
+        eq_(ck.name, "ck_t_x1")
+
+    def test_table_attached_ck_name(self):
+        m = MetaData(naming_convention={
+                        "ck": "ck_%(table_name)s_%(constraint_name)s"
+                    })
+        ck = CheckConstraint('x > 5', name='x1')
+        Table('t', m, Column('x', Integer), ck)
+        eq_(ck.name, "ck_t_x1")
+
+
     def test_fk_name_schema(self):
         u1 = self._fixture(naming_convention={
                 "fk": "fk_%(table_name)s_%(column_0_name)s_"