From d65c25bcc9f6fcfb420d60332e6aba25c0995562 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 27 Mar 2009 21:41:36 +0000 Subject: [PATCH] - Fixed __repr__() and other _get_colspec() methods on ForeignKey constructed from __clause_element__() style construct (i.e. declarative columns). [ticket:1353] --- CHANGES | 6 ++++++ lib/sqlalchemy/schema.py | 7 ++++++- test/ext/declarative.py | 2 ++ 3 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGES b/CHANGES index ba3bf243d5..2ef7414b24 100644 --- a/CHANGES +++ b/CHANGES @@ -13,11 +13,17 @@ CHANGES Set collection is now compatible with merge(), fixes [ticket:1352]. +- sql + - Fixed __repr__() and other _get_colspec() methods on + ForeignKey constructed from __clause_element__() style + construct (i.e. declarative columns). [ticket:1353] + - mssql - Corrected problem with information schema not working with a binary collation based database. Cleaned up information schema since it is only used by mssql now. [ticket:1343] +>>>>>>> .r5862 0.5.3 ===== - orm diff --git a/lib/sqlalchemy/schema.py b/lib/sqlalchemy/schema.py index c4f9a28956..fd99d2de70 100644 --- a/lib/sqlalchemy/schema.py +++ b/lib/sqlalchemy/schema.py @@ -842,8 +842,13 @@ class ForeignKey(SchemaItem): return schema + "." + self.column.table.name + "." + self.column.key elif isinstance(self._colspec, basestring): return self._colspec + elif hasattr(self._colspec, '__clause_element__'): + _column = self._colspec.__clause_element__() else: - return "%s.%s" % (self._colspec.table.fullname, self._colspec.key) + _column = self._colspec + + return "%s.%s" % (_column.table.fullname, _column.key) + target_fullname = property(_get_colspec) def references(self, table): diff --git a/test/ext/declarative.py b/test/ext/declarative.py index 738f374955..c6d4fe6814 100644 --- a/test/ext/declarative.py +++ b/test/ext/declarative.py @@ -675,6 +675,8 @@ class DeclarativeTest(DeclarativeTestBase): # longer the case sa.orm.compile_mappers() + eq_(str(Address.user_id.property.columns[0].foreign_keys[0]), "ForeignKey('users.id')") + Base.metadata.create_all() u1 = User(name='u1', addresses=[ Address(email='one'), -- 2.47.3