(Context<?> context)
| 1804 | |
| 1805 | |
| 1806 | @SuppressWarnings({ "unchecked", "rawtypes" }) |
| 1807 | final void accept0(Context<?> context) { |
| 1808 | |
| 1809 | |
| 1810 | |
| 1811 | |
| 1812 | |
| 1813 | |
| 1814 | |
| 1815 | boolean topLevelCte = false; |
| 1816 | |
| 1817 | // Subquery scopes are started in AbstractContext |
| 1818 | if (context.subqueryLevel() == 0) { |
| 1819 | context.scopeStart(this); |
| 1820 | |
| 1821 | if (topLevelCte |= (context.data(DATA_TOP_LEVEL_CTE) == null)) |
| 1822 | context.data(DATA_TOP_LEVEL_CTE, new TopLevelCte()); |
| 1823 | } |
| 1824 | |
| 1825 | SQLDialect dialect = context.dialect(); |
| 1826 | |
| 1827 | switch (getRenderTable(context.settings())) { |
| 1828 | case NEVER: { |
| 1829 | context.data(DATA_RENDER_TABLE, false); |
| 1830 | break; |
| 1831 | } |
| 1832 | |
| 1833 | case WHEN_MULTIPLE_TABLES: { |
| 1834 | if (knownTableSource()) { |
| 1835 | Iterator<Table<?>> it = concat( |
| 1836 | joinedTables(getFrom()), |
| 1837 | context.scopeParts((Class<Table<?>>) (Class) Table.class) |
| 1838 | ).iterator(); |
| 1839 | |
| 1840 | // [#15996] At least 2 tables are in scope |
| 1841 | if (!it.hasNext() || it.next() != null && !it.hasNext()) |
| 1842 | context.data(DATA_RENDER_TABLE, false); |
| 1843 | } |
| 1844 | |
| 1845 | break; |
| 1846 | } |
| 1847 | |
| 1848 | case WHEN_AMBIGUOUS_COLUMNS: { |
| 1849 | if (knownTableSource() && !hasAmbiguousNamesInTables(concat( |
| 1850 | joinedTables(getFrom()), |
| 1851 | context.scopeParts((Class<Table<?>>) (Class) Table.class) |
| 1852 | ))) |
| 1853 | context.data(DATA_RENDER_TABLE, false); |
| 1854 | |
| 1855 | break; |
| 1856 | } |
| 1857 | } |
| 1858 | |
| 1859 | // [#2791] [#9981] TODO: We have an automatic way of pushing / popping |
| 1860 | // these values onto the scope stack. Use that, instead |
| 1861 | Object renderTrailingLimit = context.data(DATA_RENDER_TRAILING_LIMIT_IF_APPLICABLE); |
| 1862 | Object transformRownumToLimit = context.data(DATA_TRANSFORM_ROWNUM_TO_LIMIT); |
| 1863 | Name[] selectAliases = (Name[]) context.data(DATA_SELECT_ALIASES); |
no test coverage detected