summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Caselli <cfederico87@gmail.com>2021-10-01 20:18:34 +0200
committerFederico Caselli <cfederico87@gmail.com>2021-10-01 20:18:34 +0200
commit8c67fac9033e75d144b51f1f365097fdbf17c497 (patch)
treeea1cda629cbde44822298bd37c6f3f44d1492190
parentab6605aee23ed2c70c38bd5b9f50a6395ac3f2e1 (diff)
downloadsqlalchemy-8c67fac9033e75d144b51f1f365097fdbf17c497.tar.gz
Account for `schema` in `table()` `fullname` attribute.
Fixes: #7061 Change-Id: I715da89591c03d40d77734473bd42b34b9c4e1dc
-rw-r--r--doc/build/changelog/unreleased_14/7061.rst5
-rw-r--r--lib/sqlalchemy/sql/selectable.py6
-rw-r--r--test/sql/test_selectable.py8
3 files changed, 18 insertions, 1 deletions
diff --git a/doc/build/changelog/unreleased_14/7061.rst b/doc/build/changelog/unreleased_14/7061.rst
new file mode 100644
index 000000000..a7a184b85
--- /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 970c7a0c5..8f8e6b2a7 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 b76873490..2157b5c71 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):