Describe a list of clauses, separated by an operator. By default, is comma-separated, such as a column listing.
| 3003 | |
| 3004 | |
| 3005 | class ClauseList( |
| 3006 | roles.InElementRole, |
| 3007 | roles.OrderByRole, |
| 3008 | roles.ColumnsClauseRole, |
| 3009 | roles.DMLColumnRole, |
| 3010 | DQLDMLClauseElement, |
| 3011 | ): |
| 3012 | """Describe a list of clauses, separated by an operator. |
| 3013 | |
| 3014 | By default, is comma-separated, such as a column listing. |
| 3015 | |
| 3016 | """ |
| 3017 | |
| 3018 | __visit_name__ = "clauselist" |
| 3019 | |
| 3020 | # Used by ORM context.py to identify ClauseList objects in legacy |
| 3021 | # composite attribute queries (see test_query_cols_legacy test) |
| 3022 | _is_clause_list = True |
| 3023 | |
| 3024 | _traverse_internals: _TraverseInternalsType = [ |
| 3025 | ("clauses", InternalTraversal.dp_clauseelement_list), |
| 3026 | ("operator", InternalTraversal.dp_operator), |
| 3027 | ] |
| 3028 | |
| 3029 | clauses: List[ColumnElement[Any]] |
| 3030 | |
| 3031 | def __init__( |
| 3032 | self, |
| 3033 | *clauses: _ColumnExpressionArgument[Any], |
| 3034 | operator: OperatorType = operators.comma_op, |
| 3035 | group: bool = True, |
| 3036 | group_contents: bool = True, |
| 3037 | _literal_as_text_role: Type[roles.SQLRole] = roles.WhereHavingRole, |
| 3038 | ): |
| 3039 | self.operator = operator |
| 3040 | self.group = group |
| 3041 | self.group_contents = group_contents |
| 3042 | clauses_iterator: Iterable[_ColumnExpressionArgument[Any]] = clauses |
| 3043 | text_converter_role: Type[roles.SQLRole] = _literal_as_text_role |
| 3044 | self._text_converter_role = text_converter_role |
| 3045 | |
| 3046 | if self.group_contents: |
| 3047 | self.clauses = [ |
| 3048 | coercions.expect( |
| 3049 | text_converter_role, clause, apply_propagate_attrs=self |
| 3050 | ).self_group(against=self.operator) |
| 3051 | for clause in clauses_iterator |
| 3052 | ] |
| 3053 | else: |
| 3054 | self.clauses = [ |
| 3055 | coercions.expect( |
| 3056 | text_converter_role, clause, apply_propagate_attrs=self |
| 3057 | ) |
| 3058 | for clause in clauses_iterator |
| 3059 | ] |
| 3060 | self._is_implicitly_boolean = operators.is_boolean(self.operator) |
| 3061 | |
| 3062 | @classmethod |
no outgoing calls