@HasMemoized.memoized_attribute
def _all_selected_columns(self):
meth = SelectState.get_plugin_class(self).all_selected_columns
- return meth(self)
+ return list(meth(self))
def _exported_columns_iterator(self):
meth = SelectState.get_plugin_class(self).exported_columns_iterator
"""
cols = self._all_selected_columns
-
# when use_labels is on:
# in all cases == if we see the same label name, use _label_anon_label
# for subsequent occurrences of that label
"WHERE users.name = :name_1",
)
+ def test_c_accessor_not_mutated_subq(self):
+ """test #6394, ensure all_selected_columns is generated each time"""
+ User = self.classes.User
+
+ s1 = select(User.id)
+
+ eq_(s1.subquery().c.keys(), ["id"])
+ eq_(s1.subquery().c.keys(), ["id"])
+
+ def test_scalar_subquery_from_subq_same_source(self):
+ """test #6394, ensure all_selected_columns is generated each time"""
+ User = self.classes.User
+
+ s1 = select(User.id)
+
+ for i in range(2):
+ stmt = s1.subquery().select().scalar_subquery()
+ self.assert_compile(
+ stmt,
+ "(SELECT anon_1.id FROM "
+ "(SELECT users.id AS id FROM users) AS anon_1)",
+ )
+
def test_froms_single_table(self):
User, Address = self.classes("User", "Address")
"table1.col3, table1.colx FROM table1) AS anon_1",
)
+ def test_scalar_subquery_from_subq_same_source(self):
+ s1 = select(table1.c.col1)
+
+ for i in range(2):
+ stmt = s1.subquery().select().scalar_subquery()
+ self.assert_compile(
+ stmt,
+ "(SELECT anon_1.col1 FROM "
+ "(SELECT table1.col1 AS col1 FROM table1) AS anon_1)",
+ )
+
def test_type_coerce_preserve_subq(self):
class MyType(TypeDecorator):
impl = Integer