Skip to content

Commit 34f20f1

Browse files
ovrMazterQyou
authored andcommitted
feat: Support SUBSTRING with command instead of from/for
1 parent 6d63c04 commit 34f20f1

File tree

2 files changed

+14
-1
lines changed

2 files changed

+14
-1
lines changed

src/parser.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,15 +783,18 @@ impl<'a> Parser<'a> {
783783
// PARSE SUBSTRING (EXPR [FROM 1] [FOR 3])
784784
self.expect_token(&Token::LParen)?;
785785
let expr = self.parse_expr()?;
786+
786787
let mut from_expr = None;
788+
let mut to_expr = None;
789+
787790
if self.parse_keyword(Keyword::FROM) || self.consume_token(&Token::Comma) {
788791
from_expr = Some(self.parse_expr()?);
789792
}
790793

791-
let mut to_expr = None;
792794
if self.parse_keyword(Keyword::FOR) || self.consume_token(&Token::Comma) {
793795
to_expr = Some(self.parse_expr()?);
794796
}
797+
795798
self.expect_token(&Token::RParen)?;
796799

797800
Ok(Expr::Substring {

tests/sqlparser_common.rs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3375,6 +3375,16 @@ fn parse_substring() {
33753375
"SELECT SUBSTRING('1' FROM 1)",
33763376
);
33773377

3378+
one_statement_parses_to(
3379+
"SELECT SUBSTRING('Function SUBSTRING', 9)",
3380+
"SELECT SUBSTRING('Function SUBSTRING' FROM 9)",
3381+
);
3382+
3383+
one_statement_parses_to(
3384+
"SELECT SUBSTRING('Function SUBSTRING', 1, 8)",
3385+
"SELECT SUBSTRING('Function SUBSTRING' FROM 1 FOR 8)",
3386+
);
3387+
33783388
one_statement_parses_to(
33793389
"SELECT SUBSTRING('1' FROM 1 FOR 3)",
33803390
"SELECT SUBSTRING('1' FROM 1 FOR 3)",

0 commit comments

Comments
 (0)