Skip to content

fix(parquet): report REQUIRED nulls in object columns; clearer DECIMAL errors - #638

Open
dfa1 wants to merge 1 commit into
mainfrom
fix/parquet-decimal-followups
Open

dfa1 wants to merge 1 commit into
mainfrom
fix/parquet-decimal-followups

Conversation

@dfa1

@dfa1 dfa1 commented Nov 1, 2026

Copy link
Copy Markdown
Owner

Follow-up to #628 (#632), from its independent review.

  • hardwood's getString/getBinary/getDecimal return null instead of throwing, so a null under a REQUIRED string, binary or DECIMAL column reached the writer and was reported at its row within the chunk, and a REQUIRED FLOAT16 stored it as a silent +0.0. All four now take the importer's REQUIRED path, which reports the file row.
  • A DECIMAL wider than Vortex's 76 digits (Parquet allows it on a byte array) failed in DType.Decimal.of with no column name; it now fails with an UnsupportedOperationException naming the column.

Tests

  • REQUIRED DECIMAL round trip in all four physical encodings (the non-nullable BigDecimal[] path had no test).
  • The REQUIRED-null paths for utf8/binary/float16/decimal and the wide-precision error; the four new error tests fail without the change.
  • ParquetImportInteropIntegrationTest's precision-50 vortex-jni case now holds values only an i256 holds, of both signs (it claimed i256 but stayed under 1e12, all negative).

CHANGELOG: folded into the unreleased #628 entry.

Reviewed independently (vortex-reviewer agent): approved; its should-fix items (the same null gap in string/binary/FLOAT16, the CHANGELOG entry, all-negative test values) are in this commit.

Open question, not changed here: a Parquet decimal value that overflows its declared precision is rejected by the writer's BigDecimal validation, while Rust's Arrow import does not check.

🤖 Generated with Claude Code

https://claude.ai/code/session_011fRbYryTxfcu5j2CXwkSzd

…L errors

Follow-up to #628 from its review:

- hardwood's getString, getBinary and getDecimal return null instead of
  throwing, so a null under a REQUIRED string, binary or DECIMAL column
  reached the writer and was reported at its row within the chunk, and a
  REQUIRED FLOAT16 stored it as a silent +0.0. All four now take the
  importer's REQUIRED path, which reports the file row.
- A DECIMAL wider than Vortex's 76 digits, which Parquet allows on a byte
  array, failed in DType.Decimal.of with no column name. The import now
  fails with an UnsupportedOperationException naming the column, as for its
  other unsupported types.
- Tests: a REQUIRED DECIMAL column in all four physical encodings (the
  non-nullable BigDecimal[] path had none), the errors above, and the
  precision-50 vortex-jni case now holds values only an i256 holds, of both
  signs, which it claimed but did not.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011fRbYryTxfcu5j2CXwkSzd

This branch has not been deployed

No deployments
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.

1 participant