--- /dev/null
+.. change::
+ :tags: bug, orm
+ :tickets: 6076
+
+ Fixed regression where the :meth:`_orm.Query.exists` method would fail to
+ create an expression if the entity list of the :class:`_orm.Query` were
+ an arbitrary SQL column expression.
+
import operator
import types
+from sqlalchemy.sql import visitors
from . import exc as orm_exc
from . import interfaces
from . import loading
elif "bundle" in ent._annotations:
return ent._annotations["bundle"]
else:
- return ent
+ # label, other SQL expression
+ for element in visitors.iterate(ent):
+ if "parententity" in element._annotations:
+ return element._annotations["parententity"]
+ else:
+ return None
def _only_full_mapper_zero(self, methname):
if (
") AS anon_1",
)
+ def test_exists_col_expression(self):
+ User = self.classes.User
+ sess = fixture_session()
+
+ q1 = sess.query(User.id)
+ self.assert_compile(
+ sess.query(q1.exists()),
+ "SELECT EXISTS (" "SELECT 1 FROM users" ") AS anon_1",
+ )
+
+ def test_exists_labeled_col_expression(self):
+ User = self.classes.User
+ sess = fixture_session()
+
+ q1 = sess.query(User.id.label("foo"))
+ self.assert_compile(
+ sess.query(q1.exists()),
+ "SELECT EXISTS (" "SELECT 1 FROM users" ") AS anon_1",
+ )
+
+ def test_exists_arbitrary_col_expression(self):
+ User = self.classes.User
+ sess = fixture_session()
+
+ q1 = sess.query(func.foo(User.id))
+ self.assert_compile(
+ sess.query(q1.exists()),
+ "SELECT EXISTS (" "SELECT 1 FROM users" ") AS anon_1",
+ )
+
def test_exists_col_warning(self):
User = self.classes.User
Address = self.classes.Address