diff options
| author | Federico Caselli <cfederico87@gmail.com> | 2022-12-03 17:39:55 +0100 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2022-12-03 13:04:58 -0500 |
| commit | c1b7600d9ec6cb29eb48455726799a6779704240 (patch) | |
| tree | 263ba448ef4c72c9d7c9d0f30d328525b59bc93a /lib/sqlalchemy | |
| parent | 96db7cdd53ee9004be66545989b4ac5632bb7ccf (diff) | |
| download | sqlalchemy-c1b7600d9ec6cb29eb48455726799a6779704240.tar.gz | |
Order_by and group_by accept labels
Improve typing to accept labels in ordey_by mand group_by.
Change-Id: I33e5d6f64633d39a220108d412ef84d6478b25e6
Diffstat (limited to 'lib/sqlalchemy')
| -rw-r--r-- | lib/sqlalchemy/orm/query.py | 11 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/_elements_constructors.py | 9 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/_typing.py | 2 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/elements.py | 5 | ||||
| -rw-r--r-- | lib/sqlalchemy/sql/selectable.py | 11 |
5 files changed, 26 insertions, 12 deletions
diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 0d8d21df0..d51c8bf9a 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -111,6 +111,7 @@ if TYPE_CHECKING: from ..engine.result import FrozenResult from ..engine.result import ScalarResult from ..sql._typing import _ColumnExpressionArgument + from ..sql._typing import _ColumnExpressionOrStrLabelArgument from ..sql._typing import _ColumnsClauseArgument from ..sql._typing import _DMLColumnArgument from ..sql._typing import _JoinTargetArgument @@ -1952,9 +1953,10 @@ class Query( def order_by( self: SelfQuery, __first: Union[ - Literal[None, False, _NoArg.NO_ARG], _ColumnExpressionArgument[Any] + Literal[None, False, _NoArg.NO_ARG], + _ColumnExpressionOrStrLabelArgument[Any], ] = _NoArg.NO_ARG, - *clauses: _ColumnExpressionArgument[Any], + *clauses: _ColumnExpressionOrStrLabelArgument[Any], ) -> SelfQuery: """Apply one or more ORDER BY criteria to the query and return the newly resulting :class:`_query.Query`. @@ -2000,9 +2002,10 @@ class Query( def group_by( self: SelfQuery, __first: Union[ - Literal[None, False, _NoArg.NO_ARG], _ColumnExpressionArgument[Any] + Literal[None, False, _NoArg.NO_ARG], + _ColumnExpressionOrStrLabelArgument[Any], ] = _NoArg.NO_ARG, - *clauses: _ColumnExpressionArgument[Any], + *clauses: _ColumnExpressionOrStrLabelArgument[Any], ) -> SelfQuery: """Apply one or more GROUP BY criterion to the query and return the newly resulting :class:`_query.Query`. diff --git a/lib/sqlalchemy/sql/_elements_constructors.py b/lib/sqlalchemy/sql/_elements_constructors.py index 7c5281bee..2e5e399f9 100644 --- a/lib/sqlalchemy/sql/_elements_constructors.py +++ b/lib/sqlalchemy/sql/_elements_constructors.py @@ -49,6 +49,7 @@ from ..util.typing import Literal if typing.TYPE_CHECKING: from ._typing import _ColumnExpressionArgument from ._typing import _ColumnExpressionOrLiteralArgument + from ._typing import _ColumnExpressionOrStrLabelArgument from ._typing import _TypeEngineArgument from .elements import BinaryExpression from .selectable import FromClause @@ -226,7 +227,9 @@ def any_(expr: _ColumnExpressionArgument[_T]) -> CollectionAggregate[bool]: return CollectionAggregate._create_any(expr) -def asc(column: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]: +def asc( + column: _ColumnExpressionOrStrLabelArgument[_T], +) -> UnaryExpression[_T]: """Produce an ascending ``ORDER BY`` clause element. e.g.:: @@ -935,7 +938,9 @@ def column( return ColumnClause(text, type_, is_literal, _selectable) -def desc(column: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]: +def desc( + column: _ColumnExpressionOrStrLabelArgument[_T], +) -> UnaryExpression[_T]: """Produce a descending ``ORDER BY`` clause element. e.g.:: diff --git a/lib/sqlalchemy/sql/_typing.py b/lib/sqlalchemy/sql/_typing.py index 8a758e7c7..78e196efc 100644 --- a/lib/sqlalchemy/sql/_typing.py +++ b/lib/sqlalchemy/sql/_typing.py @@ -181,6 +181,8 @@ overall which brings in the TextClause object also. _ColumnExpressionOrLiteralArgument = Union[Any, _ColumnExpressionArgument[_T]] +_ColumnExpressionOrStrLabelArgument = Union[str, _ColumnExpressionArgument[_T]] + _InfoType = Dict[Any, Any] """the .info dictionary accepted and used throughout Core /ORM""" diff --git a/lib/sqlalchemy/sql/elements.py b/lib/sqlalchemy/sql/elements.py index eff8c9bc1..3896d4cbd 100644 --- a/lib/sqlalchemy/sql/elements.py +++ b/lib/sqlalchemy/sql/elements.py @@ -80,6 +80,7 @@ from ..util.typing import Literal if typing.TYPE_CHECKING: from ._typing import _ColumnExpressionArgument + from ._typing import _ColumnExpressionOrStrLabelArgument from ._typing import _InfoType from ._typing import _PropagateAttrsType from ._typing import _TypeEngineArgument @@ -3494,7 +3495,7 @@ class UnaryExpression(ColumnElement[_T]): @classmethod def _create_desc( - cls, column: _ColumnExpressionArgument[_T] + cls, column: _ColumnExpressionOrStrLabelArgument[_T] ) -> UnaryExpression[_T]: return UnaryExpression( coercions.expect(roles.ByOfRole, column), @@ -3505,7 +3506,7 @@ class UnaryExpression(ColumnElement[_T]): @classmethod def _create_asc( cls, - column: _ColumnExpressionArgument[_T], + column: _ColumnExpressionOrStrLabelArgument[_T], ) -> UnaryExpression[_T]: return UnaryExpression( coercions.expect(roles.ByOfRole, column), diff --git a/lib/sqlalchemy/sql/selectable.py b/lib/sqlalchemy/sql/selectable.py index 2dcc611fa..fd4157afd 100644 --- a/lib/sqlalchemy/sql/selectable.py +++ b/lib/sqlalchemy/sql/selectable.py @@ -106,6 +106,7 @@ _T = TypeVar("_T", bound=Any) if TYPE_CHECKING: from ._typing import _ColumnExpressionArgument + from ._typing import _ColumnExpressionOrStrLabelArgument from ._typing import _FromClauseArgument from ._typing import _JoinTargetArgument from ._typing import _MAYBE_ENTITY @@ -4146,9 +4147,10 @@ class GenerativeSelect(SelectBase, Generative): def order_by( self: SelfGenerativeSelect, __first: Union[ - Literal[None, _NoArg.NO_ARG], _ColumnExpressionArgument[Any] + Literal[None, _NoArg.NO_ARG], + _ColumnExpressionOrStrLabelArgument[Any], ] = _NoArg.NO_ARG, - *clauses: _ColumnExpressionArgument[Any], + *clauses: _ColumnExpressionOrStrLabelArgument[Any], ) -> SelfGenerativeSelect: r"""Return a new selectable with the given list of ORDER BY criteria applied. @@ -4190,9 +4192,10 @@ class GenerativeSelect(SelectBase, Generative): def group_by( self: SelfGenerativeSelect, __first: Union[ - Literal[None, _NoArg.NO_ARG], _ColumnExpressionArgument[Any] + Literal[None, _NoArg.NO_ARG], + _ColumnExpressionOrStrLabelArgument[Any], ] = _NoArg.NO_ARG, - *clauses: _ColumnExpressionArgument[Any], + *clauses: _ColumnExpressionOrStrLabelArgument[Any], ) -> SelfGenerativeSelect: r"""Return a new selectable with the given list of GROUP BY criterion applied. |
