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

Method setStorageMetadata

src/Storages/StorageFile.cpp:1258–1312  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1256}
1257
1258void StorageFile::setStorageMetadata(CommonArguments args)
1259{
1260 StorageInMemoryMetadata storage_metadata;
1261
1262 if (args.format_name == "Distributed" || args.columns.empty())
1263 {
1264 ColumnsDescription columns;
1265 if (use_table_fd)
1266 {
1267 if (format_name == "auto")
1268 std::tie(columns, format_name) = getTableStructureAndFormatFromFileDescriptor(std::nullopt, args.getContext());
1269 else
1270 columns = getTableStructureAndFormatFromFileDescriptor(format_name, args.getContext()).first;
1271 }
1272 else
1273 {
1274 if (format_name == "auto")
1275 std::tie(columns, format_name) = getTableStructureAndFormatFromFile(paths, compression_method, format_settings, args.getContext(), archive_info);
1276 else
1277 columns = getTableStructureFromFile(format_name, paths, compression_method, format_settings, args.getContext(), archive_info);
1278
1279 if (!args.columns.empty() && args.columns != columns)
1280 throw Exception(ErrorCodes::INCOMPATIBLE_COLUMNS, "Table structure and file structure are different");
1281 }
1282 storage_metadata.setColumns(columns);
1283 }
1284 else
1285 {
1286 if (format_name == "auto")
1287 format_name = getTableStructureAndFormatFromFile(paths, compression_method, format_settings, args.getContext(), archive_info).second;
1288 /// We don't allow special columns in File storage.
1289 if (!args.columns.hasOnlyOrdinary())
1290 throw Exception(ErrorCodes::BAD_ARGUMENTS, "Table engine File doesn't support special columns like MATERIALIZED, ALIAS or EPHEMERAL");
1291 storage_metadata.setColumns(args.columns);
1292 }
1293
1294 storage_metadata.setConstraints(args.constraints);
1295 storage_metadata.setComment(args.comment);
1296
1297 const auto sample_path = paths.empty() ? "" : paths[0];
1298
1299 auto & storage_columns = storage_metadata.columns;
1300
1301 std::tie(hive_partition_columns_to_read_from_file_path, std::ignore) = HivePartitioningUtils::setupHivePartitioningForFileURLLikeStorage(
1302 storage_columns,
1303 sample_path,
1304 args.columns.empty(),
1305 format_settings,
1306 args.getContext());
1307
1308 storage_metadata.setVirtuals(VirtualColumnUtils::getVirtualsForFileLikeStorage(storage_metadata.columns, args.getContext(), format_settings, PartitionStrategyFactory::StrategyType::NONE, sample_path));
1309 setInMemoryMetadata(storage_metadata);
1310
1311 supports_prewhere = format_name != "Distributed" && FormatFactory::instance().checkIfFormatSupportsPrewhere(format_name, args.getContext(), format_settings);
1312}
1313
1314static std::chrono::seconds getLockTimeout(const ContextPtr & context)
1315{

Callers

nothing calls this directly

Calls 11

hasOnlyOrdinaryMethod · 0.80
setConstraintsMethod · 0.80
setVirtualsMethod · 0.80
ExceptionClass · 0.50
emptyMethod · 0.45
getContextMethod · 0.45
setColumnsMethod · 0.45
setCommentMethod · 0.45

Tested by

no test coverage detected