self.func = func
self.filter(*criterion)
- def filter(self, *criterion):
+ def filter(self, *criterion: _ColumnExpressionArgument[bool]) -> Self:
"""Produce an additional FILTER against the function.
This method adds additional criteria to the initial criteria
rows=rows,
)
- def self_group(self, against=None):
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Union[Self, Grouping[_T]]:
if operators.is_precedent(operators.filter_op, against):
return Grouping(self)
else:
return self
- @util.memoized_property
- def type(self):
- return self.func.type
+ type: TypeEngine[_T]
+
+ if not TYPE_CHECKING:
+ # A001 is a false-positive here, type is a class member
+ @util.memoized_property
+ def type(self) -> TypeEngine[_T]: # noqa: A001
+ return self.func.type
@util.ro_non_memoized_property
def _from_objects(self) -> List[FromClause]:
from typing import Type
from typing import TYPE_CHECKING
from typing import TypeVar
+from typing import Union
from . import annotation
from . import coercions
if TYPE_CHECKING:
+ from ._typing import _ColumnExpressionArgument
from ._typing import _TypeEngineArgument
from ..engine.base import Connection
from ..engine.cursor import CursorResult
from ..engine.interfaces import _CoreMultiExecuteParams
from ..engine.interfaces import CoreExecuteOptionsParameter
+ from ..util.typing import Self
_T = TypeVar("_T", bound=Any)
"""
return WithinGroup(self, *order_by)
- def filter(self, *criterion):
+ @overload
+ def filter(self) -> Self:
+ ...
+
+ @overload
+ def filter(
+ self,
+ __criterion0: _ColumnExpressionArgument[bool],
+ *criterion: _ColumnExpressionArgument[bool],
+ ) -> FunctionFilter[_T]:
+ ...
+
+ def filter(
+ self, *criterion: _ColumnExpressionArgument[bool]
+ ) -> Union[Self, FunctionFilter[_T]]:
"""Produce a FILTER clause against this function.
Used against aggregate and window functions,
func.row_number().over(partition_by=[Foo.a.desc(), Foo.b.desc()])
func.row_number().over(order_by="a", partition_by=("a", "b"))
func.row_number().over(partition_by="a", order_by=("a", "b"))
+
+
+# EXPECTED_TYPE: Function[Any]
+reveal_type(func.row_number().filter())
+# EXPECTED_TYPE: FunctionFilter[Any]
+reveal_type(func.row_number().filter(Foo.a > 0))