| 24 | } // namespace |
| 25 | |
| 26 | void ExpressionEvaluator::captureArrayContent(Tokenizer& parser) { |
| 27 | std::ignore = arrayValues_.MarkArray(); |
| 28 | Token tok = parser.NextToken(Tokenizer::Flags::NoFlags); |
| 29 | if (tok.Text() == "]"sv) { |
| 30 | return; |
| 31 | } |
| 32 | for (;; tok = parser.NextToken(Tokenizer::Flags::NoFlags)) { |
| 33 | if (tok.Text() == "]"sv) [[unlikely]] { |
| 34 | const auto range = parser.Where(tok); |
| 35 | throw SqlParserError(range, "Expected field value, but found ']' in query, {}", range); |
| 36 | } |
| 37 | arrayValues_.emplace_back(Token2kv(tok, parser, CompositeAllowed_False, FieldAllowed_False, NullAllowed_True)); |
| 38 | tok = parser.NextToken(Tokenizer::Flags::NoFlags); |
| 39 | if (tok.Text() == "]"sv) { |
| 40 | break; |
| 41 | } |
| 42 | if (tok.Text() != ","sv) [[unlikely]] { |
| 43 | const auto range = parser.Where(tok); |
| 44 | throw SqlParserError(range, "Expected ']' or ',', but found '{}' in query, {}", tok.Text(), range); |
| 45 | } |
| 46 | } |
| 47 | } |
| 48 | |
| 49 | void ExpressionEvaluator::throwUnexpectedTokenError(Tokenizer& parser, const Token& outTok) { |
| 50 | if (state_ == StateArrayConcat || parser.PeekToken(Tokenizer::Flags::TreatSignAsToken).Text() == "|"sv) { |
nothing calls this directly
no test coverage detected