| 808 | } |
| 809 | |
| 810 | VariantArray SQLParser::parseValues(Tokenizer& parser) const { |
| 811 | VariantArray values; |
| 812 | for (;;) { |
| 813 | auto tok = parser.NextToken(); |
| 814 | if (tok.Text() == ")"sv && tok.Type() == TokenSymbol) { |
| 815 | break; |
| 816 | } |
| 817 | values.push_back(Token2kv(tok, parser, CompositeAllowed_True, FieldAllowed_False, NullAllowed_True)); |
| 818 | tok = parser.NextToken(); |
| 819 | if (tok.Text() == ")"sv) { |
| 820 | break; |
| 821 | } |
| 822 | if (tok.Text() != ","sv) { |
| 823 | const auto range = parser.Where(tok); |
| 824 | throw SqlParserError(range, "Expected ')' or ',', but found '{}' in query, {}", tok.Text(), range); |
| 825 | } |
| 826 | } |
| 827 | return values; |
| 828 | } |
| 829 | |
| 830 | CondType SQLParser::parseCondition(Tokenizer& parser, OpType& op) { |
| 831 | CondType condition; |