from ..util import HasMemoized_ro_memoized_attribute
from ..util import TypingOnly
from ..util.typing import Literal
+from ..util.typing import ParamSpec
from ..util.typing import Self
from ..util.typing import TupleAny
from ..util.typing import Unpack
_alt_names: Sequence[str] = ()
@overload
- def self_group(
- self: ColumnElement[_T], against: Optional[OperatorType] = None
- ) -> ColumnElement[_T]: ...
+ def self_group(self, against: None = None) -> ColumnElement[_T]: ...
@overload
def self_group(
- self: ColumnElement[Any], against: Optional[OperatorType] = None
+ self, against: Optional[OperatorType] = None
) -> ColumnElement[Any]: ...
def self_group(
# be using this method.
return self.type.comparator_factory(self) # type: ignore
- def self_group(self, against=None):
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Union[Self, Grouping[Any]]:
if against is operators.in_op:
return Grouping(self)
else:
def _from_objects(self) -> List[FromClause]:
return list(itertools.chain(*[c._from_objects for c in self.clauses]))
- def self_group(self, against=None):
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Union[Self, Grouping[Any]]:
if self.group and operators.is_precedent(self.operator, against):
return Grouping(self)
else:
def is_comparison(self):
return operators.is_comparison(self.operator)
- def self_group(self, against=None):
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Union[Self, Grouping[_T]]:
if (
self.group
and operators.is_precedent(self.operator, against)
def _select_iterable(self) -> _SelectIterable:
return (self,)
- def self_group(self, against=None):
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Union[Self, Grouping[bool]]:
if not self.clauses:
return self
else:
]
)
- def self_group(self, against=None):
+ def self_group(self, against: Optional[OperatorType] = None) -> Self:
# Tuple is parenthesized by definition.
return self
def wrapped_column_expression(self):
return self.clause
- def self_group(self, against=None):
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> TypeCoerce[_T]:
grouped = self.clause.self_group(against=against)
if grouped is not self.clause:
return TypeCoerce(grouped, self.type)
else:
return ClauseElement._negate(self)
- def self_group(self, against=None):
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Union[Self, Grouping[_T]]:
if self.operator and operators.is_precedent(self.operator, against):
return Grouping(self)
else:
def wrapped_column_expression(self):
return self.element
- def self_group(self, against=None):
+ def self_group(self, against: Optional[OperatorType] = None) -> Self:
return self
def _negate(self):
)
self.type = type_api.NULLTYPE
- def self_group(self, against=None):
- assert against is operator.getitem
+ def self_group(self, against: Optional[OperatorType] = None) -> Self:
+ assert against is operator.getitem # type: ignore[comparison-overlap]
return self
element: ClauseElement
- def self_group(self, against=None):
+ def self_group(self, against: Optional[OperatorType] = None) -> Self:
return self
def _ungroup(self):
self.element = state["element"]
self.type = state["type"]
+ if TYPE_CHECKING:
+
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Self: ...
+
class _OverrideBinds(Grouping[_T]):
"""used by cache_key->_apply_params_to_element to allow compilation /
return c.key, c
+_PS = ParamSpec("_PS")
+
+
class Label(roles.LabeledColumnExprRole[_T], NamedColumn[_T]):
"""Represents a column label (AS).
def element(self) -> ColumnElement[_T]:
return self._element.self_group(against=operators.as_)
- def self_group(self, against=None):
+ def self_group(self, against: Optional[OperatorType] = None) -> Label[_T]:
return self._apply_to_inner(self._element.self_group, against=against)
def _negate(self):
return self._apply_to_inner(self._element._negate)
- def _apply_to_inner(self, fn, *arg, **kw):
+ def _apply_to_inner(
+ self,
+ fn: Callable[_PS, ColumnElement[_T]],
+ *arg: _PS.args,
+ **kw: _PS.kwargs,
+ ) -> Label[_T]:
sub_element = fn(*arg, **kw)
if sub_element is not self._element:
return Label(self.name, sub_element, type_=self.type)
def self_group(
self, against: Optional[OperatorType] = None
) -> FromGrouping:
- ...
return FromGrouping(self)
@util.preload_module("sqlalchemy.sql.util")
def __setstate__(self, state: Dict[str, FromClause]) -> None:
self.element = state["element"]
+ if TYPE_CHECKING:
+
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Self: ...
+
class NamedFromGrouping(FromGrouping, NamedFromClause):
"""represent a grouping of a named FROM clause
inherit_cache = True
+ if TYPE_CHECKING:
+
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Self: ...
+
class TableClause(roles.DMLTableRole, Immutable, NamedFromClause):
"""Represents a minimal "table" construct.
def __clause_element__(self) -> ScalarValues:
return self
+ if TYPE_CHECKING:
+
+ def self_group(
+ self, against: Optional[OperatorType] = None
+ ) -> Self: ...
+
class SelectBase(
roles.SelectStatementRole,
return self.element
def self_group(self, against: Optional[OperatorType] = None) -> Self:
- ...
return self
if TYPE_CHECKING:
def self_group(
self, against: Optional[OperatorType] = None
) -> Union[SelectStatementGrouping[Self], Self]:
- ...
"""Return a 'grouping' construct as per the
:class:`_expression.ClauseElement` specification.
)
return self
- @overload
- def self_group(
- self: ScalarSelect[Any], against: Optional[OperatorType] = None
- ) -> ScalarSelect[Any]: ...
-
- @overload
- def self_group(
- self: ColumnElement[Any], against: Optional[OperatorType] = None
- ) -> ColumnElement[Any]: ...
-
- def self_group(
- self, against: Optional[OperatorType] = None
- ) -> ColumnElement[Any]:
+ def self_group(self, against: Optional[OperatorType] = None) -> Self:
return self
if TYPE_CHECKING: