(
self, taf, compound_index=None, asfrom=False, **kw
)
| 2720 | ) |
| 2721 | |
| 2722 | def visit_textual_select( |
| 2723 | self, taf, compound_index=None, asfrom=False, **kw |
| 2724 | ): |
| 2725 | toplevel = not self.stack |
| 2726 | entry = self._default_stack_entry if toplevel else self.stack[-1] |
| 2727 | |
| 2728 | new_entry: _CompilerStackEntry = { |
| 2729 | "correlate_froms": set(), |
| 2730 | "asfrom_froms": set(), |
| 2731 | "selectable": taf, |
| 2732 | } |
| 2733 | self.stack.append(new_entry) |
| 2734 | |
| 2735 | if taf._independent_ctes: |
| 2736 | self._dispatch_independent_ctes(taf, kw) |
| 2737 | |
| 2738 | populate_result_map = ( |
| 2739 | toplevel |
| 2740 | or ( |
| 2741 | compound_index == 0 |
| 2742 | and entry.get("need_result_map_for_compound", False) |
| 2743 | ) |
| 2744 | or entry.get("need_result_map_for_nested", False) |
| 2745 | ) |
| 2746 | |
| 2747 | if populate_result_map: |
| 2748 | self._ordered_columns = self._textual_ordered_columns = ( |
| 2749 | taf.positional |
| 2750 | ) |
| 2751 | |
| 2752 | # enable looser result column matching when the SQL text links to |
| 2753 | # Column objects by name only |
| 2754 | self._loose_column_name_matching = not taf.positional and bool( |
| 2755 | taf.column_args |
| 2756 | ) |
| 2757 | |
| 2758 | for c in taf.column_args: |
| 2759 | self.process( |
| 2760 | c, |
| 2761 | within_columns_clause=True, |
| 2762 | add_to_result_map=self._add_to_result_map, |
| 2763 | ) |
| 2764 | |
| 2765 | text = self.process(taf.element, **kw) |
| 2766 | if self.ctes: |
| 2767 | nesting_level = len(self.stack) if not toplevel else None |
| 2768 | text = self._render_cte_clause(nesting_level=nesting_level) + text |
| 2769 | |
| 2770 | self.stack.pop(-1) |
| 2771 | |
| 2772 | return text |
| 2773 | |
| 2774 | def visit_null(self, expr: Null, **kw: Any) -> str: |
| 2775 | return "NULL" |
nothing calls this directly
no test coverage detected