This is an automated email from the ASF dual-hosted git repository.
apitrou pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/main by this push:
new 1202d79fba GH-46207: [C++] Rename arrow::util::StringBuilder and move
to internal namespace (#46813)
1202d79fba is described below
commit 1202d79fbafedfef77c5df2abd94abf2e3a7d06c
Author: Ziy <[email protected]>
AuthorDate: Tue Jul 1 17:28:25 2025 +0800
GH-46207: [C++] Rename arrow::util::StringBuilder and move to internal
namespace (#46813)
### Rationale for this change
- Move and Rename function `arrow::util::StringBuilder` to internal
namespace to avoid confusion with class `arrow::StringBuilder`
### What changes are included in this PR?
- Move `arrow::util::StringBuilder` to `arrow::internal::StringBuilder`
- Rename `arrow::internal::StringBuilder` to `arrow::internal::JoinToString`
- Rename `arrow/util/string_builder.{h|cc}` to
`arrow/util/string_util_internal.{h|cc}`
### Are these changes tested?
Yes.
### Are there any user-facing changes?
No. they are used internally.
* GitHub Issue: #46207
Authored-by: Ziy1-Tan <[email protected]>
Signed-off-by: Antoine Pitrou <[email protected]>
---
cpp/src/arrow/CMakeLists.txt | 2 +-
.../arrow/flight/transport/grpc/util_internal.cc | 9 ++---
cpp/src/arrow/flight/types.cc | 12 +++----
cpp/src/arrow/meson.build | 2 +-
cpp/src/arrow/status.h | 6 ++--
cpp/src/arrow/testing/gtest_util.h | 4 +--
cpp/src/arrow/util/bitmap.h | 2 +-
cpp/src/arrow/util/bitset_stack_internal.h | 2 +-
cpp/src/arrow/util/meson.build | 2 +-
.../util/{string_builder.cc => string_util.cc} | 9 ++---
.../arrow/util/{string_builder.h => string_util.h} | 38 +++++++++-------------
cpp/src/parquet/exception.h | 4 +--
12 files changed, 41 insertions(+), 51 deletions(-)
diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt
index 47426ba604..aa701fd1bd 100644
--- a/cpp/src/arrow/CMakeLists.txt
+++ b/cpp/src/arrow/CMakeLists.txt
@@ -517,7 +517,7 @@ set(ARROW_UTIL_SRCS
util/ree_util.cc
util/secure_string.cc
util/string.cc
- util/string_builder.cc
+ util/string_util.cc
util/task_group.cc
util/tdigest.cc
util/thread_pool.cc
diff --git a/cpp/src/arrow/flight/transport/grpc/util_internal.cc
b/cpp/src/arrow/flight/transport/grpc/util_internal.cc
index 88ec15bc66..d29f1ce417 100644
--- a/cpp/src/arrow/flight/transport/grpc/util_internal.cc
+++ b/cpp/src/arrow/flight/transport/grpc/util_internal.cc
@@ -29,7 +29,7 @@
#include "arrow/flight/types.h"
#include "arrow/status.h"
#include "arrow/util/string.h"
-#include "arrow/util/string_builder.h"
+#include "arrow/util/string_util.h"
namespace arrow {
@@ -134,9 +134,10 @@ static TransportStatus TransportStatusFromGrpc(const
::grpc::Status& grpc_status
return TransportStatus{TransportStatusCode::kUnauthenticated,
grpc_status.error_message()};
default:
- return TransportStatus{TransportStatusCode::kUnknown,
- util::StringBuilder("(",
grpc_status.error_code(), ")",
- grpc_status.error_message())};
+ return TransportStatus{
+ TransportStatusCode::kUnknown,
+ arrow::internal::JoinToString("(", grpc_status.error_code(), ")",
+ grpc_status.error_message())};
}
}
diff --git a/cpp/src/arrow/flight/types.cc b/cpp/src/arrow/flight/types.cc
index 5dbc119719..5614c20c6b 100644
--- a/cpp/src/arrow/flight/types.cc
+++ b/cpp/src/arrow/flight/types.cc
@@ -37,7 +37,7 @@
#include "arrow/util/formatting.h"
#include "arrow/util/logging.h"
#include "arrow/util/string.h"
-#include "arrow/util/string_builder.h"
+#include "arrow/util/string_util.h"
#include "arrow/util/uri.h"
namespace arrow {
@@ -189,8 +189,8 @@ static std::ostream& operator<<(std::ostream& os,
std::map<std::string, T> m) {
// Wrapper types for Flight RPC protobuf messages
std::string BasicAuth::ToString() const {
- return arrow::util::StringBuilder("<BasicAuth username='", username,
- "' password=(redacted)>");
+ return arrow::internal::JoinToString("<BasicAuth username='", username,
+ "' password=(redacted)>");
}
bool BasicAuth::Equals(const BasicAuth& other) const {
@@ -886,8 +886,8 @@ Status FlightPayload::Validate() const {
}
std::string ActionType::ToString() const {
- return arrow::util::StringBuilder("<ActionType type='", type, "'
description='",
- description, "'>");
+ return arrow::internal::JoinToString("<ActionType type='", type, "'
description='",
+ description, "'>");
}
const ActionType ActionType::kCancelFlightInfo =
@@ -930,7 +930,7 @@ arrow::Status ActionType::Deserialize(std::string_view
serialized, ActionType* o
}
std::string Criteria::ToString() const {
- return arrow::util::StringBuilder("<Criteria expression='", expression,
"'>");
+ return arrow::internal::JoinToString("<Criteria expression='", expression,
"'>");
}
bool Criteria::Equals(const Criteria& other) const {
diff --git a/cpp/src/arrow/meson.build b/cpp/src/arrow/meson.build
index 2c13f8e180..c83ae9fb46 100644
--- a/cpp/src/arrow/meson.build
+++ b/cpp/src/arrow/meson.build
@@ -199,7 +199,7 @@ arrow_util_srcs = [
'util/mutex.cc',
'util/ree_util.cc',
'util/string.cc',
- 'util/string_builder.cc',
+ 'util/string_util.cc',
'util/task_group.cc',
'util/tdigest.cc',
'util/thread_pool.cc',
diff --git a/cpp/src/arrow/status.h b/cpp/src/arrow/status.h
index 596f1cc1d1..8907d32ff7 100644
--- a/cpp/src/arrow/status.h
+++ b/cpp/src/arrow/status.h
@@ -23,7 +23,7 @@
#include "arrow/util/compare.h"
#include "arrow/util/macros.h"
-#include "arrow/util/string_builder.h"
+#include "arrow/util/string_util.h"
#include "arrow/util/visibility.h"
#ifdef ARROW_EXTRA_ERROR_CONTEXT
@@ -181,13 +181,13 @@ class ARROW_EXPORT [[nodiscard]] Status : public
util::EqualityComparable<Status
template <typename... Args>
static Status FromArgs(StatusCode code, Args&&... args) {
- return Status(code, util::StringBuilder(std::forward<Args>(args)...));
+ return Status(code, internal::JoinToString(std::forward<Args>(args)...));
}
template <typename... Args>
static Status FromDetailAndArgs(StatusCode code,
std::shared_ptr<StatusDetail> detail,
Args&&... args) {
- return Status(code, util::StringBuilder(std::forward<Args>(args)...),
+ return Status(code, internal::JoinToString(std::forward<Args>(args)...),
std::move(detail));
}
diff --git a/cpp/src/arrow/testing/gtest_util.h
b/cpp/src/arrow/testing/gtest_util.h
index 8e537bd26d..62bf907a2d 100644
--- a/cpp/src/arrow/testing/gtest_util.h
+++ b/cpp/src/arrow/testing/gtest_util.h
@@ -40,7 +40,7 @@
#include "arrow/type_fwd.h"
#include "arrow/type_traits.h"
#include "arrow/util/macros.h"
-#include "arrow/util/string_builder.h"
+#include "arrow/util/string_util.h"
#include "arrow/util/type_fwd.h"
// NOTE: failing must be inline in the macros below, to get correct file /
line number
@@ -142,7 +142,7 @@
// A generalized version of GTest's SCOPED_TRACE that takes arbitrary
arguments.
// ARROW_SCOPED_TRACE("some variable = ", some_variable, ...)
-#define ARROW_SCOPED_TRACE(...)
SCOPED_TRACE(::arrow::util::StringBuilder(__VA_ARGS__))
+#define ARROW_SCOPED_TRACE(...)
SCOPED_TRACE(::arrow::internal::JoinToString(__VA_ARGS__))
namespace arrow {
diff --git a/cpp/src/arrow/util/bitmap.h b/cpp/src/arrow/util/bitmap.h
index 4750e697fc..141d558c3a 100644
--- a/cpp/src/arrow/util/bitmap.h
+++ b/cpp/src/arrow/util/bitmap.h
@@ -37,7 +37,7 @@
#include "arrow/util/endian.h"
#include "arrow/util/functional.h"
#include "arrow/util/span.h"
-#include "arrow/util/string_builder.h"
+#include "arrow/util/string_util.h"
#include "arrow/util/visibility.h"
namespace arrow {
diff --git a/cpp/src/arrow/util/bitset_stack_internal.h
b/cpp/src/arrow/util/bitset_stack_internal.h
index 9b334b3605..67a7e50af7 100644
--- a/cpp/src/arrow/util/bitset_stack_internal.h
+++ b/cpp/src/arrow/util/bitset_stack_internal.h
@@ -38,7 +38,7 @@
#include "arrow/util/compare.h"
#include "arrow/util/functional.h"
#include "arrow/util/macros.h"
-#include "arrow/util/string_builder.h"
+#include "arrow/util/string_util.h"
#include "arrow/util/type_traits.h"
#include "arrow/util/visibility.h"
diff --git a/cpp/src/arrow/util/meson.build b/cpp/src/arrow/util/meson.build
index d4b1312583..50de87635e 100644
--- a/cpp/src/arrow/util/meson.build
+++ b/cpp/src/arrow/util/meson.build
@@ -160,7 +160,7 @@ install_headers(
'simd.h',
'small_vector.h',
'span.h',
- 'string_builder.h',
+ 'string_util.h',
'string.h',
'task_group.h',
'test_common.h',
diff --git a/cpp/src/arrow/util/string_builder.cc
b/cpp/src/arrow/util/string_util.cc
similarity index 90%
rename from cpp/src/arrow/util/string_builder.cc
rename to cpp/src/arrow/util/string_util.cc
index ae52649414..6889b89097 100644
--- a/cpp/src/arrow/util/string_builder.cc
+++ b/cpp/src/arrow/util/string_util.cc
@@ -15,15 +15,13 @@
// specific language governing permissions and limitations
// under the License.
-#include "arrow/util/string_builder.h"
+#include "arrow/util/string_util.h"
#include <memory>
#include <sstream>
namespace arrow {
-
-namespace util {
-namespace detail {
+namespace internal {
StringStreamWrapper::StringStreamWrapper()
: sstream_(std::make_unique<std::ostringstream>()), ostream_(*sstream_) {}
@@ -32,6 +30,5 @@ StringStreamWrapper::~StringStreamWrapper() {}
std::string StringStreamWrapper::str() { return sstream_->str(); }
-} // namespace detail
-} // namespace util
+} // namespace internal
} // namespace arrow
diff --git a/cpp/src/arrow/util/string_builder.h
b/cpp/src/arrow/util/string_util.h
similarity index 72%
rename from cpp/src/arrow/util/string_builder.h
rename to cpp/src/arrow/util/string_util.h
index 448fb57d7a..3f7803dc92 100644
--- a/cpp/src/arrow/util/string_builder.h
+++ b/cpp/src/arrow/util/string_util.h
@@ -26,9 +26,8 @@
#include "arrow/util/visibility.h"
namespace arrow {
-namespace util {
-namespace detail {
+namespace internal {
class ARROW_EXPORT StringStreamWrapper {
public:
@@ -43,31 +42,24 @@ class ARROW_EXPORT StringStreamWrapper {
std::ostream& ostream_;
};
-} // namespace detail
-
-template <typename Head>
-void StringBuilderRecursive(std::ostream& stream, Head&& head) {
- if constexpr (std::is_floating_point_v<std::decay_t<Head>>) {
- // Avoid losing precision when printing floating point numbers
- stream << std::to_string(head);
- } else {
- stream << head;
- }
-}
-
-template <typename Head, typename... Tail>
-void StringBuilderRecursive(std::ostream& stream, Head&& head, Tail&&... tail)
{
- StringBuilderRecursive(stream, std::forward<Head>(head));
- StringBuilderRecursive(stream, std::forward<Tail>(tail)...);
-}
-
template <typename... Args>
-std::string StringBuilder(Args&&... args) {
- detail::StringStreamWrapper ss;
- StringBuilderRecursive(ss.stream(), std::forward<Args>(args)...);
+std::string JoinToString(Args&&... args) {
+ StringStreamWrapper ss;
+ (
+ [&ss](auto&& arg) {
+ // Avoid losing precision when printing floating point numbers
+ if constexpr (std::is_floating_point_v<std::decay_t<decltype(arg)>>) {
+ ss.stream() << std::to_string(arg);
+ } else {
+ ss.stream() << arg;
+ }
+ }(std::forward<Args>(args)),
+ ...);
return ss.str();
}
+} // namespace internal
+namespace util {
/// CRTP helper for declaring string representation. Defines operator<<
template <typename T>
class ToStringOstreamable {
diff --git a/cpp/src/parquet/exception.h b/cpp/src/parquet/exception.h
index 416e42683a..46f5595dd1 100644
--- a/cpp/src/parquet/exception.h
+++ b/cpp/src/parquet/exception.h
@@ -23,7 +23,7 @@
#include <utility>
#include "arrow/type_fwd.h"
-#include "arrow/util/string_builder.h"
+#include "arrow/util/string_util.h"
#include "parquet/platform.h"
// PARQUET-1085
@@ -100,7 +100,7 @@ class ParquetException : public std::exception {
template <typename... Args>
explicit ParquetException(Args&&... args)
- : msg_(::arrow::util::StringBuilder(std::forward<Args>(args)...)) {}
+ : msg_(::arrow::internal::JoinToString(std::forward<Args>(args)...)) {}
explicit ParquetException(std::string msg) : msg_(std::move(msg)) {}