@@ -279,12 +279,17 @@ impl<'a> DFParser<'a> {
279279 sql : & str ,
280280 dialect : & ' a dyn Dialect ,
281281 ) -> Result < Self , ParserError > {
282- let mut tokenizer = Tokenizer :: new ( dialect, sql) ;
283- let tokens = tokenizer. tokenize ( ) ?;
282+ let tokens = Tokenizer :: new ( dialect, sql) . into_tokens ( ) . collect :: < Result < _ , _ > > ( ) ?;
283+ Ok ( Self :: from_dialect_and_tokens ( dialect, tokens) )
284+ }
284285
285- Ok ( DFParser {
286- parser : Parser :: new ( dialect) . with_tokens ( tokens) ,
287- } )
286+ /// Create a new parser from specified dialect and tokens.
287+ pub fn from_dialect_and_tokens (
288+ dialect : & ' a dyn Dialect ,
289+ tokens : Vec < Token > ,
290+ ) -> Self {
291+ let parser = Parser :: new ( dialect) . with_tokens ( tokens) ;
292+ DFParser { parser }
288293 }
289294
290295 /// Parse a sql string into one or [`Statement`]s using the
@@ -300,7 +305,18 @@ impl<'a> DFParser<'a> {
300305 sql : & str ,
301306 dialect : & dyn Dialect ,
302307 ) -> Result < VecDeque < Statement > , ParserError > {
303- let mut parser = DFParser :: new_with_dialect ( sql, dialect) ?;
308+ let tokenizer = Tokenizer :: new ( dialect, sql) ;
309+ let tokens = tokenizer. into_tokens ( ) . collect :: < Result < _ , _ > > ( ) ?;
310+ Self :: parse_tokens_with_dialect ( tokens, dialect)
311+ }
312+
313+ /// Parse SQL tokens and produce one or more [`Statement`]s with
314+ /// the specified dialect.
315+ pub fn parse_tokens_with_dialect (
316+ tokens : Vec < Token > ,
317+ dialect : & dyn Dialect ,
318+ ) -> Result < VecDeque < Statement > , ParserError > {
319+ let mut parser = DFParser :: from_dialect_and_tokens ( dialect, tokens) ;
304320 let mut stmts = VecDeque :: new ( ) ;
305321 let mut expecting_statement_delimiter = false ;
306322 loop {
0 commit comments