diff --git a/programs/client/Client.cpp b/programs/client/Client.cpp index 9e2db95c65c..0f7bc282a60 100644 --- a/programs/client/Client.cpp +++ b/programs/client/Client.cpp @@ -910,11 +910,7 @@ void Client::printHelpMessage(const OptionsDescription & options_description) void Client::addAndCheckOptions(OptionsDescription & options_description, po::variables_map & options, Arguments & arguments) { /// Main commandline options related to client functionality and all parameters from Settings. - - options_description.main_description.emplace(createOptionsDescription("Main options", terminal_width)); options_description.main_description->add_options() - ("help", "produce help message") - ("config-file,C", po::value(), "config-file path") ("config,c", po::value(), "config-file path (another shorthand)") ("host,h", po::value()->default_value("localhost"), "server host") ("port", po::value()->default_value(9000), "server port") @@ -929,39 +925,25 @@ void Client::addAndCheckOptions(OptionsDescription & options_description, po::va ("password", po::value()->implicit_value("\n", ""), "password") ("ask-password", "ask-password") ("quota_key", po::value(), "A string to differentiate quotas when the user have keyed quotas configured on server") - ("stage", po::value()->default_value("complete"), "Request query processing up to specified stage: complete,fetch_columns,with_mergeable_state,with_mergeable_state_after_aggregation,with_mergeable_state_after_aggregation_and_limit") - ("query_id", po::value(), "query_id") - ("query,q", po::value(), "query") - ("database,d", po::value(), "database") ("pager", po::value(), "pager") - ("disable_suggestion,A", "Disable loading suggestion data. Note that suggestion data is loaded asynchronously through a second connection to ClickHouse server. Also it is reasonable to disable suggestion if you want to paste a query with TAB characters. Shorthand option -A is for those who get used to mysql client.") + ("testmode,T", "enable test hints in comments") + ("suggestion_limit", po::value()->default_value(10000), "Suggestion limit for how many databases, tables and columns to fetch.") - ("multiline,m", "multiline") - ("multiquery,n", "multiquery") - ("queries-file", po::value>()->multitoken(), - "file path with queries to execute; multiple files can be specified (--queries-file file1 file2...)") - ("format,f", po::value(), "default output format") - ("testmode,T", "enable test hints in comments") - ("ignore-error", "do not stop processing in multiquery mode") - ("vertical,E", "vertical output format, same as --format=Vertical or FORMAT Vertical or \\G at end of command") - ("time,t", "print query execution time to stderr in non-interactive mode (for benchmarks)") - ("stacktrace", "print stack traces of exceptions") - ("progress", "print progress even in non-interactive mode") - ("version,V", "print version information and exit") - ("version-clean", "print version in machine-readable format and exit") - ("echo", "in batch mode, print query before execution") + ("max_client_network_bandwidth", po::value(), "the maximum speed of data exchange over the network for the client in bytes per second.") ("compression", po::value(), "enable or disable compression") - ("highlight", po::value()->default_value(true), "enable or disable basic syntax highlight in interactive command line") + ("log-level", po::value(), "client log level") ("server_logs_file", po::value(), "put server logs into specified file") + ("query-fuzzer-runs", po::value()->default_value(0), "After executing every SELECT query, do random mutations in it and run again specified number of times. This is used for testing to discover unexpected corner cases.") ("interleave-queries-file", po::value>()->multitoken(), "file path with queries to execute before every file from 'queries-file'; multiple files can be specified (--queries-file file1 file2...); this is needed to enable more aggressive fuzzing of newly added tests (see 'query-fuzzer-runs' option)") + ("opentelemetry-traceparent", po::value(), "OpenTelemetry traceparent header as described by W3C Trace Context recommendation") ("opentelemetry-tracestate", po::value(), "OpenTelemetry tracestate header as described by W3C Trace Context recommendation") - ("history_file", po::value(), "path to history file") + ("no-warnings", "disable warnings when client connects to server") ("max_memory_usage_in_client", po::value(), "sets memory limit in client") ; @@ -1053,23 +1035,12 @@ void Client::processOptions(const OptionsDescription & options_description, query_processing_stage = QueryProcessingStage::fromString(options["stage"].as()); - /// Save received data into the internal config. - if (options.count("config-file")) - config().setString("config-file", options["config-file"].as()); if (options.count("config")) config().setString("config-file", options["config"].as()); if (options.count("host") && !options["host"].defaulted()) config().setString("host", options["host"].as()); - if (options.count("query_id")) - config().setString("query_id", options["query_id"].as()); - if (options.count("query")) - config().setString("query", options["query"].as()); - if (options.count("queries-file")) - queries_files = options["queries-file"].as>(); if (options.count("interleave-queries-file")) interleave_queries_files = options["interleave-queries-file"].as>(); - if (options.count("database")) - config().setString("database", options["database"].as()); if (options.count("pager")) config().setString("pager", options["pager"].as()); if (options.count("port") && !options["port"].defaulted()) @@ -1084,40 +1055,14 @@ void Client::processOptions(const OptionsDescription & options_description, config().setBool("ask-password", true); if (options.count("quota_key")) config().setString("quota_key", options["quota_key"].as()); - if (options.count("multiline")) - config().setBool("multiline", true); - if (options.count("multiquery")) - config().setBool("multiquery", true); if (options.count("testmode")) config().setBool("testmode", true); - if (options.count("ignore-error")) - config().setBool("ignore-error", true); - if (options.count("format")) - config().setString("format", options["format"].as()); - if (options.count("vertical")) - config().setBool("vertical", true); - if (options.count("stacktrace")) - config().setBool("stacktrace", true); - if (options.count("progress")) - config().setBool("progress", true); - if (options.count("echo")) - config().setBool("echo", true); - if (options.count("time")) - print_time_to_stderr = true; if (options.count("max_client_network_bandwidth")) max_client_network_bandwidth = options["max_client_network_bandwidth"].as(); if (options.count("compression")) config().setBool("compression", options["compression"].as()); if (options.count("server_logs_file")) server_logs_file = options["server_logs_file"].as(); - if (options.count("disable_suggestion")) - config().setBool("disable_suggestion", true); - if (options.count("suggestion_limit")) - config().setInt("suggestion_limit", options["suggestion_limit"].as()); - if (options.count("highlight")) - config().setBool("highlight", options["highlight"].as()); - if (options.count("history_file")) - config().setString("history_file", options["history_file"].as()); if (options.count("no-warnings")) config().setBool("no-warnings", true); @@ -1125,7 +1070,6 @@ void Client::processOptions(const OptionsDescription & options_description, { // Fuzzer implies multiquery. config().setBool("multiquery", true); - // Ignore errors in parsing queries. config().setBool("ignore-error", true); ignore_error = true; diff --git a/programs/local/LocalServer.cpp b/programs/local/LocalServer.cpp index e0fe9b9885b..3c6219079f8 100644 --- a/programs/local/LocalServer.cpp +++ b/programs/local/LocalServer.cpp @@ -607,38 +607,22 @@ void LocalServer::printHelpMessage(const OptionsDescription & options_descriptio void LocalServer::addAndCheckOptions(OptionsDescription & options_description, po::variables_map & options, Arguments & arguments) { - options_description.main_description.emplace(createOptionsDescription("Main options", terminal_width)); options_description.main_description->add_options() - ("help", "produce help message") - ("config-file,c", po::value(), "config-file path") - ("query,q", po::value(), "query") - ("queries-file, qf", po::value(), "file path with queries to execute") ("database,d", po::value(), "database") - ("table,N", po::value(), "name of the initial table") + /// If structure argument is omitted then initial query is not generated ("structure,S", po::value(), "structure of the initial table (list of column and type names)") ("file,f", po::value(), "path to file with data of the initial table (stdin if not specified)") + ("input-format", po::value(), "input format of the initial table data") - ("format,f", po::value(), "default output format (clickhouse-client compatibility)") ("output-format", po::value(), "default output format") - ("stacktrace", "print stack traces of exceptions") - ("echo", "print query before execution") - ("verbose", "print query and other debugging info") ("logger.console", po::value()->implicit_value(true), "Log to console") ("logger.log", po::value(), "Log file name") ("logger.level", po::value(), "Log level") - ("ignore-error", "do not stop processing if a query failed") + ("no-system-tables", "do not attach system tables (better startup time)") - ("version,V", "print version information and exit") - ("progress", "print progress of queries execution") - - ("multiline,m", "multiline") - ("multiquery,n", "multiquery") - ("highlight", po::value()->default_value(true), "enable or disable basic syntax highlight in interactive command line") - - ("disable_suggestion,A", "Disable loading suggestion data. Shorthand option -A is for those who get used to mysql client.") ; cmd_settings.addProgramOptions(options_description.main_description.value()); @@ -669,55 +653,26 @@ void LocalServer::readArguments(int argc, char ** argv, Arguments & arguments, s void LocalServer::processOptions(const OptionsDescription &, const CommandLineOptions & options, const std::vector &) { - /// Save received data into the internal config. - if (options.count("config-file")) - config().setString("config-file", options["config-file"].as()); - if (options.count("query")) - config().setString("query", options["query"].as()); - if (options.count("queries-file")) - config().setString("queries-file", options["queries-file"].as()); - if (options.count("database")) - config().setString("default_database", options["database"].as()); - if (options.count("table")) config().setString("table-name", options["table"].as()); if (options.count("file")) config().setString("table-file", options["file"].as()); if (options.count("structure")) config().setString("table-structure", options["structure"].as()); + if (options.count("no-system-tables")) + config().setBool("no-system-tables", true); + if (options.count("input-format")) config().setString("table-data-format", options["input-format"].as()); - if (options.count("format")) - config().setString("format", options["format"].as()); if (options.count("output-format")) config().setString("output-format", options["output-format"].as()); - if (options.count("stacktrace")) - config().setBool("stacktrace", true); - if (options.count("progress")) - config().setBool("progress", true); - if (options.count("echo")) - config().setBool("echo", true); - if (options.count("verbose")) - config().setBool("verbose", true); if (options.count("logger.console")) config().setBool("logger.console", options["logger.console"].as()); if (options.count("logger.log")) config().setString("logger.log", options["logger.log"].as()); if (options.count("logger.level")) config().setString("logger.level", options["logger.level"].as()); - if (options.count("ignore-error")) - config().setBool("ignore-error", true); - if (options.count("no-system-tables")) - config().setBool("no-system-tables", true); - - if (options.count("queries-file")) - queries_files.emplace_back(config().getString("queries-file")); - - if (options.count("multiline")) - config().setBool("multiline", true); - if (options.count("multiquery")) - config().setBool("multiquery", true); } } diff --git a/src/Client/ClientBase.cpp b/src/Client/ClientBase.cpp index 0611d04c534..1af44880c38 100644 --- a/src/Client/ClientBase.cpp +++ b/src/Client/ClientBase.cpp @@ -1454,6 +1454,41 @@ void ClientBase::init(int argc, char ** argv) po::variables_map options; OptionsDescription options_description; + options_description.main_description.emplace(createOptionsDescription("Main options", terminal_width)); + + /// Common options for clickhouse-client and clickhouse-local. + options_description.main_description->add_options() + ("help", "produce help message") + ("version,V", "print version information and exit") + ("version-clean", "print version in machine-readable format and exit") + + ("config-file,c", po::value(), "config-file path") + ("queries-file", po::value>()->multitoken(), + "file path with queries to execute; multiple files can be specified (--queries-file file1 file2...)") + ("database,d", po::value(), "database") + ("history_file", po::value(), "path to history file") + + ("query,q", po::value(), "query") + ("stage", po::value()->default_value("complete"), "Request query processing up to specified stage: complete,fetch_columns,with_mergeable_state,with_mergeable_state_after_aggregation,with_mergeable_state_after_aggregation_and_limit") + ("query_id", po::value(), "query_id") + ("progress", "print progress of queries execution") + + ("disable_suggestion,A", "Disable loading suggestion data. Note that suggestion data is loaded asynchronously through a second connection to ClickHouse server. Also it is reasonable to disable suggestion if you want to paste a query with TAB characters. Shorthand option -A is for those who get used to mysql client.") + ("time,t", "print query execution time to stderr in non-interactive mode (for benchmarks)") + ("echo", "in batch mode, print query before execution") + ("verbose", "print query and other debugging info") + + ("multiline,m", "multiline") + ("multiquery,n", "multiquery") + + ("format,f", po::value(), "default output format") + ("vertical,E", "vertical output format, same as --format=Vertical or FORMAT Vertical or \\G at end of command") + ("highlight", po::value()->default_value(true), "enable or disable basic syntax highlight in interactive command line") + + ("ignore-error", "do not stop processing in multiquery mode") + ("stacktrace", "print stack traces of exceptions") + ; + addAndCheckOptions(options_description, options, common_arguments); po::notify(options); @@ -1477,6 +1512,45 @@ void ClientBase::init(int argc, char ** argv) exit(0); } + /// Common options for clickhouse-client and clickhouse-local. + if (options.count("time")) + print_time_to_stderr = true; + if (options.count("query")) + config().setString("query", options["query"].as()); + if (options.count("query_id")) + config().setString("query_id", options["query_id"].as()); + if (options.count("database")) + config().setString("database", options["database"].as()); + if (options.count("config-file")) + config().setString("config-file", options["config-file"].as()); + if (options.count("queries-file")) + queries_files = options["queries-file"].as>(); + if (options.count("multiline")) + config().setBool("multiline", true); + if (options.count("multiquery")) + config().setBool("multiquery", true); + if (options.count("ignore-error")) + config().setBool("ignore-error", true); + if (options.count("format")) + config().setString("format", options["format"].as()); + if (options.count("vertical")) + config().setBool("vertical", true); + if (options.count("stacktrace")) + config().setBool("stacktrace", true); + if (options.count("progress")) + config().setBool("progress", true); + if (options.count("echo")) + config().setBool("echo", true); + if (options.count("disable_suggestion")) + config().setBool("disable_suggestion", true); + if (options.count("suggestion_limit")) + config().setInt("suggestion_limit", options["suggestion_limit"].as()); + if (options.count("highlight")) + config().setBool("highlight", options["highlight"].as()); + if (options.count("history_file")) + config().setString("history_file", options["history_file"].as()); + if (options.count("verbose")) + config().setBool("verbose", true); if (options.count("log-level")) Poco::Logger::root().setLevel(options["log-level"].as());