summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2021-07-16 10:14:56 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2021-07-16 10:14:56 -0400
commitb932b04b65f0851cbd63e89ee6067fd0a8d30a1b (patch)
tree6ca68294288256c6040628e0a4eb734dfafdd8f3
parent03794d40f31cd1c8501c528eda6c351559c1f739 (diff)
downloadsqlalchemy-b932b04b65f0851cbd63e89ee6067fd0a8d30a1b.tar.gz
reset key/name when TableValuedColumn is adapted
Fixed issue in new :meth:`_schema.Table.table_valued` method where the resulting :class:`_sql.TableValuedColumn` construct would not respond correctly to alias adaptation as is used throughout the ORM, such as for eager loading, polymorphic loading, etc. Fixes: #6775 Change-Id: I77cec4b6e1b1003f2b6be242b54ada8e4a435250
-rw-r--r--doc/build/changelog/unreleased_14/6775.rst9
-rw-r--r--lib/sqlalchemy/sql/elements.py4
-rw-r--r--test/sql/test_external_traversal.py15
3 files changed, 28 insertions, 0 deletions
diff --git a/doc/build/changelog/unreleased_14/6775.rst b/doc/build/changelog/unreleased_14/6775.rst
new file mode 100644
index 000000000..e7c9a5351
--- /dev/null
+++ b/doc/build/changelog/unreleased_14/6775.rst
@@ -0,0 +1,9 @@
+.. change::
+ :tags: bug, orm
+ :tickets: 6775
+
+ Fixed issue in new :meth:`_schema.Table.table_valued` method where the
+ resulting :class:`_sql.TableValuedColumn` construct would not respond
+ correctly to alias adaptation as is used throughout the ORM, such as for
+ eager loading, polymorphic loading, etc.
+
diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py
index f95fa143e..e253ddb93 100644
--- a/lib/sqlalchemy/sql/elements.py
+++ b/lib/sqlalchemy/sql/elements.py
@@ -4931,6 +4931,10 @@ class TableValuedColumn(NamedColumn):
self.key = self.name = scalar_alias.name
self.type = type_
+ def _copy_internals(self, clone=_clone, **kw):
+ self.scalar_alias = clone(self.scalar_alias, **kw)
+ self.key = self.name = self.scalar_alias.name
+
@property
def _from_objects(self):
return [self.scalar_alias]
diff --git a/test/sql/test_external_traversal.py b/test/sql/test_external_traversal.py
index b0241da59..764bcd6d4 100644
--- a/test/sql/test_external_traversal.py
+++ b/test/sql/test_external_traversal.py
@@ -2231,6 +2231,21 @@ class ClauseAdapterTest(fixtures.TestBase, AssertsCompiledSQL):
"FROM table1 AS table1_1",
)
+ def test_table_valued_column(self):
+ """test #6775"""
+ stmt = select(func.some_json_func(t1.table_valued()))
+
+ self.assert_compile(
+ stmt,
+ "SELECT some_json_func(table1) AS some_json_func_1 FROM table1",
+ )
+
+ self.assert_compile(
+ sql_util.ClauseAdapter(t1.alias()).traverse(stmt),
+ "SELECT some_json_func(table1_1) AS some_json_func_1 "
+ "FROM table1 AS table1_1",
+ )
+
def test_recursive(self):
metadata = MetaData()
a = Table("a", metadata, Column("id", Integer, primary_key=True))