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

Method getModifiedQueryInfo

src/Storages/StorageMerge.cpp:1078–1211  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1076}
1077
1078SelectQueryInfo ReadFromMerge::getModifiedQueryInfo(const ContextMutablePtr & modified_context,
1079 const StorageWithLockAndName & storage_with_lock_and_name,
1080 const StorageSnapshotPtr & storage_snapshot_,
1081 Names required_column_names,
1082 Names & column_names_as_aliases,
1083 bool & is_smallest_column_requested,
1084 Aliases & aliases) const
1085{
1086 const auto & [database_name, storage, storage_lock, table_name] = storage_with_lock_and_name;
1087 const StorageID current_storage_id = storage->getStorageID();
1088
1089 SelectQueryInfo modified_query_info = query_info;
1090
1091 modified_query_info.initial_storage_snapshot = merge_storage_snapshot;
1092
1093 if (modified_query_info.planner_context)
1094 modified_query_info.planner_context = std::make_shared<PlannerContext>(modified_context, modified_query_info.planner_context);
1095
1096 if (modified_query_info.table_expression)
1097 {
1098 auto replacement_table_expression = std::make_shared<TableNode>(storage, storage_lock, storage_snapshot_);
1099 replacement_table_expression->setAlias(modified_query_info.table_expression->getAlias());
1100 if (query_info.table_expression_modifiers)
1101 replacement_table_expression->setTableExpressionModifiers(*query_info.table_expression_modifiers);
1102
1103 modified_query_info.query_tree = replaceTableExpressionAndRemoveJoin(modified_query_info.query_tree, modified_query_info.table_expression, replacement_table_expression, modified_context, required_column_names);
1104 modified_query_info.table_expression = replacement_table_expression;
1105 modified_query_info.planner_context->getOrCreateTableExpressionData(replacement_table_expression);
1106
1107 auto get_column_options = GetColumnsOptions(GetColumnsOptions::All).withSubcolumns(storage_snapshot_->storage.supportsSubcolumns()).withVirtuals(VirtualsKind::All, VirtualsMaterializationPlace::All);
1108
1109 /// Replace references to columns that don't exist in this child table with default values.
1110 /// This happens when merge() is used over tables with different schemas and the processing
1111 /// stage is above FetchColumns (e.g., for distributed/remote tables where the full query
1112 /// is sent to the child for processing).
1113 std::unordered_map<std::string, QueryTreeNodePtr> column_name_to_node;
1114 for (const auto & column_name : required_column_names)
1115 {
1116 if (column_name_to_node.contains(column_name))
1117 continue;
1118
1119 if (storage_snapshot_->tryGetColumn(get_column_options, column_name))
1120 continue;
1121
1122 auto merge_column = merge_storage_snapshot->tryGetColumn(
1123 GetColumnsOptions(GetColumnsOptions::All).withVirtuals(VirtualsKind::All, VirtualsMaterializationPlace::All)
1124 .withSubcolumns(merge_storage_snapshot->storage.supportsSubcolumns()),
1125 column_name);
1126 if (!merge_column)
1127 continue;
1128
1129 column_name_to_node.emplace(column_name,
1130 std::make_shared<ConstantNode>(merge_column->type->getDefault(), merge_column->type));
1131 }
1132
1133 auto storage_columns = storage_snapshot_->metadata->getColumns();
1134
1135 bool with_aliases = /* common_processed_stage == QueryProcessingStage::FetchColumns && */ !storage_columns.getAliases().empty();

Callers

nothing calls this directly

Calls 15

replaceColumnsFunction · 0.85
queryNodeToSelectQueryFunction · 0.85
removeJoinFunction · 0.85
withVirtualsMethod · 0.80
getAliasesMethod · 0.80
getAllPhysicalMethod · 0.80
GetColumnsOptionsClass · 0.70
ExceptionClass · 0.50
getStorageIDMethod · 0.45
setAliasMethod · 0.45

Tested by

no test coverage detected