You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by ko...@apache.org on 2022/04/20 06:22:24 UTC

[arrow] branch master updated: ARROW-15629: [GLib] Add garrow_{,large_}string_array_builder_append_string_len()

This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new fab8cd56fd ARROW-15629: [GLib] Add garrow_{,large_}string_array_builder_append_string_len()
fab8cd56fd is described below

commit fab8cd56fdceab52930f80eadd014fbc4a78821f
Author: Rob Saccoccio <ro...@sas.com>
AuthorDate: Wed Apr 20 15:22:09 2022 +0900

    ARROW-15629: [GLib] Add garrow_{,large_}string_array_builder_append_string_len()
    
    Closes #12382 from rsaccoccio/string_n
    
    Lead-authored-by: Rob Saccoccio <ro...@sas.com>
    Co-authored-by: Sutou Kouhei <ko...@clear-code.com>
    Signed-off-by: Sutou Kouhei <ko...@clear-code.com>
---
 c_glib/arrow-glib/array-builder.cpp | 55 ++++++++++++++++++++++++++++++++++---
 c_glib/arrow-glib/array-builder.h   | 14 ++++++++++
 c_glib/test/test-array-builder.rb   | 28 +++++++++++++++++++
 3 files changed, 93 insertions(+), 4 deletions(-)

diff --git a/c_glib/arrow-glib/array-builder.cpp b/c_glib/arrow-glib/array-builder.cpp
index d1ca6c484e..3483dfe209 100644
--- a/c_glib/arrow-glib/array-builder.cpp
+++ b/c_glib/arrow-glib/array-builder.cpp
@@ -3328,13 +3328,36 @@ gboolean
 garrow_string_array_builder_append_string(GArrowStringArrayBuilder *builder,
                                           const gchar *value,
                                           GError **error)
+{
+  return garrow_string_array_builder_append_string_len(
+    builder,
+    value,
+    static_cast<gint32>(strlen(value)),
+    error);
+}
+
+/**
+ * garrow_string_array_builder_append_string_len:
+ * @builder: A #GArrowStringArrayBuilder.
+ * @value: A string value.
+ * @length: The length of @value.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Returns: %TRUE on success, %FALSE if there was an error.
+ *
+ * Since: 8.0.0
+ */
+gboolean
+garrow_string_array_builder_append_string_len(GArrowStringArrayBuilder *builder,
+                                              const gchar *value,
+                                              gint32 length,
+                                              GError **error)
 {
   auto arrow_builder =
     static_cast<arrow::StringBuilder *>(
       garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)));
 
-  auto status = arrow_builder->Append(value,
-                                      static_cast<gint32>(strlen(value)));
+  auto status = arrow_builder->Append(value, length);
   return garrow_error_check(error,
                             status,
                             "[string-array-builder][append-string]");
@@ -3460,14 +3483,38 @@ gboolean
 garrow_large_string_array_builder_append_string(GArrowLargeStringArrayBuilder *builder,
                                                 const gchar *value,
                                                 GError **error)
+{
+  return garrow_large_string_array_builder_append_string_len(
+    builder,
+    value,
+    static_cast<gint64>(strlen(value)),
+    error);
+}
+
+/**
+ * garrow_large_string_array_builder_append_string_len:
+ * @builder: A #GArrowLargeStringArrayBuilder.
+ * @value: A string value.
+ * @length: The length of @value.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Returns: %TRUE on success, %FALSE if there was an error.
+ *
+ * Since: 8.0.0
+ */
+gboolean garrow_large_string_array_builder_append_string_len(
+  GArrowLargeStringArrayBuilder *builder,
+  const gchar *value,
+  gint64 length,
+  GError **error)
 {
   auto arrow_builder =
     static_cast<arrow::LargeStringBuilder *>(
       garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)));
-  auto status = arrow_builder->Append(value);
+  auto status = arrow_builder->Append(value, length);
   return garrow_error_check(error,
                             status,
-                            "[large-string-array-builder][append-string]");
+                            "[large-string-array-builder][append-string-len]");
 }
 
 /**
diff --git a/c_glib/arrow-glib/array-builder.h b/c_glib/arrow-glib/array-builder.h
index 89c30f3a76..aa7d36cfbe 100644
--- a/c_glib/arrow-glib/array-builder.h
+++ b/c_glib/arrow-glib/array-builder.h
@@ -754,6 +754,14 @@ GARROW_AVAILABLE_IN_0_16
 gboolean garrow_string_array_builder_append_string(GArrowStringArrayBuilder *builder,
                                                    const gchar *value,
                                                    GError **error);
+
+GARROW_AVAILABLE_IN_8_0
+gboolean
+garrow_string_array_builder_append_string_len(GArrowStringArrayBuilder *builder,
+                                              const gchar *value,
+                                              gint32 length,
+                                              GError **error);
+
 #ifndef GARROW_DISABLE_DEPRECATED
 GARROW_DEPRECATED_IN_0_16_FOR(garrow_string_array_builder_append_strings)
 gboolean garrow_string_array_builder_append_values(GArrowStringArrayBuilder *builder,
@@ -790,6 +798,12 @@ GARROW_AVAILABLE_IN_0_16
 gboolean garrow_large_string_array_builder_append_string(GArrowLargeStringArrayBuilder *builder,
                                                          const gchar *value,
                                                          GError **error);
+GARROW_AVAILABLE_IN_8_0
+gboolean garrow_large_string_array_builder_append_string_len(
+  GArrowLargeStringArrayBuilder *builder,
+  const gchar *value,
+  gint64 length,
+  GError **error);
 GARROW_AVAILABLE_IN_0_16
 gboolean garrow_large_string_array_builder_append_strings(GArrowLargeStringArrayBuilder *builder,
                                                           const gchar **values,
diff --git a/c_glib/test/test-array-builder.rb b/c_glib/test/test-array-builder.rb
index 0a08bc33c5..6fcb00f0b6 100644
--- a/c_glib/test/test-array-builder.rb
+++ b/c_glib/test/test-array-builder.rb
@@ -1765,6 +1765,20 @@ class TestArrayBuilder < Test::Unit::TestCase
       end
     end
 
+    test("#append_string") do
+      builder = create_builder
+      builder.append_string("Hello")
+      assert_equal(build_array(["Hello"]),
+                   builder.finish)
+    end
+
+    test("#append_string_len") do
+      builder = create_builder
+      builder.append_string_len("Hello", 3)
+      assert_equal(build_array(["Hel"]),
+                   builder.finish)
+    end
+
     sub_test_case("#append_strings") do
       include ArrayBuilderAppendStringsTests
     end
@@ -1835,6 +1849,20 @@ class TestArrayBuilder < Test::Unit::TestCase
       end
     end
 
+    test("#append_string") do
+      builder = create_builder
+      builder.append_string("Hello")
+      assert_equal(build_array(["Hello"]),
+                   builder.finish)
+    end
+
+    test("#append_string_len") do
+      builder = create_builder
+      builder.append_string_len("Hello", 3)
+      assert_equal(build_array(["Hel"]),
+                   builder.finish)
+    end
+
     sub_test_case("#append_strings") do
       include ArrayBuilderAppendStringsTests
     end