Skip to content

Commit 57a62ae

Browse files
authored
Support numeric underscore separators for DuckDB and SQLite (#2412)
1 parent 797fc9b commit 57a62ae

3 files changed

Lines changed: 15 additions & 1 deletion

File tree

src/dialect/duckdb.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -138,4 +138,8 @@ impl Dialect for DuckDbDialect {
138138
fn supports_comma_separated_trim(&self) -> bool {
139139
true
140140
}
141+
142+
fn supports_numeric_literal_underscores(&self) -> bool {
143+
true
144+
}
141145
}

src/dialect/sqlite.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,8 @@ impl Dialect for SQLiteDialect {
125125
fn supports_comma_separated_trim(&self) -> bool {
126126
true
127127
}
128+
129+
fn supports_numeric_literal_underscores(&self) -> bool {
130+
true
131+
}
128132
}

src/tokenizer.rs

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2757,7 +2757,7 @@ mod tests {
27572757
compare(expected, tokens);
27582758

27592759
all_dialects_where(|dialect| dialect.supports_numeric_literal_underscores()).tokenizes_to(
2760-
"SELECT 10_000, _10_000, 10_00_, 10___0",
2760+
"SELECT 10_000, _10_000, 10_00_, 10___0, 1_000.123, 1_000.123_456",
27612761
vec![
27622762
Token::make_keyword("SELECT"),
27632763
Token::Whitespace(Whitespace::Space),
@@ -2773,6 +2773,12 @@ mod tests {
27732773
Token::Whitespace(Whitespace::Space),
27742774
Token::Number("10".to_string(), false),
27752775
Token::make_word("___0", None), // multiple underscores tokenizes as a word (syntax error in some dialects)
2776+
Token::Comma,
2777+
Token::Whitespace(Whitespace::Space),
2778+
Token::Number("1_000.123".to_string(), false), // with decimal digits
2779+
Token::Comma,
2780+
Token::Whitespace(Whitespace::Space),
2781+
Token::Number("1_000.123_456".to_string(), false), // with an underscore in the decimal digits
27762782
],
27772783
);
27782784
}

0 commit comments

Comments
 (0)