Skip to content

GH-50859: [C++][Parquet] Move JsonWriter to simdjson utilities - #50990

Open
rok wants to merge 4 commits into
apache:mainfrom
rok:gh-50859-parquet-without-json
Open

GH-50859: [C++][Parquet] Move JsonWriter to simdjson utilities#50990
rok wants to merge 4 commits into
apache:mainfrom
rok:gh-50859-parquet-without-json

Conversation

@rok

@rok rok commented Aug 25, 2026

Copy link
Copy Markdown
Member

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.

@pitrou

pitrou commented Aug 25, 2026

Copy link
Copy Markdown
Member

The CI failures need fixing.

@rok

rok commented Aug 25, 2026

Copy link
Copy Markdown
Member Author

@pitrou done.

@Reranko05 Reranko05 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@rok Since simdjson_internal.cc now exists, shouldn't all the non-template functions currently in simdjson_internal.h be moved into simdjson_internal.cc, leaving only declarations in the header?

@rok

rok commented Aug 25, 2026

Copy link
Copy Markdown
Member Author

@rok Since simdjson_internal.cc now exists, shouldn't all the non-template functions currently in simdjson_internal.h be moved into simdjson_internal.cc, leaving only declarations in the header?

Done

@Reranko05 Reranko05 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!

@rok

rok commented Aug 25, 2026

Copy link
Copy Markdown
Member Author

Again, this PR is purely AI generated. I will mark as ready for review once I review myself.

@pitrou

pitrou commented Aug 27, 2026

Copy link
Copy Markdown
Member

@rok Are you willing to prioritize this?

@rok

rok commented Aug 27, 2026

Copy link
Copy Markdown
Member Author

@pitrou I'll review this in about an hour and ping again

@tadeja

tadeja commented Aug 27, 2026

Copy link
Copy Markdown
Collaborator

@github-actions crossbow submit example-cpp-tutorial

@github-actions

Copy link
Copy Markdown

Revision: 973b4d2

Submitted crossbow builds: ursacomputing/crossbow @ actions-5765e8701c

Task Status
example-cpp-tutorial GitHub Actions

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.
@rok
rok force-pushed the gh-50859-parquet-without-json branch from 973b4d2 to 5a1f424 Compare August 27, 2026 14:51
Comment thread cpp/src/arrow/util/CMakeLists.txt Outdated
SOURCES
json_writer_internal_test.cc
EXTRA_LINK_LIBS
simdjson::simdjson)

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we use arrow::simdjson here instead? Both should work, but arrow alieas would hide the vendored/system simdjson.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if(SIMDJSON_VENDORED)
  add_library(arrow::simdjson ALIAS simdjson)
else()
  add_library(arrow::simdjson ALIAS simdjson::simdjson)
endif()

It seems better to use arrow::simdjson based on the above statements? cc @kou

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, changed to arrow::simdjson.

@github-actions github-actions Bot added awaiting changes Awaiting changes and removed awaiting committer review Awaiting committer review labels Aug 27, 2026
@github-actions github-actions Bot added awaiting change review Awaiting change review and removed awaiting changes Awaiting changes labels Aug 27, 2026
@rok

rok commented Aug 27, 2026

Copy link
Copy Markdown
Member Author

@github-actions crossbow submit example-cpp-tutorial

@github-actions

Copy link
Copy Markdown

Revision: 86e85bd

Submitted crossbow builds: ursacomputing/crossbow @ actions-e4578321bd

Task Status
example-cpp-tutorial GitHub Actions

@rok
rok marked this pull request as ready for review August 27, 2026 15:50
@rok
rok requested review from lidavidm, pitrou and wgtmac as code owners August 27, 2026 15:50
@rok

rok commented Aug 27, 2026

Copy link
Copy Markdown
Member Author

@pitrou this is ready for humans!

@rok rok added the CI: Extra: C++ Run extra C++ CI label Aug 27, 2026
Copilot AI review requested due to automatic review settings August 27, 2026 17:14
@rok

rok commented Aug 27, 2026

