mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-09-20 08:40:50 +00:00
Another try
This commit is contained in:
parent
b72818f6d6
commit
fa0a9aa989
@ -35,8 +35,6 @@ bool ParserKeyword::parseImpl(Pos & pos, [[maybe_unused]] ASTPtr & node, Expecte
|
||||
current_word = next_whitespace + 1;
|
||||
}
|
||||
|
||||
/// Avoid excessive backtracking.
|
||||
pos.putBarrier();
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -688,6 +688,9 @@ bool ParserFunction::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
|
||||
return false;
|
||||
++pos;
|
||||
|
||||
/// Avoid excessive backtracking.
|
||||
pos.putBarrier();
|
||||
|
||||
/// Special cases for expressions that look like functions but contain some syntax sugar:
|
||||
|
||||
/// CAST, EXTRACT, POSITION, EXISTS
|
||||
@ -715,9 +718,7 @@ bool ParserFunction::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
|
||||
String function_name = getIdentifierName(identifier);
|
||||
String function_name_lowercase = Poco::toLower(function_name);
|
||||
|
||||
pos.no_backtrack_if_failure = true;
|
||||
|
||||
bool parsed_special_function = false;
|
||||
std::optional<bool> parsed_special_function;
|
||||
|
||||
if (function_name_lowercase == "cast")
|
||||
parsed_special_function = parseCastAs(pos, node, expected);
|
||||
@ -745,8 +746,8 @@ bool ParserFunction::parseImpl(Pos & pos, ASTPtr & node, Expected & expected)
|
||||
|| function_name_lowercase == "timestampdiff" || function_name_lowercase == "timestamp_diff")
|
||||
parsed_special_function = parseDateDiff(pos, node, expected);
|
||||
|
||||
if (parsed_special_function)
|
||||
return ParserToken(TokenType::ClosingRoundBracket).ignore(pos);
|
||||
if (parsed_special_function.has_value())
|
||||
return parsed_special_function.value() && ParserToken(TokenType::ClosingRoundBracket).ignore(pos);
|
||||
|
||||
auto pos_after_bracket = pos;
|
||||
auto old_expected = expected;
|
||||
|
@ -31,11 +31,7 @@ public:
|
||||
bool res = func();
|
||||
pos.decreaseDepth();
|
||||
if (!res)
|
||||
{
|
||||
if (!(pos <= begin))
|
||||
std::cerr << "Backtracked from " << pos->begin << " to " << begin->begin << "\n";
|
||||
pos = begin;
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user