| 2567 | ) |
| 2568 | |
| 2569 | def visit_textual_label_reference( |
| 2570 | self, element, within_columns_clause=False, **kwargs |
| 2571 | ): |
| 2572 | if not self.stack: |
| 2573 | # compiling the element outside of the context of a SELECT |
| 2574 | return self.process(element._text_clause) |
| 2575 | |
| 2576 | try: |
| 2577 | compile_state = cast( |
| 2578 | "Union[SelectState, CompoundSelectState]", |
| 2579 | self.stack[-1]["compile_state"], |
| 2580 | ) |
| 2581 | except KeyError as ke: |
| 2582 | coercions._no_text_coercion( |
| 2583 | element.element, |
| 2584 | extra=( |
| 2585 | "Can't resolve label reference for ORDER BY / " |
| 2586 | "GROUP BY / DISTINCT etc." |
| 2587 | ), |
| 2588 | exc_cls=exc.CompileError, |
| 2589 | err=ke, |
| 2590 | ) |
| 2591 | |
| 2592 | with_cols, only_froms, only_cols = compile_state._label_resolve_dict |
| 2593 | try: |
| 2594 | if within_columns_clause: |
| 2595 | col = only_froms[element.element] |
| 2596 | else: |
| 2597 | col = with_cols[element.element] |
| 2598 | except KeyError as err: |
| 2599 | coercions._no_text_coercion( |
| 2600 | element.element, |
| 2601 | extra=( |
| 2602 | "Can't resolve label reference for ORDER BY / " |
| 2603 | "GROUP BY / DISTINCT etc." |
| 2604 | ), |
| 2605 | exc_cls=exc.CompileError, |
| 2606 | err=err, |
| 2607 | ) |
| 2608 | else: |
| 2609 | kwargs["render_label_as_label"] = col |
| 2610 | return self.process( |
| 2611 | col, within_columns_clause=within_columns_clause, **kwargs |
| 2612 | ) |
| 2613 | |
| 2614 | def visit_label( |
| 2615 | self, |