Copy link
Copy Markdown
Member Author

@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

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 27 out of 28 changed files in this pull request and generated 1 comment.

Comment on lines 20 to 22
#include "arrow/json/object_parser.h"
#include "arrow/util/json_writer_internal.h"
#include "arrow/util/secure_string.h"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to be a blocking issue.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now if ARROW_WITH_SIMDJSON is enabled json/object_parser.cc will be included. ARROW_PARQUET enables ARROW_WITH_SIMDJSON, so this should now be handled. Previously it required ARROW_JSON.

@github-actions

Copy link
Copy Markdown

Revision: 4d93dff

Submitted crossbow builds: ursacomputing/crossbow @ actions-fca50b3ffc

Task Status
example-cpp-tutorial GitHub Actions
test-ubuntu-24.04-cpp GitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundled GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formats GitHub Actions

@rok

rok commented Aug 27, 2026

Copy link
Copy Markdown
Member Author

#50912 switched flight ODBC from RapidJSON to simdjson JsonWriter, but did not enable ARROW_WITH_SIMDJSON for ODBC-only builds. This PR now (4d93dff) makes JsonWriter available independently of ARROW_JSON, so it's possible to build ARROW_FLIGHT_SQL_ODBC=ON with ARROW_JSON=OFF.

Comment thread cpp/src/arrow/meson.build

if needs_simdjson
arrow_util_srcs += [
'util/json_writer_internal.cc',

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Meson can still compile Parquet encryption with JSON disabled, but json/object_parser.cc remains excluded because needs_json is false. Please build ObjectParser under the same simdjson gate, otherwise this configuration still fails to link.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added.

Comment thread cpp/src/arrow/util/CMakeLists.txt Outdated
SOURCES
json_writer_internal_test.cc
EXTRA_LINK_LIBS
simdjson::simdjson)

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

if(SIMDJSON_VENDORED)
  add_library(arrow::simdjson ALIAS simdjson)
else()
  add_library(arrow::simdjson ALIAS simdjson::simdjson)
endif()

It seems better to use arrow::simdjson based on the above statements? cc @kou

Comment on lines 20 to 22
#include "arrow/json/object_parser.h"
#include "arrow/util/json_writer_internal.h"
#include "arrow/util/secure_string.h"

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems to be a blocking issue.

Copilot AI review requested due to automatic review settings August 28, 2026 10:09

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 30 changed files in this pull request and generated no new comments.

…ties

Fully qualify simdjson utility calls so CMake unity builds do not resolve internal to arrow::json::internal.
Copilot AI review requested due to automatic review settings August 28, 2026 10:51
@rok
rok force-pushed the gh-50859-parquet-without-json branch from bdee2b8 to ab2c41a Compare August 28, 2026 10:51

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 30 changed files in this pull request and generated no new comments.

@rok

rok commented Aug 28, 2026

Copy link
Copy Markdown
Member Author

@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

@github-actions

Copy link
Copy Markdown

Revision: ab2c41a

Submitted crossbow builds: ursacomputing/crossbow @ actions-af7350541b

Task Status
example-cpp-tutorial GitHub Actions
test-ubuntu-24.04-cpp GitHub Actions
test-ubuntu-24.04-cpp-gcc-13-bundled GitHub Actions
test-ubuntu-24.04-cpp-minimal-with-formats GitHub Actions

@github-actions github-actions Bot added awaiting changes Awaiting changes and removed awaiting change review Awaiting change review labels Aug 28, 2026
@rok
rok requested a lite review from Copilot August 28, 2026 12:55

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 30 changed files in this pull request and generated no new comments.

@rok
rok requested a balanced review from Copilot August 28, 2026 13:04

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 29 out of 30 changed files in this pull request and generated no new comments.

@rok

rok commented Aug 28, 2026

Copy link
Copy Markdown
Member Author

@pitrou This is ready for review. CI failures appear unrelated and are present on main (JNI issue).

@rok
rok requested a review from wgtmac August 28, 2026 20:12
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants