GH-50859: [C++][Parquet] Move JsonWriter to simdjson utilities - #50990
GH-50859: [C++][Parquet] Move JsonWriter to simdjson utilities#50990rok wants to merge 3 commits into
Conversation
|
The CI failures need fixing. |
|
@pitrou done. |
Done |
|
Again, this PR is purely AI generated. I will mark as ready for review once I review myself. |
|
@rok Are you willing to prioritize this? |
|
@pitrou I'll review this in about an hour and ping again |
|
@github-actions crossbow submit example-cpp-tutorial |
|
Revision: 973b4d2 Submitted crossbow builds: ursacomputing/crossbow @ actions-5765e8701c
|
Parquet uses JsonWriter independently of the Arrow JSON module. Move the writer into the simdjson utilities so it is available whenever simdjson is enabled, including ARROW_JSON=OFF builds. Preserve the writer files as renames and update CMake, Meson, callers, and tests.
973b4d2 to
5a1f424
Compare
| SOURCES | ||
| json_writer_internal_test.cc | ||
| EXTRA_LINK_LIBS | ||
| simdjson::simdjson) |
There was a problem hiding this comment.
Should we use arrow::simdjson here instead? Both should work, but arrow alieas would hide the vendored/system simdjson.
|
@github-actions crossbow submit example-cpp-tutorial |
|
Revision: 86e85bd Submitted crossbow builds: ursacomputing/crossbow @ actions-e4578321bd
|
|
@github-actions crossbow submit test-ubuntu-24.04-cpp-minimal-with-formats test-ubuntu-24.04-cpp-gcc-13-bundled test-ubuntu-24.04-cpp |
There was a problem hiding this comment.
Pull request overview
Fixes Parquet (and other components) linking failures when ARROW_JSON=OFF by relocating arrow::json::JsonWriter and related simdjson helpers into Arrow util code that is built whenever simdjson support is enabled.
Changes:
- Update Parquet and other call sites to include
arrow/util/json_writer_internal.hinstead of the JSON module header. - Move/enable building of
JsonWriterand simdjson utility implementations outside theARROW_JSONfeature gate (CMake + Meson). - Refactor
simdjson_internal.hto use exported (non-inline) function declarations with a newsimdjson_internal.ccimplementation, and relocate/adjust unit tests accordingly.
Reviewed changes
Copilot reviewed 26 out of 27 changed files in this pull request and generated no comments.
Show a summary per file
| File | Description |
|---|---|
| cpp/src/parquet/types.cc | Switch JsonWriter include to util header to avoid JSON-gated dependency. |
| cpp/src/parquet/printer.cc | Switch JsonWriter include to util header. |
| cpp/src/parquet/geospatial/util_json_internal.cc | Switch JsonWriter include to util header. |
| cpp/src/parquet/encryption/local_wrap_kms_client.cc | Switch JsonWriter include to util header. |
| cpp/src/parquet/encryption/key_metadata.cc | Switch JsonWriter include to util header. |
| cpp/src/parquet/encryption/key_material.cc | Switch JsonWriter include to util header. |
| cpp/src/parquet/encryption/file_system_key_material_store.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/util/simdjson_internal.h | Move simdjson helpers from inline definitions to exported declarations and adjust namespace style. |
| cpp/src/arrow/util/simdjson_internal.cc | New translation unit providing implementations for simdjson helpers previously inlined. |
| cpp/src/arrow/util/meson.build | Add JsonWriter internal test to util test suite when simdjson is needed; adjust deps. |
| cpp/src/arrow/util/json_writer_internal.h | New util header location for JsonWriter API used by Parquet when JSON is disabled. |
| cpp/src/arrow/util/json_writer_internal.cc | Update implementation to include the new util header path. |
| cpp/src/arrow/util/json_writer_internal_test.cc | Update test include to new util header path. |
| cpp/src/arrow/util/CMakeLists.txt | Add a dedicated JsonWriter internal test target when simdjson is enabled. |
| cpp/src/arrow/meson.build | Ensure simdjson dependency and util simdjson/json-writer sources are built when needed (incl. Parquet). |
| cpp/src/arrow/json/meson.build | Remove JsonWriter internal test from JSON test executable. |
| cpp/src/arrow/json/CMakeLists.txt | Remove JsonWriter internal test from JSON test target. |
| cpp/src/arrow/integration/json_internal.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/integration/json_integration.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/integration/json_integration_test.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/flight/sql/odbc/odbc_impl/json_converter.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/extension/variable_shape_tensor.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/extension/opaque.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/extension/fixed_shape_tensor.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/dataset/file_json_test.cc | Switch JsonWriter include to util header. |
| cpp/src/arrow/CMakeLists.txt | Build and link JsonWriter + simdjson utility sources when simdjson is enabled; remove JSON-gated build of JsonWriter. |
| cpp/meson.build | Introduce needs_simdjson (driven by JSON or Parquet) to control simdjson-dependent compilation. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
Revision: 86e85bd Submitted crossbow builds: ursacomputing/crossbow @ actions-b71eaadb5c
|
|
@pitrou this is ready for humans! |
|
@github-actions crossbow submit test-ubuntu-24.04-cpp-minimal-with-formats test-ubuntu-24.04-cpp-gcc-13-bundled test-ubuntu-24.04-cpp example-cpp-tutorial |
| #include "arrow/json/object_parser.h" | ||
| #include "arrow/util/json_writer_internal.h" | ||
| #include "arrow/util/secure_string.h" |
|
Revision: 4d93dff Submitted crossbow builds: ursacomputing/crossbow @ actions-fca50b3ffc
|
Rationale for this change
Parquet uses JsonWriter when ARROW_JSON=OFF, but its implementation was only built with Arrow JSON, causing link failures.
What changes are included in this PR?
Move JsonWriter to the simdjson utilities and update its callers and CMake/Meson builds.
Are these changes tested?
Yes. CMake shared/static and Meson Parquet builds pass with JSON disabled. Unit tests and pre-commit checks also pass.
Are there any user-facing changes?
No. This only fixes the affected build configuration.
AI disclosure - this was AI generated to test alternative approach to #50900.