MCPcopy Create free account
hub / github.com/ClickHouse/ClickHouse / initializeTableExpressionData

Method initializeTableExpressionData

src/Analyzer/Resolve/QueryAnalyzer.cpp:4181–4359  ·  view source on GitHub ↗

Initialize table expression data for table expression node

Source from the content-addressed store, hash-verified

4179
4180/// Initialize table expression data for table expression node
4181void 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();

Callers

nothing calls this directly

Calls 15

buildQueryTreeFunction · 0.85
buildCastFunctionFunction · 0.85
getFullNameNotQuotedMethod · 0.80
withVirtualsMethod · 0.80
getSubcolumnsMethod · 0.80
GetColumnsOptionsClass · 0.70
ExceptionClass · 0.50
findMethod · 0.45

Tested by

no test coverage detected