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 <rob.saccoc...@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 <rob.saccoc...@sas.com> Co-authored-by: Sutou Kouhei <k...@clear-code.com> Signed-off-by: Sutou Kouhei <k...@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