(&mut self, column_name: ast::ColumnName<Raw>)
| 1764 | } |
| 1765 | |
| 1766 | fn fold_column_name(&mut self, column_name: ast::ColumnName<Raw>) -> ast::ColumnName<Aug> { |
| 1767 | let item_name = self.resolve_item_name( |
| 1768 | column_name.relation, |
| 1769 | ItemResolutionConfig { |
| 1770 | functions: false, |
| 1771 | types: true, |
| 1772 | relations: true, |
| 1773 | }, |
| 1774 | ); |
| 1775 | |
| 1776 | match &item_name { |
| 1777 | ResolvedItemName::Item { |
| 1778 | id, |
| 1779 | full_name, |
| 1780 | version, |
| 1781 | qualifiers: _, |
| 1782 | print_id: _, |
| 1783 | } => { |
| 1784 | let item = self.catalog.get_item(id).at_version(*version); |
| 1785 | let name = normalize::column_name(column_name.column.clone()); |
| 1786 | |
| 1787 | let maybe_desc = match item.type_details() { |
| 1788 | Some(details) => match details.typ.desc(self.catalog) { |
| 1789 | Ok(desc) => desc.map(Cow::Owned), |
| 1790 | Err(e) => { |
| 1791 | if self.status.is_ok() { |
| 1792 | self.status = Err(e); |
| 1793 | } |
| 1794 | return ast::ColumnName { |
| 1795 | relation: ResolvedItemName::Error, |
| 1796 | column: ResolvedColumnReference::Error, |
| 1797 | }; |
| 1798 | } |
| 1799 | }, |
| 1800 | None => item.relation_desc(), |
| 1801 | }; |
| 1802 | let Some(desc) = maybe_desc else { |
| 1803 | if self.status.is_ok() { |
| 1804 | self.status = Err(PlanError::ItemWithoutColumns { |
| 1805 | name: full_name.to_string(), |
| 1806 | item_type: item.item_type(), |
| 1807 | }); |
| 1808 | } |
| 1809 | return ast::ColumnName { |
| 1810 | relation: ResolvedItemName::Error, |
| 1811 | column: ResolvedColumnReference::Error, |
| 1812 | }; |
| 1813 | }; |
| 1814 | |
| 1815 | let Some((index, _typ)) = desc.get_by_name(&name) else { |
| 1816 | if self.status.is_ok() { |
| 1817 | let similar = desc.iter_similar_names(&name).cloned().collect(); |
| 1818 | self.status = Err(PlanError::UnknownColumn { |
| 1819 | table: Some(full_name.clone().into()), |
| 1820 | column: name, |
| 1821 | similar, |
| 1822 | }) |
| 1823 | } |
no test coverage detected