From: wouter bolsterlee Date: Thu, 4 Apr 2024 18:15:07 +0000 (-0400) Subject: typing: annotate Exists.select() to return Select[bool] X-Git-Tag: rel_2_0_30~27^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=725d52d1df205635fd0a7cd622e3d19ec8f09b88;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git typing: annotate Exists.select() to return Select[bool] 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 (cherry picked from commit ceb9e021cd5df3aa7f3beed2c9564d5f182bf8b6) --- diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 65978f6646..5a7663628a 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -6648,7 +6648,7 @@ class Exists(UnaryExpression[bool]): assert isinstance(return_value, SelectStatementGrouping) return return_value - def select(self) -> Select[Any]: + def select(self) -> Select[Tuple[bool]]: r"""Return a SELECT of this :class:`_expression.Exists`. e.g.:: diff --git a/test/typing/plain_files/sql/common_sql_element.py b/test/typing/plain_files/sql/common_sql_element.py index bc9faca96b..fb0add31d8 100644 --- a/test/typing/plain_files/sql/common_sql_element.py +++ b/test/typing/plain_files/sql/common_sql_element.py @@ -98,6 +98,11 @@ stmt2 = ( # EXPECTED_TYPE: Select[Tuple[int]] reveal_type(stmt2) +stmt3 = select(User.id).exists().select() + +# EXPECTED_TYPE: Select[Tuple[bool]] +reveal_type(stmt3) + receives_str_col_expr(User.email) receives_str_col_expr(User.email + "some expr")