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)) {}
 

Reply via email to