Skip to content

Conversation

@kyleconroy
Copy link
Collaborator

This PR fixes several issues with the ClickHouse SQL parser:

  1. LIMIT/OFFSET order in EXPLAIN AST output

    • Changed internal/explain/select.go to output OFFSET before LIMIT
    • ClickHouse's EXPLAIN AST outputs offset before limit when using
      the LIMIT x, y syntax
  2. Hex literal conversion

    • Fixed parser/expression.go to properly parse hex (0x), binary (0b),
      and octal (0o) literals
    • Hex literals containing 'e' (like 0xABCDEF) were incorrectly being
      parsed as floats because 'e' was interpreted as an exponent
    • Added isHex/isBin/isOctal checks before float detection
    • ClickHouse does NOT interpret leading zeros as octal (077 = 77, not 63),
      so we use base 10 for numbers without explicit 0x/0b/0o prefix
  3. Updated 5844 test metadata files

    • Removed todo:true from tests that now pass
    • Tests now verify EXPLAIN AST output matches ClickHouse

Test results:

  • 5887 tests pass (up from ~43 previously)
  • 937 tests still skipped (intentionally invalid SQL, truncated expected output, etc.)

… 5844 tests

This PR fixes several issues with the ClickHouse SQL parser:

1. LIMIT/OFFSET order in EXPLAIN AST output
   - Changed internal/explain/select.go to output OFFSET before LIMIT
   - ClickHouse's EXPLAIN AST outputs offset before limit when using
     the LIMIT x, y syntax

2. Hex literal conversion
   - Fixed parser/expression.go to properly parse hex (0x), binary (0b),
     and octal (0o) literals
   - Hex literals containing 'e' (like 0xABCDEF) were incorrectly being
     parsed as floats because 'e' was interpreted as an exponent
   - Added isHex/isBin/isOctal checks before float detection
   - ClickHouse does NOT interpret leading zeros as octal (077 = 77, not 63),
     so we use base 10 for numbers without explicit 0x/0b/0o prefix

3. Updated 5844 test metadata files
   - Removed todo:true from tests that now pass
   - Tests now verify EXPLAIN AST output matches ClickHouse

Test results:
- 5887 tests pass (up from ~43 previously)
- 937 tests still skipped (intentionally invalid SQL, truncated expected output, etc.)
…xpressions

- Fix formatArrayLiteral and formatTupleLiteral to use formatExprAsString
  instead of fmt.Sprintf("%v") for complex expressions
- Add handling for FunctionCall, BinaryExpr, UnaryExpr, and InExpr in
  formatExprAsString and formatElementAsString
- Update 179 truncated test expected outputs with correct parser output
- Update 11 tests incorrectly marked as parse_error
- Fix 2 tests with corrupted expected outputs (Go struct addresses)

This reduces skipped tests from 954 to 758 (196 fewer skipped tests).
@kyleconroy kyleconroy merged commit 249b95e into main Dec 15, 2025
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants