small fixes

This commit is contained in:
Alexander Kuzmenkov 2021-01-16 00:33:53 +03:00
parent 765aa4d4e3
commit 9d6730a846
4 changed files with 48 additions and 38 deletions

View File

@ -898,6 +898,40 @@ private:
} }
} }
void reportQueryError() const
{
// If we probably have progress bar, we should add additional
// newline, otherwise exception may display concatenated with
// the progress bar.
if (need_render_progress)
std::cerr << '\n';
if (server_exception)
{
std::string text = server_exception->displayText();
auto embedded_stack_trace_pos = text.find("Stack trace");
if (std::string::npos != embedded_stack_trace_pos
&& !config().getBool("stacktrace", false))
{
text.resize(embedded_stack_trace_pos);
}
std::cerr << "Received exception from server (version "
<< server_version << "):" << std::endl << "Code: "
<< server_exception->code() << ". " << text << std::endl;
}
if (client_exception)
{
fmt::print(stderr,
"Error on processing query '{}':\n{}",
full_query, client_exception->message());
}
// A debug check -- at least some exception must be set, if the error
// flag is set, and vice versa.
assert(have_error == (client_exception || server_exception));
}
bool processMultiQuery(const String & all_queries_text) bool processMultiQuery(const String & all_queries_text)
{ {
// It makes sense not to base any control flow on this, so that it is // It makes sense not to base any control flow on this, so that it is
@ -1148,7 +1182,7 @@ private:
if (!test_hint.clientError() && !test_hint.serverError()) if (!test_hint.clientError() && !test_hint.serverError())
{ {
// No error was expected but it still ocurred. This is the // No error was expected but it still occurred. This is the
// default case w/o test hint, doesn't need additional // default case w/o test hint, doesn't need additional
// diagnostics. // diagnostics.
error_matches_hint = false; error_matches_hint = false;
@ -1185,32 +1219,7 @@ private:
// Report error. // Report error.
if (have_error) if (have_error)
{ {
// If we probably have progress bar, we should add additional reportQueryError();
// newline, otherwise exception may display concatenated with
// the progress bar.
if (need_render_progress)
std::cerr << '\n';
if (server_exception)
{
std::string text = server_exception->displayText();
auto embedded_stack_trace_pos = text.find("Stack trace");
if (std::string::npos != embedded_stack_trace_pos
&& !config().getBool("stacktrace", false))
{
text.resize(embedded_stack_trace_pos);
}
std::cerr << "Received exception from server (version "
<< server_version << "):" << std::endl << "Code: "
<< server_exception->code() << ". " << text << std::endl;
}
if (client_exception)
{
fmt::print(stderr,
"Error on processing query '{}':\n{}",
full_query, client_exception->message());
}
} }
// Stop processing queries if needed. // Stop processing queries if needed.
@ -1414,6 +1423,11 @@ private:
} }
processParsedSingleQuery(); processParsedSingleQuery();
if (have_error)
{
reportQueryError();
}
} }
// Parameters are in global variables: // Parameters are in global variables:

View File

@ -11,12 +11,6 @@
namespace DB namespace DB
{ {
namespace ErrorCodes
{
extern const int UNEXPECTED_ERROR_CODE;
}
/// Checks expected server and client error codes in testmode. /// Checks expected server and client error codes in testmode.
/// To enable it add special comment after the query: "-- { serverError 60 }" or "-- { clientError 20 }". /// To enable it add special comment after the query: "-- { serverError 60 }" or "-- { clientError 20 }".
/// Also you can enable echoing all queries by writing "-- { echo }". /// Also you can enable echoing all queries by writing "-- { echo }".

View File

@ -568,7 +568,7 @@ def main(args):
if not check_server_started(args.client, args.server_check_retries): if not check_server_started(args.client, args.server_check_retries):
raise Exception( raise Exception(
"Server is not responding. Cannot execute 'SELECT 1' query. \ "Server is not responding. Cannot execute 'SELECT 1' query. \
Note: if you are using unbundled mode, you also have to specify -c option.") Note: if you are using split build, you may have to specify -c option.")
build_flags = collect_build_flags(args.client) build_flags = collect_build_flags(args.client)
if args.antlr: if args.antlr:
@ -846,10 +846,10 @@ if __name__ == '__main__':
parser.add_argument('--tmp', help='Path to tmp dir') parser.add_argument('--tmp', help='Path to tmp dir')
parser.add_argument('-b', '--binary', default='clickhouse', parser.add_argument('-b', '--binary', default='clickhouse',
help='Path to clickhouse (if bundled, clickhouse-server otherwise) binary or name of binary in PATH') help='Path to clickhouse (if monolithic build, clickhouse-server otherwise) binary or name of binary in PATH')
parser.add_argument('-c', '--client', parser.add_argument('-c', '--client',
help='Path to clickhouse-client (if unbundled, useless otherwise) binary of name of binary in PATH') help='Path to clickhouse-client (if split build, useless otherwise) binary of name of binary in PATH')
parser.add_argument('--extract_from_config', help='extract-from-config program') parser.add_argument('--extract_from_config', help='extract-from-config program')
parser.add_argument('--configclient', help='Client config (if you use not default ports)') parser.add_argument('--configclient', help='Client config (if you use not default ports)')
@ -930,11 +930,11 @@ if __name__ == '__main__':
if find_binary(args.binary + '-client'): if find_binary(args.binary + '-client'):
args.client = args.binary + '-client' args.client = args.binary + '-client'
print("Using " + args.client + " as client program (expecting unbundled mode)") print("Using " + args.client + " as client program (expecting split build)")
elif find_binary(args.binary): elif find_binary(args.binary):
args.client = args.binary + ' client' args.client = args.binary + ' client'
print("Using " + args.client + " as client program (expecting bundled mode)") print("Using " + args.client + " as client program (expecting monolithic build)")
else: else:
print("No 'clickhouse' or 'clickhouse-client' client binary found", file=sys.stderr) print("No 'clickhouse' or 'clickhouse-client' client binary found", file=sys.stderr)
parser.print_help() parser.print_help()

View File

@ -23,3 +23,5 @@ select nonexistent column; -- { serverError 47 }
insert into values_01564 values (1); select 1; insert into values_01564 values (1); select 1;
select 1; select 1;
1 1
-- the return code must be zero after the final query has failed with expected error
insert into values_01564 values (11); -- { serverError 469 }