mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-07-07 17:04:59 +00:00
fix: parse snowflake fetch clause (#1894)
This commit is contained in:
parent
5d63663bc6
commit
44f3be38e5
2 changed files with 25 additions and 5 deletions
|
@ -15023,7 +15023,8 @@ impl<'a> Parser<'a> {
|
|||
|
||||
/// Parse a FETCH clause
|
||||
pub fn parse_fetch(&mut self) -> Result<Fetch, ParserError> {
|
||||
self.expect_one_of_keywords(&[Keyword::FIRST, Keyword::NEXT])?;
|
||||
let _ = self.parse_one_of_keywords(&[Keyword::FIRST, Keyword::NEXT]);
|
||||
|
||||
let (quantity, percent) = if self
|
||||
.parse_one_of_keywords(&[Keyword::ROW, Keyword::ROWS])
|
||||
.is_some()
|
||||
|
@ -15032,16 +15033,16 @@ impl<'a> Parser<'a> {
|
|||
} else {
|
||||
let quantity = Expr::Value(self.parse_value()?);
|
||||
let percent = self.parse_keyword(Keyword::PERCENT);
|
||||
self.expect_one_of_keywords(&[Keyword::ROW, Keyword::ROWS])?;
|
||||
let _ = self.parse_one_of_keywords(&[Keyword::ROW, Keyword::ROWS]);
|
||||
(Some(quantity), percent)
|
||||
};
|
||||
|
||||
let with_ties = if self.parse_keyword(Keyword::ONLY) {
|
||||
false
|
||||
} else if self.parse_keywords(&[Keyword::WITH, Keyword::TIES]) {
|
||||
true
|
||||
} else {
|
||||
return self.expected("one of ONLY or WITH TIES", self.peek_token());
|
||||
self.parse_keywords(&[Keyword::WITH, Keyword::TIES])
|
||||
};
|
||||
|
||||
Ok(Fetch {
|
||||
with_ties,
|
||||
percent,
|
||||
|
|
|
@ -4146,3 +4146,22 @@ END
|
|||
assert_eq!(2, exception[1].idents.len());
|
||||
assert_eq!(2, exception[1].statements.len());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_snowflake_fetch_clause_syntax() {
|
||||
let canonical = "SELECT c1 FROM fetch_test FETCH FIRST 2 ROWS ONLY";
|
||||
snowflake().verified_only_select_with_canonical("SELECT c1 FROM fetch_test FETCH 2", canonical);
|
||||
|
||||
snowflake()
|
||||
.verified_only_select_with_canonical("SELECT c1 FROM fetch_test FETCH FIRST 2", canonical);
|
||||
snowflake()
|
||||
.verified_only_select_with_canonical("SELECT c1 FROM fetch_test FETCH NEXT 2", canonical);
|
||||
|
||||
snowflake()
|
||||
.verified_only_select_with_canonical("SELECT c1 FROM fetch_test FETCH 2 ROW", canonical);
|
||||
|
||||
snowflake().verified_only_select_with_canonical(
|
||||
"SELECT c1 FROM fetch_test FETCH FIRST 2 ROWS",
|
||||
canonical,
|
||||
);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue