Skip to content

Commit 06fe8db

Browse files
committed
Split parse_statements from parse_sql
`Parser::parse_sql()` is intended to be only a helper, the user should be able to use it or not, without having to re-implement parts of the parsing logic.
1 parent 46b2b61 commit 06fe8db

File tree

1 file changed

+9
-5
lines changed

1 file changed

+9
-5
lines changed

src/parser.rs

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -86,22 +86,26 @@ impl Parser {
8686
let mut tokenizer = Tokenizer::new(dialect, &sql);
8787
let tokens = tokenizer.tokenize()?;
8888
let mut parser = Parser::new(tokens);
89+
parser.parse_statements()
90+
}
91+
92+
/// Parse zero or more SQL statements delimited with semicolon.
93+
pub fn parse_statements(&mut self) -> Result<Vec<Statement>, ParserError> {
8994
let mut stmts = Vec::new();
9095
let mut expecting_statement_delimiter = false;
91-
debug!("Parsing sql '{}'...", sql);
9296
loop {
9397
// ignore empty statements (between successive statement delimiters)
94-
while parser.consume_token(&Token::SemiColon) {
98+
while self.consume_token(&Token::SemiColon) {
9599
expecting_statement_delimiter = false;
96100
}
97101

98-
if parser.peek_token().is_none() {
102+
if self.peek_token().is_none() {
99103
break;
100104
} else if expecting_statement_delimiter {
101-
return parser.expected("end of statement", parser.peek_token());
105+
return self.expected("end of statement", self.peek_token());
102106
}
103107

104-
let statement = parser.parse_statement()?;
108+
let statement = self.parse_statement()?;
105109
stmts.push(statement);
106110
expecting_statement_delimiter = true;
107111
}

0 commit comments

Comments
 (0)