Merge pull request #62973 from yariks5s/reduce_help_messages

Reduce verbosity of `clickhouse client --help`
This commit is contained in:
Alexey Milovidov 2024-04-27 03:43:33 +00:00 committed by GitHub
commit 8cc67f7c95
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 67 additions and 10 deletions

View File

@ -7,6 +7,8 @@ toc_max_heading_level: 2
# Core Settings # Core Settings
All below settings are also available in table [system.settings](/docs/en/operations/system-tables/settings).
## additional_table_filters ## additional_table_filters
An additional filter expression that is applied after reading An additional filter expression that is applied after reading

View File

@ -918,11 +918,13 @@ bool Client::processWithFuzzing(const String & full_query)
} }
void Client::printHelpMessage(const OptionsDescription & options_description) void Client::printHelpMessage(const OptionsDescription & options_description, bool verbose)
{ {
std::cout << options_description.main_description.value() << "\n"; std::cout << options_description.main_description.value() << "\n";
std::cout << options_description.external_description.value() << "\n"; std::cout << options_description.external_description.value() << "\n";
std::cout << options_description.hosts_and_ports_description.value() << "\n"; std::cout << options_description.hosts_and_ports_description.value() << "\n";
if (verbose)
std::cout << "All settings are documented at https://clickhouse.com/docs/en/operations/settings/settings.\n\n";
std::cout << "In addition, --param_name=value can be specified for substitution of parameters for parametrized queries.\n"; std::cout << "In addition, --param_name=value can be specified for substitution of parameters for parametrized queries.\n";
std::cout << "\nSee also: https://clickhouse.com/docs/en/integrations/sql-clients/cli\n"; std::cout << "\nSee also: https://clickhouse.com/docs/en/integrations/sql-clients/cli\n";
} }

View File

@ -25,7 +25,7 @@ protected:
String getName() const override { return "client"; } String getName() const override { return "client"; }
void printHelpMessage(const OptionsDescription & options_description) override; void printHelpMessage(const OptionsDescription & options_description, bool verbose) override;
void addOptions(OptionsDescription & options_description) override; void addOptions(OptionsDescription & options_description) override;

View File

