mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-30 19:42:00 +00:00
Miscellaneous
This commit is contained in:
parent
0ff26d2d77
commit
537f045c1c
@ -2056,7 +2056,7 @@ MultiQueryProcessingStage ClientBase::analyzeMultiQueryText(
|
||||
return MultiQueryProcessingStage::QUERIES_END;
|
||||
|
||||
// Remove leading empty newlines and other whitespace, because they
|
||||
// are annoying to filter in query log. This is mostly relevant for
|
||||
// are annoying to filter in the query log. This is mostly relevant for
|
||||
// the tests.
|
||||
while (this_query_begin < all_queries_end && isWhitespaceASCII(*this_query_begin))
|
||||
++this_query_begin;
|
||||
@ -2086,7 +2086,7 @@ MultiQueryProcessingStage ClientBase::analyzeMultiQueryText(
|
||||
{
|
||||
parsed_query = parseQuery(this_query_end, all_queries_end, true);
|
||||
}
|
||||
catch (Exception & e)
|
||||
catch (const Exception & e)
|
||||
{
|
||||
current_exception.reset(e.clone());
|
||||
return MultiQueryProcessingStage::PARSING_EXCEPTION;
|
||||
@ -2111,9 +2111,9 @@ MultiQueryProcessingStage ClientBase::analyzeMultiQueryText(
|
||||
// INSERT queries may have the inserted data in the query text
|
||||
// that follow the query itself, e.g. "insert into t format CSV 1;2".
|
||||
// They need special handling. First of all, here we find where the
|
||||
// inserted data ends. In multy-query mode, it is delimited by a
|
||||
// inserted data ends. In multi-query mode, it is delimited by a
|
||||
// newline.
|
||||
// The VALUES format needs even more handling -- we also allow the
|
||||
// The VALUES format needs even more handling - we also allow the
|
||||
// data to be delimited by semicolon. This case is handled later by
|
||||
// the format parser itself.
|
||||
// We can't do multiline INSERTs with inline data, because most
|
||||
|
@ -161,7 +161,7 @@ void highlight(const String & query, std::vector<replxx::Replxx::Color> & colors
|
||||
if (pos >= colors.size())
|
||||
pos = colors.size() - 1;
|
||||
|
||||
colors[pos] = replxx::color::bg(replxx::color::rgb666(5, 3, 3));
|
||||
colors[pos] = Replxx::Color::BRIGHTRED;
|
||||
}
|
||||
|
||||
if (last_token.type == TokenType::Semicolon || last_token.type == TokenType::VerticalDelimiter
|
||||
|
@ -60,21 +60,6 @@ bool parseDatabaseAndTableAsAST(IParser::Pos & pos, Expected & expected, ASTPtr
|
||||
}
|
||||
|
||||
|
||||
bool parseDatabase(IParser::Pos & pos, Expected & expected, String & database_str)
|
||||
{
|
||||
ParserToken s_dot(TokenType::Dot);
|
||||
ParserIdentifier identifier_parser;
|
||||
|
||||
ASTPtr database;
|
||||
database_str = "";
|
||||
|
||||
if (!identifier_parser.parse(pos, database, expected))
|
||||
return false;
|
||||
|
||||
tryGetIdentifierNameInto(database, database_str);
|
||||
return true;
|
||||
}
|
||||
|
||||
bool parseDatabaseAsAST(IParser::Pos & pos, Expected & expected, ASTPtr & database)
|
||||
{
|
||||
ParserIdentifier identifier_parser(/* allow_query_parameter */true);
|
||||
|
@ -226,24 +226,27 @@ std::string getUnmatchedParenthesesErrorMessage(
|
||||
}
|
||||
|
||||
|
||||
const char * getInsertData(const ASTPtr & ast)
|
||||
static ASTInsertQuery * getInsertAST(const ASTPtr & ast)
|
||||
{
|
||||
/// Either it is INSERT or EXPLAIN INSERT.
|
||||
|
||||
ASTInsertQuery * insert = nullptr;
|
||||
if (auto * explain = ast->as<ASTExplainQuery>())
|
||||
{
|
||||
if (auto explained_query = explain->getExplainedQuery())
|
||||
{
|
||||
insert = explained_query->as<ASTInsertQuery>();
|
||||
return explained_query->as<ASTInsertQuery>();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
insert = ast->as<ASTInsertQuery>();
|
||||
return ast->as<ASTInsertQuery>();
|
||||
}
|
||||
|
||||
if (insert)
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const char * getInsertData(const ASTPtr & ast)
|
||||
{
|
||||
if (const ASTInsertQuery * insert = getInsertAST(ast))
|
||||
return insert->data;
|
||||
return nullptr;
|
||||
}
|
||||
@ -439,11 +442,9 @@ std::pair<const char *, bool> splitMultipartQuery(
|
||||
|
||||
ast = parseQueryAndMovePosition(parser, pos, end, "", true, max_query_size, max_parser_depth, max_parser_backtracks);
|
||||
|
||||
auto * insert = ast->as<ASTInsertQuery>();
|
||||
|
||||
if (insert && insert->data)
|
||||
if (ASTInsertQuery * insert = getInsertAST(ast))
|
||||
{
|
||||
/// Data for INSERT is broken on new line
|
||||
/// Data for INSERT is broken on the new line
|
||||
pos = insert->data;
|
||||
while (*pos && *pos != '\n')
|
||||
++pos;
|
||||
|
Loading…
Reference in New Issue
Block a user