Skip to content

Commit 347f769

Browse files
committed
feat: Support placeholders in OFFSET, FETCH ...
1 parent b7f265a commit 347f769

File tree

2 files changed

+16
-1
lines changed

2 files changed

+16
-1
lines changed

src/parser.rs

+2-1
Original file line numberDiff line numberDiff line change
@@ -2906,6 +2906,7 @@ impl<'a> Parser<'a> {
29062906
pub fn parse_number_value(&mut self) -> Result<Value, ParserError> {
29072907
match self.parse_value()? {
29082908
v @ Value::Number(_, _) => Ok(v),
2909+
v @ Value::Placeholder(_) => Ok(v),
29092910
_ => {
29102911
self.prev_token();
29112912
self.expected("literal number", self.peek_token())
@@ -4478,7 +4479,7 @@ impl<'a> Parser<'a> {
44784479
if self.parse_keyword(Keyword::ALL) {
44794480
Ok(None)
44804481
} else {
4481-
Ok(Some(self.parse_expr()?))
4482+
Ok(Some(Expr::Value(self.parse_number_value()?)))
44824483
}
44834484
}
44844485

tests/sqlparser_common.rs

+14
Original file line numberDiff line numberDiff line change
@@ -4852,6 +4852,20 @@ fn test_placeholder() {
48524852
ast.limit,
48534853
Some(Expr::Value(Value::Placeholder("$1".into())))
48544854
);
4855+
4856+
let sql = "SELECT * FROM student OFFSET $1";
4857+
let ast = dialects.verified_query(sql);
4858+
assert_eq!(
4859+
ast.offset.map(|offset| offset.value),
4860+
Some(Expr::Value(Value::Placeholder("$1".into())))
4861+
);
4862+
4863+
let sql = "SELECT * FROM student FETCH FIRST $1 ROWS ONLY";
4864+
let ast = dialects.verified_query(sql);
4865+
assert_eq!(
4866+
ast.fetch.map(|fetch| fetch.quantity),
4867+
Some(Some(Expr::Value(Value::Placeholder("$1".into()))))
4868+
);
48554869
}
48564870

48574871
#[test]

0 commit comments

Comments
 (0)