Skip to content

Commit d9f4b31

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 c89aa7e commit d9f4b31

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;
@@ -179,8 +179,6 @@ impl Dialect for MsSqlDialect {
179179
Keyword::TRIGGER,
180180
]) {
181181
Some(self.parse_create_trigger(parser, true))
182-
} else if parser.parse_keyword(Keyword::WAITFOR) {
183-
Some(self.parse_waitfor(parser))
184182
} else {
185183
None
186184
}
@@ -345,19 +343,4 @@ impl MsSqlDialect {
345343
}
346344
Ok(stmts)
347345
}
348-
349-
/// Parse `WAITFOR { DELAY 'time' | TIME 'time' }`
350-
///
351-
/// See: <https://learn.microsoft.com/en-us/sql/t-sql/language-elements/waitfor-transact-sql>
352-
fn parse_waitfor(&self, parser: &mut Parser) -> Result<Statement, ParserError> {
353-
let wait_type = if parser.parse_keyword(Keyword::DELAY) {
354-
WaitForType::Delay
355-
} else if parser.parse_keyword(Keyword::TIME) {
356-
WaitForType::Time
357-
} else {
358-
return parser.expected("DELAY or TIME", parser.peek_token());
359-
};
360-
let expr = parser.parse_expr()?;
361-
Ok(Statement::WaitFor(WaitForStatement { wait_type, expr }))
362-
}
363346
}

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();
@@ -19182,6 +19184,21 @@ impl<'a> Parser<'a> {
1918219184
}))
1918319185
}
1918419186

19187+
/// Parse [Statement::WaitFor]
19188+
///
19189+
/// See: <https://learn.microsoft.com/en-us/sql/t-sql/language-elements/waitfor-transact-sql>
19190+
fn parse_waitfor(&mut self) -> Result<Statement, ParserError> {
19191+
let wait_type = if self.parse_keyword(Keyword::DELAY) {
19192+
WaitForType::Delay
19193+
} else if self.parse_keyword(Keyword::TIME) {
19194+
WaitForType::Time
19195+
} else {
19196+
return self.expected("DELAY or TIME", self.peek_token());
19197+
};
19198+
let expr = self.parse_expr()?;
19199+
Ok(Statement::WaitFor(WaitForStatement { wait_type, expr }))
19200+
}
19201+
1918519202
/// Parse [Statement::Return]
1918619203
fn parse_return(&mut self) -> Result<Statement, ParserError> {
1918719204
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)