Initialize table expression data for table expression node
| 4179 | |
| 4180 | /// Initialize table expression data for table expression node |
| 4181 | void QueryAnalyzer::initializeTableExpressionData(const QueryTreeNodePtr & table_expression_node, IdentifierResolveScope & scope) |
| 4182 | { |
| 4183 | auto * table_node = table_expression_node->as<TableNode>(); |
| 4184 | auto * query_node = table_expression_node->as<QueryNode>(); |
| 4185 | auto * union_node = table_expression_node->as<UnionNode>(); |
| 4186 | auto * table_function_node = table_expression_node->as<TableFunctionNode>(); |
| 4187 | |
| 4188 | if (!table_node && !table_function_node && !query_node && !union_node) |
| 4189 | throw Exception(ErrorCodes::UNSUPPORTED_METHOD, |
| 4190 | "Unexpected table expression. Expected table, table function, query or union node. Actual: {}. In scope {}", |
| 4191 | table_expression_node->formatASTForErrorMessage(), |
| 4192 | scope.scope_node->formatASTForErrorMessage()); |
| 4193 | |
| 4194 | auto table_expression_data_it = scope.table_expression_node_to_data.find(table_expression_node); |
| 4195 | if (table_expression_data_it != scope.table_expression_node_to_data.end()) |
| 4196 | return; |
| 4197 | |
| 4198 | AnalysisTableExpressionData table_expression_data; |
| 4199 | |
| 4200 | if (table_node) |
| 4201 | { |
| 4202 | if (!table_node->getTemporaryTableName().empty()) |
| 4203 | { |
| 4204 | table_expression_data.table_name = table_node->getTemporaryTableName(); |
| 4205 | table_expression_data.table_expression_name = table_node->getTemporaryTableName(); |
| 4206 | } |
| 4207 | else |
| 4208 | { |
| 4209 | const auto & table_storage_id = table_node->getStorageID(); |
| 4210 | table_expression_data.database_name = table_storage_id.database_name; |
| 4211 | table_expression_data.table_name = table_storage_id.table_name; |
| 4212 | table_expression_data.table_expression_name = table_storage_id.getFullNameNotQuoted(); |
| 4213 | } |
| 4214 | |
| 4215 | table_expression_data.table_expression_description = "table"; |
| 4216 | } |
| 4217 | else if (query_node || union_node) |
| 4218 | { |
| 4219 | table_expression_data.table_name = query_node ? query_node->getCTEName() : union_node->getCTEName(); |
| 4220 | table_expression_data.table_expression_description = "subquery"; |
| 4221 | } |
| 4222 | else if (table_function_node) |
| 4223 | { |
| 4224 | table_expression_data.table_expression_description = "table_function"; |
| 4225 | } |
| 4226 | |
| 4227 | if (table_expression_node->hasAlias()) |
| 4228 | table_expression_data.table_expression_name = table_expression_node->getAlias(); |
| 4229 | |
| 4230 | StorageSnapshotPtr storage_snapshot; |
| 4231 | if (table_node || table_function_node) |
| 4232 | { |
| 4233 | storage_snapshot = table_node ? table_node->getStorageSnapshot() : table_function_node->getStorageSnapshot(); |
| 4234 | |
| 4235 | auto get_column_options = GetColumnsOptions(GetColumnsOptions::All).withVirtuals(VirtualsKind::All, VirtualsMaterializationPlace::All); |
| 4236 | if (storage_snapshot->storage.supportsSubcolumns()) |
| 4237 | { |
| 4238 | get_column_options.withSubcolumns(); |
nothing calls this directly
no test coverage detected