| 2677 | return self.process(sql_element, **kw) |
| 2678 | |
| 2679 | def visit_column( |
| 2680 | self, |
| 2681 | column: ColumnClause[Any], |
| 2682 | add_to_result_map: Optional[_ResultMapAppender] = None, |
| 2683 | include_table: bool = True, |
| 2684 | result_map_targets: Tuple[Any, ...] = (), |
| 2685 | ambiguous_table_name_map: Optional[_AmbiguousTableNameMap] = None, |
| 2686 | **kwargs: Any, |
| 2687 | ) -> str: |
| 2688 | name = orig_name = column.name |
| 2689 | if name is None: |
| 2690 | name = self._fallback_column_name(column) |
| 2691 | |
| 2692 | is_literal = column.is_literal |
| 2693 | if not is_literal and isinstance(name, elements._truncated_label): |
| 2694 | name = self._truncated_identifier("colident", name) |
| 2695 | |
| 2696 | if add_to_result_map is not None: |
| 2697 | targets = (column, name, column.key) + result_map_targets |
| 2698 | if column._tq_label: |
| 2699 | targets += (column._tq_label,) |
| 2700 | |
| 2701 | add_to_result_map(name, orig_name, targets, column.type) |
| 2702 | |
| 2703 | if is_literal: |
| 2704 | # note we are not currently accommodating for |
| 2705 | # literal_column(quoted_name('ident', True)) here |
| 2706 | name = self.escape_literal_column(name) |
| 2707 | else: |
| 2708 | name = self.preparer.quote(name) |
| 2709 | table = column.table |
| 2710 | if table is None or not include_table or not table.named_with_column: |
| 2711 | return name |
| 2712 | else: |
| 2713 | effective_schema = self.preparer.schema_for_object(table) |
| 2714 | |
| 2715 | if effective_schema: |
| 2716 | schema_prefix = ( |
| 2717 | self.preparer.quote_schema(effective_schema) + "." |
| 2718 | ) |
| 2719 | else: |
| 2720 | schema_prefix = "" |
| 2721 | |
| 2722 | if TYPE_CHECKING: |
| 2723 | assert isinstance(table, NamedFromClause) |
| 2724 | tablename = table.name |
| 2725 | |
| 2726 | if ( |
| 2727 | not effective_schema |
| 2728 | and ambiguous_table_name_map |
| 2729 | and tablename in ambiguous_table_name_map |
| 2730 | ): |
| 2731 | tablename = ambiguous_table_name_map[tablename] |
| 2732 | |
| 2733 | if isinstance(tablename, elements._truncated_label): |
| 2734 | tablename = self._truncated_identifier("alias", tablename) |
| 2735 | |
| 2736 | return schema_prefix + self.preparer.quote(tablename) + "." + name |