@ -774,10 +774,12 @@ void LocalServer::processConfig()
} }
void LocalServer::printHelpMessage([[maybe_unused]] const OptionsDescription & options_description) void LocalServer::printHelpMessage(const OptionsDescription & options_description, bool verbose)
{ {
std::cout << getHelpHeader() << "\n"; std::cout << getHelpHeader() << "\n";
std::cout << options_description.main_description.value() << "\n"; std::cout << options_description.main_description.value() << "\n";
if (verbose)
std::cout << "All settings are documented at https://clickhouse.com/docs/en/operations/settings/settings.\n\n";
std::cout << getHelpFooter() << "\n"; std::cout << getHelpFooter() << "\n";
std::cout << "In addition, --param_name=value can be specified for substitution of parameters for parametrized queries.\n"; std::cout << "In addition, --param_name=value can be specified for substitution of parameters for parametrized queries.\n";
std::cout << "\nSee also: https://clickhouse.com/docs/en/operations/utilities/clickhouse-local/\n"; std::cout << "\nSee also: https://clickhouse.com/docs/en/operations/utilities/clickhouse-local/\n";

View File

@ -36,7 +36,7 @@ protected:
String getName() const override { return "local"; } String getName() const override { return "local"; }
void printHelpMessage(const OptionsDescription & options_description) override; void printHelpMessage(const OptionsDescription & options_description, bool verbose) override;
void addOptions(OptionsDescription & options_description) override; void addOptions(OptionsDescription & options_description) override;

View File

@ -2955,7 +2955,8 @@ void ClientBase::init(int argc, char ** argv)
/// Common options for clickhouse-client and clickhouse-local. /// Common options for clickhouse-client and clickhouse-local.
options_description.main_description->add_options() options_description.main_description->add_options()
("help", "produce help message") ("help", "print usage summary, combine with --verbose to display all options")
("verbose", "print query and other debugging info")
("version,V", "print version information and exit") ("version,V", "print version information and exit")
("version-clean", "print version in machine-readable format and exit") ("version-clean", "print version in machine-readable format and exit")
@ -2979,7 +2980,6 @@ void ClientBase::init(int argc, char ** argv)
("time,t", "print query execution time to stderr in non-interactive mode (for benchmarks)") ("time,t", "print query execution time to stderr in non-interactive mode (for benchmarks)")
("echo", "in batch mode, print query before execution") ("echo", "in batch mode, print query before execution")
("verbose", "print query and other debugging info")
("log-level", po::value<std::string>(), "log level") ("log-level", po::value<std::string>(), "log level")
("server_logs_file", po::value<std::string>(), "put server logs into specified file") ("server_logs_file", po::value<std::string>(), "put server logs into specified file")
@ -3008,6 +3008,8 @@ void ClientBase::init(int argc, char ** argv)
addOptions(options_description); addOptions(options_description);
OptionsDescription options_description_non_verbose = options_description;
auto getter = [](const auto & op) auto getter = [](const auto & op)
{ {
String op_long_name = op->long_name(); String op_long_name = op->long_name();
@ -3042,11 +3044,17 @@ void ClientBase::init(int argc, char ** argv)
exit(0); // NOLINT(concurrency-mt-unsafe) exit(0); // NOLINT(concurrency-mt-unsafe)
} }
if (options.count("verbose"))
config().setBool("verbose", true);
/// Output of help message. /// Output of help message.
if (options.count("help") if (options.count("help")
|| (options.count("host") && options["host"].as<std::string>() == "elp")) /// If user writes -help instead of --help. || (options.count("host") && options["host"].as<std::string>() == "elp")) /// If user writes -help instead of --help.
{ {
printHelpMessage(options_description); if (config().getBool("verbose", false))
printHelpMessage(options_description, true);
else
printHelpMessage(options_description_non_verbose, false);
exit(0); // NOLINT(concurrency-mt-unsafe) exit(0); // NOLINT(concurrency-mt-unsafe)
} }
@ -3113,8 +3121,6 @@ void ClientBase::init(int argc, char ** argv)
config().setBool("highlight", options["highlight"].as<bool>()); config().setBool("highlight", options["highlight"].as<bool>());
if (options.count("history_file")) if (options.count("history_file"))
config().setString("history_file", options["history_file"].as<std::string>()); config().setString("history_file", options["history_file"].as<std::string>());
if (options.count("verbose"))
config().setBool("verbose", true);
if (options.count("interactive")) if (options.count("interactive"))
config().setBool("interactive", true); config().setBool("interactive", true);
if (options.count("pager")) if (options.count("pager"))

View File

@ -121,7 +121,7 @@ protected:
}; };
virtual void updateLoggerLevel(const String &) {} virtual void updateLoggerLevel(const String &) {}
virtual void printHelpMessage(const OptionsDescription & options_description) = 0; virtual void printHelpMessage(const OptionsDescription & options_description, bool verbose) = 0;
virtual void addOptions(OptionsDescription & options_description) = 0; virtual void addOptions(OptionsDescription & options_description) = 0;
virtual void processOptions(const OptionsDescription & options_description, virtual void processOptions(const OptionsDescription & options_description,
const CommandLineOptions & options, const CommandLineOptions & options,

View File

@ -0,0 +1,2 @@
OK
OK

View File

@ -0,0 +1,43 @@
#!/usr/bin/env bash
# Checks that "clickhouse-client/local --help" prints a brief summary of CLI arguments and "--help --verbose" prints all possible CLI arguments
CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
# shellcheck source=../shell_config.sh
. "$CUR_DIR"/../shell_config.sh
# Unique identifier for concurrent execution
PID=$$
# Get the help message in short and verbose form and put them into txt files
$CLICKHOUSE_CLIENT --help > "help_msg_$PID.txt"
$CLICKHOUSE_CLIENT --help --verbose > "verbose_help_msg_$PID.txt"
# Sizes of files
size_short=$(stat -c %s "help_msg_$PID.txt")
size_verbose=$(stat -c %s "verbose_help_msg_$PID.txt")
# If the size of the short help message is less, everything is OK
if [ $size_short -lt $size_verbose ]; then
echo "OK"
else
echo "Not OK"
fi
rm "help_msg_$PID.txt"
rm "verbose_help_msg_$PID.txt"
# The same for clickhouse local
$CLICKHOUSE_LOCAL --help > "help_msg_$PID.txt"
$CLICKHOUSE_LOCAL --help --verbose > "verbose_help_msg_$PID.txt"
size_short=$(stat -c %s "help_msg_$PID.txt")
size_verbose=$(stat -c %s "verbose_help_msg_$PID.txt")
if [ $size_short -lt $size_verbose ]; then
echo "OK"
else
echo "Not OK"
fi
rm "help_msg_$PID.txt"
rm "verbose_help_msg_$PID.txt"