@@ -279,12 +279,17 @@ impl<'a> DFParser<'a> {
279
279
sql : & str ,
280
280
dialect : & ' a dyn Dialect ,
281
281
) -> 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
+ }
284
285
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 }
288
293
}
289
294
290
295
/// Parse a sql string into one or [`Statement`]s using the
@@ -300,7 +305,18 @@ impl<'a> DFParser<'a> {
300
305
sql : & str ,
301
306
dialect : & dyn Dialect ,
302
307
) -> 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) ;
304
320
let mut stmts = VecDeque :: new ( ) ;
305
321
let mut expecting_statement_delimiter = false ;
306
322
loop {
0 commit comments