diff options
Diffstat (limited to 'lib/sqlalchemy/sql/_elements_constructors.py')
| -rw-r--r-- | lib/sqlalchemy/sql/_elements_constructors.py | 58 |
1 files changed, 33 insertions, 25 deletions
diff --git a/lib/sqlalchemy/sql/_elements_constructors.py b/lib/sqlalchemy/sql/_elements_constructors.py index aabd3871e..f647ae927 100644 --- a/lib/sqlalchemy/sql/_elements_constructors.py +++ b/lib/sqlalchemy/sql/_elements_constructors.py @@ -48,7 +48,7 @@ from ..util.typing import Literal if typing.TYPE_CHECKING: from . import sqltypes - from ._typing import _ColumnExpression + from ._typing import _ColumnExpressionArgument from ._typing import _TypeEngineArgument from .elements import BinaryExpression from .functions import FunctionElement @@ -58,7 +58,7 @@ if typing.TYPE_CHECKING: _T = TypeVar("_T") -def all_(expr: _ColumnExpression[_T]) -> CollectionAggregate[bool]: +def all_(expr: _ColumnExpressionArgument[_T]) -> CollectionAggregate[bool]: """Produce an ALL expression. For dialects such as that of PostgreSQL, this operator applies @@ -112,7 +112,7 @@ def all_(expr: _ColumnExpression[_T]) -> CollectionAggregate[bool]: return CollectionAggregate._create_all(expr) -def and_(*clauses: _ColumnExpression[bool]) -> BooleanClauseList: +def and_(*clauses: _ColumnExpressionArgument[bool]) -> ColumnElement[bool]: r"""Produce a conjunction of expressions joined by ``AND``. E.g.:: @@ -173,7 +173,7 @@ def and_(*clauses: _ColumnExpression[bool]) -> BooleanClauseList: return BooleanClauseList.and_(*clauses) -def any_(expr: _ColumnExpression[_T]) -> CollectionAggregate[bool]: +def any_(expr: _ColumnExpressionArgument[_T]) -> CollectionAggregate[bool]: """Produce an ANY expression. For dialects such as that of PostgreSQL, this operator applies @@ -227,7 +227,7 @@ def any_(expr: _ColumnExpression[_T]) -> CollectionAggregate[bool]: return CollectionAggregate._create_any(expr) -def asc(column: _ColumnExpression[_T]) -> UnaryExpression[_T]: +def asc(column: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]: """Produce an ascending ``ORDER BY`` clause element. e.g.:: @@ -266,7 +266,7 @@ def asc(column: _ColumnExpression[_T]) -> UnaryExpression[_T]: def collate( - expression: _ColumnExpression[str], collation: str + expression: _ColumnExpressionArgument[str], collation: str ) -> BinaryExpression[str]: """Return the clause ``expression COLLATE collation``. @@ -289,7 +289,7 @@ def collate( def between( - expr: _ColumnExpression[_T], + expr: _ColumnExpressionArgument[_T], lower_bound: Any, upper_bound: Any, symmetric: bool = False, @@ -364,17 +364,19 @@ def outparam( return BindParameter(key, None, type_=type_, unique=False, isoutparam=True) +# mypy insists that BinaryExpression and _HasClauseElement protocol overlap. +# they do not. at all. bug in mypy? @overload -def not_(clause: BinaryExpression[_T]) -> BinaryExpression[_T]: +def not_(clause: BinaryExpression[_T]) -> BinaryExpression[_T]: # type: ignore ... @overload -def not_(clause: _ColumnExpression[_T]) -> ColumnElement[_T]: +def not_(clause: _ColumnExpressionArgument[_T]) -> ColumnElement[_T]: ... -def not_(clause: _ColumnExpression[_T]) -> ColumnElement[_T]: +def not_(clause: _ColumnExpressionArgument[_T]) -> ColumnElement[_T]: """Return a negation of the given clause, i.e. ``NOT(clause)``. The ``~`` operator is also overloaded on all @@ -646,7 +648,7 @@ def bindparam( def case( *whens: Union[ - typing_Tuple[_ColumnExpression[bool], Any], Mapping[Any, Any] + typing_Tuple[_ColumnExpressionArgument[bool], Any], Mapping[Any, Any] ], value: Optional[Any] = None, else_: Optional[Any] = None, @@ -775,7 +777,7 @@ def case( def cast( - expression: _ColumnExpression[Any], + expression: _ColumnExpressionArgument[Any], type_: _TypeEngineArgument[_T], ) -> Cast[_T]: r"""Produce a ``CAST`` expression. @@ -932,7 +934,7 @@ def column( return ColumnClause(text, type_, is_literal, _selectable) -def desc(column: _ColumnExpression[_T]) -> UnaryExpression[_T]: +def desc(column: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]: """Produce a descending ``ORDER BY`` clause element. e.g.:: @@ -971,7 +973,7 @@ def desc(column: _ColumnExpression[_T]) -> UnaryExpression[_T]: return UnaryExpression._create_desc(column) -def distinct(expr: _ColumnExpression[_T]) -> UnaryExpression[_T]: +def distinct(expr: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]: """Produce an column-expression-level unary ``DISTINCT`` clause. This applies the ``DISTINCT`` keyword to an individual column @@ -1010,7 +1012,7 @@ def distinct(expr: _ColumnExpression[_T]) -> UnaryExpression[_T]: return UnaryExpression._create_distinct(expr) -def extract(field: str, expr: _ColumnExpression[Any]) -> Extract: +def extract(field: str, expr: _ColumnExpressionArgument[Any]) -> Extract: """Return a :class:`.Extract` construct. This is typically available as :func:`.extract` @@ -1090,7 +1092,7 @@ def false() -> False_: def funcfilter( - func: FunctionElement[_T], *criterion: _ColumnExpression[bool] + func: FunctionElement[_T], *criterion: _ColumnExpressionArgument[bool] ) -> FunctionFilter[_T]: """Produce a :class:`.FunctionFilter` object against a function. @@ -1122,7 +1124,7 @@ def funcfilter( def label( name: str, - element: _ColumnExpression[_T], + element: _ColumnExpressionArgument[_T], type_: Optional[_TypeEngineArgument[_T]] = None, ) -> "Label[_T]": """Return a :class:`Label` object for the @@ -1149,7 +1151,7 @@ def null() -> Null: return Null._instance() -def nulls_first(column: _ColumnExpression[_T]) -> UnaryExpression[_T]: +def nulls_first(column: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]: """Produce the ``NULLS FIRST`` modifier for an ``ORDER BY`` expression. :func:`.nulls_first` is intended to modify the expression produced @@ -1193,7 +1195,7 @@ def nulls_first(column: _ColumnExpression[_T]) -> UnaryExpression[_T]: return UnaryExpression._create_nulls_first(column) -def nulls_last(column: _ColumnExpression[_T]) -> UnaryExpression[_T]: +def nulls_last(column: _ColumnExpressionArgument[_T]) -> UnaryExpression[_T]: """Produce the ``NULLS LAST`` modifier for an ``ORDER BY`` expression. :func:`.nulls_last` is intended to modify the expression produced @@ -1237,7 +1239,7 @@ def nulls_last(column: _ColumnExpression[_T]) -> UnaryExpression[_T]: return UnaryExpression._create_nulls_last(column) -def or_(*clauses: _ColumnExpression[bool]) -> BooleanClauseList: +def or_(*clauses: _ColumnExpressionArgument[bool]) -> ColumnElement[bool]: """Produce a conjunction of expressions joined by ``OR``. E.g.:: @@ -1291,10 +1293,16 @@ def or_(*clauses: _ColumnExpression[bool]) -> BooleanClauseList: def over( element: FunctionElement[_T], partition_by: Optional[ - Union[Iterable[_ColumnExpression[Any]], _ColumnExpression[Any]] + Union[ + Iterable[_ColumnExpressionArgument[Any]], + _ColumnExpressionArgument[Any], + ] ] = None, order_by: Optional[ - Union[Iterable[_ColumnExpression[Any]], _ColumnExpression[Any]] + Union[ + Iterable[_ColumnExpressionArgument[Any]], + _ColumnExpressionArgument[Any], + ] ] = None, range_: Optional[typing_Tuple[Optional[int], Optional[int]]] = None, rows: Optional[typing_Tuple[Optional[int], Optional[int]]] = None, @@ -1502,7 +1510,7 @@ def true() -> True_: def tuple_( - *clauses: _ColumnExpression[Any], + *clauses: _ColumnExpressionArgument[Any], types: Optional[Sequence[_TypeEngineArgument[Any]]] = None, ) -> Tuple: """Return a :class:`.Tuple`. @@ -1531,7 +1539,7 @@ def tuple_( def type_coerce( - expression: _ColumnExpression[Any], + expression: _ColumnExpressionArgument[Any], type_: _TypeEngineArgument[_T], ) -> TypeCoerce[_T]: r"""Associate a SQL expression with a particular type, without rendering @@ -1612,7 +1620,7 @@ def type_coerce( def within_group( - element: FunctionElement[_T], *order_by: _ColumnExpression[Any] + element: FunctionElement[_T], *order_by: _ColumnExpressionArgument[Any] ) -> WithinGroup[_T]: r"""Produce a :class:`.WithinGroup` object against a function. |
