Content-Length: 6281 | pFad | https://github.com/Dwrite/ClickHouse/raw/refs/heads/master/src/TableFunctions/TableFunctionURL.cpp

th: 6249 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace DB { namespace Setting { extern const SettingsUInt64 allow_experimental_parallel_reading_from_replicas; extern const SettingsBool parallel_replicas_for_cluster_engines; extern const SettingsString cluster_for_parallel_replicas; extern const SettingsParallelReplicasMode parallel_replicas_mode; } std::vector TableFunctionURL::skipAnalysisForArguments(const QueryTreeNodePtr & query_node_table_function, ContextPtr) const { auto & table_function_node = query_node_table_function->as(); auto & table_function_arguments_nodes = table_function_node.getArguments().getNodes(); size_t table_function_arguments_size = table_function_arguments_nodes.size(); std::vector result; for (size_t i = 0; i < table_function_arguments_size; ++i) { auto * function_node = table_function_arguments_nodes[i]->as(); if (function_node && function_node->getFunctionName() == "headers") result.push_back(i); } return result; } void TableFunctionURL::parseArguments(const ASTPtr & ast, ContextPtr context) { //github.com/ Clone ast function, because we can modify it's arguments like removing headers. ITableFunctionFileLike::parseArguments(ast->clone(), context); } void TableFunctionURL::parseArgumentsImpl(ASTs & args, const ContextPtr & context) { if (auto named_collection = tryGetNamedCollectionWithOverrides(args, context)) { StorageURL::processNamedCollectionResult(configuration, *named_collection); filename = configuration.url; structure = configuration.structure; compression_method = configuration.compression_method; format = configuration.format; if (format == "auto") format = FormatFactory::instance().tryGetFormatFromFileName(Poco::URI(filename).getPath()).value_or("auto"); StorageURL::evalArgsAndCollectHeaders(args, configuration.headers, context); } else { size_t count = StorageURL::evalArgsAndCollectHeaders(args, configuration.headers, context); //github.com/ ITableFunctionFileLike cannot parse headers argument, so remove it. ASTPtr headers_ast; if (count != args.size()) { chassert(count + 1 == args.size()); headers_ast = args.back(); args.pop_back(); } ITableFunctionFileLike::parseArgumentsImpl(args, context); if (headers_ast) args.push_back(headers_ast); } } StoragePtr TableFunctionURL::getStorage( const String & source, const String & format_, const ColumnsDescription & columns, ContextPtr global_context, const std::string & table_name, const String & compression_method_, bool is_insert_query) const { const auto & settings = global_context->getSettingsRef(); const auto is_secondary_query = global_context->getClientInfo().query_kind == ClientInfo::QueryKind::SECONDARY_QUERY; const auto parallel_replicas_cluster_name = settings[Setting::cluster_for_parallel_replicas].toString(); const auto can_use_parallel_replicas = !parallel_replicas_cluster_name.empty() && settings[Setting::parallel_replicas_for_cluster_engines] && global_context->canUseTaskBasedParallelReplicas() && !global_context->isDistributed() && !is_secondary_query && !is_insert_query; if (can_use_parallel_replicas) { return std::make_shared( global_context, parallel_replicas_cluster_name, filename, format, compression_method, StorageID(getDatabaseName(), table_name), getActualTableStructure(global_context, /* is_insert_query */ true), ConstraintsDescription{}, configuration); } return std::make_shared( source, StorageID(getDatabaseName(), table_name), format_, std::nullopt /*format settings*/, columns, ConstraintsDescription{}, String{}, global_context, compression_method_, configuration.headers, configuration.http_method, nullptr, /*distributed_processing=*/ is_secondary_query); } ColumnsDescription TableFunctionURL::getActualTableStructure(ContextPtr context, bool /*is_insert_query*/) const { if (structure == "auto") { if (const auto access_object = getSourceAccessObject()) context->checkAccess(AccessType::READ, toStringSource(*access_object)); if (format == "auto") return StorageURL::getTableStructureAndFormatFromData( filename, chooseCompressionMethod(Poco::URI(filename).getPath(), compression_method), configuration.headers, std::nullopt, context).first; return StorageURL::getTableStructureFromData(format, filename, chooseCompressionMethod(Poco::URI(filename).getPath(), compression_method), configuration.headers, std::nullopt, context); } return parseColumnsListFromString(structure, context); } std::optional TableFunctionURL::tryGetFormatFromFirstArgument() { return FormatFactory::instance().tryGetFormatFromFileName(Poco::URI(filename).getPath()); } void registerTableFunctionURL(TableFunctionFactory & factory) { factory.registerFunction(); } }








ApplySandwichStrip

pFad - (p)hone/(F)rame/(a)nonymizer/(d)eclutterfier!      Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

Fetched URL: https://github.com/Dwrite/ClickHouse/raw/refs/heads/master/src/TableFunctions/TableFunctionURL.cpp

Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy