]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
typing: annotate Exists.select() to return Select[bool]
authorwouter bolsterlee <wouter@bolsterl.ee>
Thu, 4 Apr 2024 18:15:07 +0000 (14:15 -0400)
committersqla-tester <sqla-tester@sqlalchemy.org>
Thu, 4 Apr 2024 18:15:07 +0000 (14:15 -0400)
Fixes: #11231
A query of the form:

``` sql
SELECT EXISTS (
    SELECT 1
    FROM ...
    WHERE ...
)
```

… returns a boolean.

Closes: #11233
Pull-request: https://github.com/sqlalchemy/sqlalchemy/pull/11233
Pull-request-sha: 1bec1cac731eb42e097948f84ae3d0ef133f8a9a

Change-Id: I407a3bd9ed21a180c6c3ff02250aa0a9fbe502d7

lib/sqlalchemy/sql/selectable.py
test/typing/plain_files/sql/common_sql_element.py

index 4ae60b77242bcf29bf40c0b73267a46e78a3dbd1..c28d4df0e4801864d333ed15c4edb8892416a58d 100644 (file)
@@ -6674,7 +6674,7 @@ class Exists(UnaryExpression[bool]):
         assert isinstance(return_value, SelectStatementGrouping)
         return return_value
 
-    def select(self) -> Select[Unpack[TupleAny]]:
+    def select(self) -> Select[bool]:
         r"""Return a SELECT of this :class:`_expression.Exists`.
 
         e.g.::
index 89c0c4d2efa5d5702039d814bfa5468903b9929f..7c8001a728209410202f139445228a61e094cc16 100644 (file)
@@ -98,6 +98,11 @@ stmt2 = (
 # EXPECTED_TYPE: Select[int]
 reveal_type(stmt2)
 
+stmt3 = select(User.id).exists().select()
+
+# EXPECTED_TYPE: Select[bool]
+reveal_type(stmt3)
+
 
 receives_str_col_expr(User.email)
 receives_str_col_expr(User.email + "some expr")