]> git.ipfire.org Git - thirdparty/sqlalchemy/alembic.git/commitdiff
fix rendering of foreign key constraint when using a metadata schema
authorAndreas Zeidler <az@zitc.de>
Wed, 4 Jun 2014 09:44:43 +0000 (11:44 +0200)
committerAndreas Zeidler <az@zitc.de>
Wed, 4 Jun 2014 09:44:43 +0000 (11:44 +0200)
alembic/autogenerate/render.py
tests/test_autogen_render.py

index ed9536c79642c614d3bc3c410547ca4996ba8eec..7f58f9660b8f46215d7eaba7ccd7b33eb962457c 100644 (file)
@@ -383,12 +383,13 @@ def _fk_colspec(fk, metadata_schema):
         # need to render schema breaking up tokens by hand, since the
         # ForeignKeyConstraint here may not actually have a remote
         # Table present
-        tokens = fk._colspec.split(".")
+        colspec = fk._get_colspec()
+        tokens = colspec.split(".")
         # no schema in the colspec, render it
         if len(tokens) == 2:
-            return "%s.%s" % (metadata_schema, fk._colspec)
+            return "%s.%s" % (metadata_schema, colspec)
         else:
-            return fk._colspec
+            return colspec
 
 def _render_foreign_key(constraint, autogen_context):
     rendered = _user_defined_render("foreign_key", constraint, autogen_context)
index a4f14bd2c674f0ae81c4e5562f52b41846a2ac71..ba8ba2d91a5c279e2826cf56c625a9d1280c8dcf 100644 (file)
@@ -567,6 +567,20 @@ render:primary_key\n)"""
                     "name='fk1', use_alter=True)"
         )
 
+    def test_render_fk_constraint_w_metadata_schema(self):
+        m = MetaData(schema="foo")
+        t1 = Table('t', m, Column('c', Integer))
+        t2 = Table('t2', m, Column('c_rem', Integer))
+
+        fk = ForeignKeyConstraint([t1.c.c], [t2.c.c_rem], onupdate="CASCADE")
+        if not util.sqla_08:
+            t1.append_constraint(fk)
+
+        eq_ignore_whitespace(
+            re.sub(r"u'", "'", autogenerate.render._render_constraint(fk, self.autogen_context)),
+            "sa.ForeignKeyConstraint(['c'], ['foo.t2.c_rem'], onupdate='CASCADE')"
+        )
+
     def test_render_check_constraint_literal(self):
         eq_ignore_whitespace(
             autogenerate.render._render_check_constraint(