mirror of
https://github.com/apache/datafusion-sqlparser-rs.git
synced 2025-08-04 06:18:17 +00:00
Support \r and \r\n line breaks in tokenizer
This commit is contained in:
parent
ef76baa7fd
commit
6f44494910
1 changed files with 28 additions and 0 deletions
|
@ -272,6 +272,14 @@ impl<'a> Tokenizer<'a> {
|
|||
chars.next();
|
||||
Ok(Some(Token::Whitespace(Whitespace::Newline)))
|
||||
}
|
||||
'\r' => {
|
||||
// Emit a single Whitespace::Newline token for \r and \r\n
|
||||
chars.next();
|
||||
if let Some('\n') = chars.peek() {
|
||||
chars.next();
|
||||
}
|
||||
Ok(Some(Token::Whitespace(Whitespace::Newline)))
|
||||
}
|
||||
'N' => {
|
||||
chars.next(); // consume, to check the next char
|
||||
match chars.peek() {
|
||||
|
@ -743,6 +751,26 @@ mod tests {
|
|||
compare(expected, tokens);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn tokenize_newlines() {
|
||||
let sql = String::from("line1\nline2\rline3\r\nline4\r");
|
||||
|
||||
let dialect = GenericSqlDialect {};
|
||||
let mut tokenizer = Tokenizer::new(&dialect, &sql);
|
||||
let tokens = tokenizer.tokenize().unwrap();
|
||||
let expected = vec![
|
||||
Token::make_word("line1", None),
|
||||
Token::Whitespace(Whitespace::Newline),
|
||||
Token::make_word("line2", None),
|
||||
Token::Whitespace(Whitespace::Newline),
|
||||
Token::make_word("line3", None),
|
||||
Token::Whitespace(Whitespace::Newline),
|
||||
Token::make_word("line4", None),
|
||||
Token::Whitespace(Whitespace::Newline),
|
||||
];
|
||||
compare(expected, tokens);
|
||||
}
|
||||
|
||||
fn compare(expected: Vec<Token>, actual: Vec<Token>) {
|
||||
//println!("------------------------------");
|
||||
//println!("tokens = {:?}", actual);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue