GeezerVisonThe World Wide Web, restored to 800 pixels of glory. | |||||||||||||||||||
| Home|About|Gaming cabinet|Archives|How it works|Starter sites | |||||||||||||||||||
GeezerVison is showing github.com — DuckDB: accept digit separators in numeric literals by guizmaii · Pull Request #2797 · JSQLParser/JSqlParser Conversation
|
| Input | Default (unchanged) | withDigitSeparators() / Dialect.POSTGRESQL |
|---|---|---|
1_000 |
Column 1_000 |
LongValue 1000 |
92_000.0 |
error | DoubleValue 92000.0 |
1e1_0 |
Column 1e1_0 |
DoubleValue 1e10 |
LIMIT 1_000 |
LIMIT column 1_000 |
LIMIT 1000 |
FROM 2024_01 |
table 2024_01 |
error |
Feature.allowDigitSeparators (default false) with withDigitSeparators(); Dialect.POSTGRESQL enables it.Dialect.POSTGRESQL only: 2024_01 is now LongValue 202401 instead of a column, as PostgreSQL never allows unquoted digit-led identifiers (PostgreSQL < 16 reads 1_000 as 1 AS _000).S_LONG accepts _ between digits. Under the feature, the lexical action drops the separators from the image, so the ~30 grammar actions that read number tokens (Long.valueOf(token.image), ...) need no change. 1_000 deparses as 1000.2024_01, or .5 before _5). The default output is identical to master on the whole DuckDB test suite below.checkGrammarAmbiguity: no conflicts. ./gradlew check: 10,125 tests, 0 failures.test/sql, 70,729 statements): default mode identical to master; with the feature, 10 more parse, none less.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
`1_000_000`, `92_000.0` and `1e1_0` are numbers in DuckDB and PostgreSQL 16, but MySQL reads `2024_01` as an identifier. The new `Feature.allowDigitSeparators`, enabled by the PostgreSQL dialect, drops the separators from the token image, so every consumer of number tokens keeps working. Without it, lexing is unchanged.
There was a problem hiding this comment.
The reason will be displayed to describe this comment to others. Learn more.
Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
|
Good one, thank you! |
Sorry, something went wrong.
There was an error while loading. Please reload this page.
There was an error while loading. Please reload this page.
Successfully merging this pull request may close these issues.
There was an error while loading. Please reload this page.