Skip to content

Commit 98a684d

Browse files
committed
feat(parser): reject duplicate LIMIT/OFFSET clauses
1 parent 12b1e3a commit 98a684d

1 file changed

Lines changed: 6 additions & 0 deletions

File tree

src/parser/parser.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,18 +248,24 @@ std::unique_ptr<Statement> Parser::parse_select() {
248248
}
249249

250250
/* LIMIT and OFFSET */
251+
bool limit_set = false;
252+
bool offset_set = false;
251253
while (true) {
252254
if (consume(TokenType::Limit)) {
255+
if (limit_set) return nullptr;
253256
const Token val = next_token();
254257
if (val.type() == TokenType::Number) {
255258
stmt->set_limit(val.as_int64());
259+
limit_set = true;
256260
} else {
257261
return nullptr;
258262
}
259263
} else if (consume(TokenType::Offset)) {
264+
if (offset_set) return nullptr;
260265
const Token val = next_token();
261266
if (val.type() == TokenType::Number) {
262267
stmt->set_offset(val.as_int64());
268+
offset_set = true;
263269
} else {
264270
return nullptr;
265271
}

0 commit comments

Comments
 (0)