(
self,
*whens: Union[
typing_Tuple[_ColumnExpressionArgument[bool], Any],
Mapping[Any, Any],
],
value: Optional[Any] = None,
else_: Optional[Any] = None,
)
| 3620 | value: Optional[ColumnElement[Any]] |
| 3621 | |
| 3622 | def __init__( |
| 3623 | self, |
| 3624 | *whens: Union[ |
| 3625 | typing_Tuple[_ColumnExpressionArgument[bool], Any], |
| 3626 | Mapping[Any, Any], |
| 3627 | ], |
| 3628 | value: Optional[Any] = None, |
| 3629 | else_: Optional[Any] = None, |
| 3630 | ): |
| 3631 | new_whens: Iterable[Any] = coercions._expression_collection_was_a_list( |
| 3632 | "whens", "case", whens |
| 3633 | ) |
| 3634 | try: |
| 3635 | new_whens = util.dictlike_iteritems(new_whens) |
| 3636 | except TypeError: |
| 3637 | pass |
| 3638 | |
| 3639 | self.whens = [ |
| 3640 | ( |
| 3641 | coercions.expect( |
| 3642 | roles.ExpressionElementRole, |
| 3643 | c, |
| 3644 | apply_propagate_attrs=self, |
| 3645 | ).self_group(), |
| 3646 | coercions.expect(roles.ExpressionElementRole, r), |
| 3647 | ) |
| 3648 | for (c, r) in new_whens |
| 3649 | ] |
| 3650 | |
| 3651 | if value is None: |
| 3652 | self.value = None |
| 3653 | else: |
| 3654 | self.value = coercions.expect(roles.ExpressionElementRole, value) |
| 3655 | |
| 3656 | if else_ is not None: |
| 3657 | self.else_ = coercions.expect(roles.ExpressionElementRole, else_) |
| 3658 | else: |
| 3659 | self.else_ = None |
| 3660 | |
| 3661 | type_ = next( |
| 3662 | ( |
| 3663 | then.type |
| 3664 | # Iterate `whens` in reverse to match previous behaviour |
| 3665 | # where type of final element took priority |
| 3666 | for *_, then in reversed(self.whens) |
| 3667 | if not then.type._isnull |
| 3668 | ), |
| 3669 | self.else_.type if self.else_ is not None else type_api.NULLTYPE, |
| 3670 | ) |
| 3671 | self.type = cast(_T, type_) |
| 3672 | |
| 3673 | @util.ro_non_memoized_property |
| 3674 | def _from_objects(self) -> List[FromClause]: |
no test coverage detected