From 8c67fac9033e75d144b51f1f365097fdbf17c497 Mon Sep 17 00:00:00 2001 From: Federico Caselli Date: Fri, 1 Oct 2021 20:18:34 +0200 Subject: [PATCH] Account for `schema` in `table()` `fullname` attribute. Fixes: #7061 Change-Id: I715da89591c03d40d77734473bd42b34b9c4e1dc --- doc/build/changelog/unreleased_14/7061.rst | 5 +++++ lib/sqlalchemy/sql/selectable.py | 6 +++++- test/sql/test_selectable.py | 8 ++++++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 doc/build/changelog/unreleased_14/7061.rst diff --git a/doc/build/changelog/unreleased_14/7061.rst b/doc/build/changelog/unreleased_14/7061.rst new file mode 100644 index 0000000000..a7a184b85e --- /dev/null +++ b/doc/build/changelog/unreleased_14/7061.rst @@ -0,0 +1,5 @@ +.. change:: + :tags: bug, sql + :tickets: 7061 + + Account for ``schema`` in :func:`_sql.table` ``fullname`` attribute. diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 970c7a0c56..8f8e6b2a7e 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -2622,7 +2622,7 @@ class TableClause(roles.DMLTableRole, Immutable, FromClause): """ super(TableClause, self).__init__() - self.name = self.fullname = name + self.name = name self._columns = DedupeColumnCollection() self.primary_key = ColumnSet() self.foreign_keys = set() @@ -2632,6 +2632,10 @@ class TableClause(roles.DMLTableRole, Immutable, FromClause): schema = kw.pop("schema", None) if schema is not None: self.schema = schema + if self.schema is not None: + self.fullname = "%s.%s" % (self.schema, self.name) + else: + self.fullname = self.name if kw: raise exc.ArgumentError("Unsupported argument(s): %s" % list(kw)) diff --git a/test/sql/test_selectable.py b/test/sql/test_selectable.py index b768734904..2157b5c718 100644 --- a/test/sql/test_selectable.py +++ b/test/sql/test_selectable.py @@ -1469,6 +1469,14 @@ class SelectableTest( assert s3._whereclause.left.table is not s1 assert s3._whereclause.left.table in froms + def test_table_schema(self): + t = table("foo") + eq_(t.name, "foo") + eq_(t.fullname, "foo") + t = table("foo", schema="bar") + eq_(t.name, "foo") + eq_(t.fullname, "bar.foo") + class RefreshForNewColTest(fixtures.TestBase): def test_join_uninit(self): -- 2.47.3