Skip to content

Commit 998e858

Browse files
guan404mingiffyio
andcommitted
Move WAITFOR parsing to generic parser
Co-authored-by: Ifeanyi Ubah <7816405+iffyio@users.noreply.github.com> Signed-off-by: Guan-Ming Chiu <guanmingchiu@gmail.com>
1 parent 12a99e6 commit 998e858

3 files changed

Lines changed: 20 additions & 20 deletions

File tree

src/dialect/mssql.rs

Lines changed: 1 addition & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use crate::ast::helpers::attached_token::AttachedToken;
1919
use crate::ast::{
2020
BeginEndStatements, ConditionalStatementBlock, ConditionalStatements, CreateTrigger,
21-
GranteesType, IfStatement, Statement, WaitForStatement, WaitForType,
21+
GranteesType, IfStatement, Statement,
2222
};
2323
use crate::dialect::Dialect;
2424
use crate::keywords::Keyword;
@@ -183,8 +183,6 @@ impl Dialect for MsSqlDialect {
183183
Keyword::TRIGGER,
184184
]) {
185185
Some(self.parse_create_trigger(parser, true))
186-
} else if parser.parse_keyword(Keyword::WAITFOR) {
187-
Some(self.parse_waitfor(parser))
188186
} else {
189187
None
190188
}
@@ -349,19 +347,4 @@ impl MsSqlDialect {
349347
}
350348
Ok(stmts)
351349
}
352-
353-
/// Parse `WAITFOR { DELAY 'time' | TIME 'time' }`
354-
///
355-
/// See: <https://learn.microsoft.com/en-us/sql/t-sql/language-elements/waitfor-transact-sql>
356-
fn parse_waitfor(&self, parser: &mut Parser) -> Result<Statement, ParserError> {
357-
let wait_type = if parser.parse_keyword(Keyword::DELAY) {
358-
WaitForType::Delay
359-
} else if parser.parse_keyword(Keyword::TIME) {
360-
WaitForType::Time
361-
} else {
362-
return parser.expected("DELAY or TIME", parser.peek_token());
363-
};
364-
let expr = parser.parse_expr()?;
365-
Ok(Statement::WaitFor(WaitForStatement { wait_type, expr }))
366-
}
367350
}

src/parser/mod.rs

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -703,6 +703,8 @@ impl<'a> Parser<'a> {
703703
// `COMMENT` is snowflake specific https://docs.snowflake.com/en/sql-reference/sql/comment
704704
Keyword::COMMENT if self.dialect.supports_comment_on() => self.parse_comment(),
705705
Keyword::PRINT => self.parse_print(),
706+
// `WAITFOR` is MSSQL specific https://learn.microsoft.com/en-us/sql/t-sql/language-elements/waitfor-transact-sql
707+
Keyword::WAITFOR => self.parse_waitfor(),
706708
Keyword::RETURN => self.parse_return(),
707709
Keyword::EXPORT => {
708710
self.prev_token();
@@ -19289,6 +19291,21 @@ impl<'a> Parser<'a> {
1928919291
}))
1929019292
}
1929119293

19294+
/// Parse [Statement::WaitFor]
19295+
///
19296+
/// See: <https://learn.microsoft.com/en-us/sql/t-sql/language-elements/waitfor-transact-sql>
19297+
fn parse_waitfor(&mut self) -> Result<Statement, ParserError> {
19298+
let wait_type = if self.parse_keyword(Keyword::DELAY) {
19299+
WaitForType::Delay
19300+
} else if self.parse_keyword(Keyword::TIME) {
19301+
WaitForType::Time
19302+
} else {
19303+
return self.expected("DELAY or TIME", self.peek_token());
19304+
};
19305+
let expr = self.parse_expr()?;
19306+
Ok(Statement::WaitFor(WaitForStatement { wait_type, expr }))
19307+
}
19308+
1929219309
/// Parse [Statement::Return]
1929319310
fn parse_return(&mut self) -> Result<Statement, ParserError> {
1929419311
match self.maybe_parse(|p| p.parse_expr())? {

tests/sqlparser_mssql.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1706,7 +1706,7 @@ fn test_parse_throw() {
17061706
fn test_parse_waitfor() {
17071707
// WAITFOR DELAY
17081708
let sql = "WAITFOR DELAY '00:00:05'";
1709-
let stmt = ms().verified_stmt(sql);
1709+
let stmt = ms_and_generic().verified_stmt(sql);
17101710
assert_eq!(
17111711
stmt,
17121712
Statement::WaitFor(WaitForStatement {
@@ -1719,7 +1719,7 @@ fn test_parse_waitfor() {
17191719

17201720
// WAITFOR TIME
17211721
let sql = "WAITFOR TIME '14:30:00'";
1722-
let stmt = ms().verified_stmt(sql);
1722+
let stmt = ms_and_generic().verified_stmt(sql);
17231723
assert_eq!(
17241724
stmt,
17251725
Statement::WaitFor(WaitForStatement {

0 commit comments

Comments
 (0)