Add APIs to reuse token buffers in Tokenizer (#1094)

This commit is contained in:
0rphon 2024-01-22 11:46:36 -08:00 committed by GitHub
parent b0b62887a2
commit d72f0a966b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 32 additions and 4 deletions

View file

@ -31,6 +31,7 @@ use sqlparser::dialect::{
};
use sqlparser::keywords::ALL_KEYWORDS;
use sqlparser::parser::{Parser, ParserError, ParserOptions};
use sqlparser::tokenizer::Tokenizer;
use test_utils::{
all_dialects, alter_table_op, assert_eq_vec, expr_from_projection, join, number, only, table,
table_alias, TestedDialects,
@ -8080,3 +8081,16 @@ fn test_release_savepoint() {
one_statement_parses_to("RELEASE test1", "RELEASE SAVEPOINT test1");
}
#[test]
fn test_buffer_reuse() {
let d = GenericDialect {};
let q = "INSERT INTO customer WITH foo AS (SELECT 1) SELECT * FROM foo UNION VALUES (1)";
let mut buf = Vec::new();
Tokenizer::new(&d, q)
.tokenize_with_location_into_buf(&mut buf)
.unwrap();
let mut p = Parser::new(&d).with_tokens_with_locations(buf);
p.parse_statements().unwrap();
let _ = p.into_tokens();
}