diff options
Diffstat (limited to 'lib/sqlalchemy/sql/selectable.py')
-rw-r--r-- | lib/sqlalchemy/sql/selectable.py | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 24edc1cae..4f6e3795e 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -1534,10 +1534,17 @@ class TableValuedAlias(Alias): """ - tva = TableValuedAlias._construct(self, name=name) + tva = TableValuedAlias._construct( + self, + name=name, + table_value_type=self._tableval_type, + joins_implicitly=self.joins_implicitly, + ) + if self._render_derived: tva._render_derived = True tva._render_derived_w_types = self._render_derived_w_types + return tva def lateral(self, name=None): @@ -1598,7 +1605,15 @@ class TableValuedAlias(Alias): # python id() of the original which can cause name conflicts if # a new anon-name grabs the same identifier as the local anon-name # (just saw it happen on CI) - new_alias = TableValuedAlias._construct(self, name=name) + + # construct against original to prevent memory growth + # for repeated generations + new_alias = TableValuedAlias._construct( + self.element, + name=name, + table_value_type=self._tableval_type, + joins_implicitly=self.joins_implicitly, + ) new_alias._render_derived = True new_alias._render_derived_w_types = with_types return new_alias |