Repository navigation
Conversation
Export extensions without an Arrow plugin using their storage type and extension identity annotations. Encode serialized metadata using standard padded base64, tagged with vortex:extension:metadata:encoding=base64. Import unhandled Arrow extensions as ForeignExtDType, decoding tagged metadata and preserving untagged metadata verbatim. Explicit Arrow plugins control canonical formats. Temporal mappings and the native Vortex file representation are unchanged. Arrow import retains unknown identity independently of the file deserialization allow_unknown policy, following Arrow's storage fallback model. Expose the existing foreign dtype and opaque metadata for cross-crate use. Cover top-level and nested round-trips, structural storage, nulls, dictionaries, arbitrary bytes, invalid encodings and plugin precedence. ExtVTable still cannot establish whether storage sorting or equality preserves an extension's logical semantics. Validation: pinned nightly formatter; full tests and doctests for both touched crates; clippy with all targets/features and warnings denied. The final Arrow suite passes all 361 tests. Regression cases fail against the original implementations and pass with these fixes. Patch whitespace checks pass. Signed-off-by: Nicholas Gates <nick@nickgates.com>
Remove unconditional extension unwrapping from the physical Arrow executor. Perform it in the session fallback after exporter plugins have had a chance to handle the target, and only when the requested Arrow type maps to the extension's storage dtype. Keep the original logical dtype for other conversions so canonical target validation can reject opaque extensions requested as dates, times or timestamps. Preserve explicit struct/list storage exports. Add ten temporal target regression cases covering annotated and unannotated fields. All ten fail before the fix and pass afterward. Also cover valid exports to explicit structural storage targets. Validation: pinned nightly formatter; 373 Arrow tests; two doctests; clippy with all targets/features and warnings denied; git diff --check. Signed-off-by: Nicholas Gates <nick@nickgates.com>
Merging this PR will regress 2 benchmarks
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ |
CPU Simulation | decode_primitives[i64, (1000, 8)] |
24 µs | 32.1 µs | -25.35% |
| ❌ |
CPU Simulation | test_scan_filter[int] |
3.2 ms | 3.6 ms | -10.86% |
| ⚡ | Walltime | threshold_neon[8] |
2.3 µs | 1.3 µs | +70.02% |
| ⚡ |
CPU Simulation | density_sweep_dense_runs[0.001] |
61.4 µs | 43.4 µs | +41.63% |
| ⚡ | Walltime | threshold_neon[64] |
3.6 µs | 2.5 µs | +41.6% |
| ⚡ | Walltime | filter_neon[8] |
1,144 ns | 897 ns | +27.54% |
| ⚡ | Walltime | filter_neon[64] |
2.1 µs | 1.7 µs | +20.57% |
| ⚡ | Walltime | filter_neon[80] |
3 µs | 2.6 µs | +15.32% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ngates/arrow-unknown-extensions (91c46ff) with develop (ca80583)
Footnotes
-
12 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
Allow Vortex extension types to export into arbitrary Arrow extension types (with matching ID + metadata). Unfortunately, arrow metadata is a UTF8 string, not binary, so vortex extension metadata is base64 encoded.