Skip to content

Commit fab8cd5

Browse files
rsaccocciokou
andcommitted
ARROW-15629: [GLib] Add garrow_{,large_}string_array_builder_append_string_len()
Closes apache#12382 from rsaccoccio/string_n Lead-authored-by: Rob Saccoccio <rob.saccoccio@sas.com> Co-authored-by: Sutou Kouhei <kou@clear-code.com> Signed-off-by: Sutou Kouhei <kou@clear-code.com>
1 parent 0650241 commit fab8cd5

3 files changed

Lines changed: 93 additions & 4 deletions

File tree

c_glib/arrow-glib/array-builder.cpp

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3328,13 +3328,36 @@ gboolean
33283328
garrow_string_array_builder_append_string(GArrowStringArrayBuilder *builder,
33293329
const gchar *value,
33303330
GError **error)
3331+
{
3332+
return garrow_string_array_builder_append_string_len(
3333+
builder,
3334+
value,
3335+
static_cast<gint32>(strlen(value)),
3336+
error);
3337+
}
3338+
3339+
/**
3340+
* garrow_string_array_builder_append_string_len:
3341+
* @builder: A #GArrowStringArrayBuilder.
3342+
* @value: A string value.
3343+
* @length: The length of @value.
3344+
* @error: (nullable): Return location for a #GError or %NULL.
3345+
*
3346+
* Returns: %TRUE on success, %FALSE if there was an error.
3347+
*
3348+
* Since: 8.0.0
3349+
*/
3350+
gboolean
3351+
garrow_string_array_builder_append_string_len(GArrowStringArrayBuilder *builder,
3352+
const gchar *value,
3353+
gint32 length,
3354+
GError **error)
33313355
{
33323356
auto arrow_builder =
33333357
static_cast<arrow::StringBuilder *>(
33343358
garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)));
33353359

3336-
auto status = arrow_builder->Append(value,
3337-
static_cast<gint32>(strlen(value)));
3360+
auto status = arrow_builder->Append(value, length);
33383361
return garrow_error_check(error,
33393362
status,
33403363
"[string-array-builder][append-string]");
@@ -3460,14 +3483,38 @@ gboolean
34603483
garrow_large_string_array_builder_append_string(GArrowLargeStringArrayBuilder *builder,
34613484
const gchar *value,
34623485
GError **error)
3486+
{
3487+
return garrow_large_string_array_builder_append_string_len(
3488+
builder,
3489+
value,
3490+
static_cast<gint64>(strlen(value)),
3491+
error);
3492+
}
3493+
3494+
/**
3495+
* garrow_large_string_array_builder_append_string_len:
3496+
* @builder: A #GArrowLargeStringArrayBuilder.
3497+
* @value: A string value.
3498+
* @length: The length of @value.
3499+
* @error: (nullable): Return location for a #GError or %NULL.
3500+
*
3501+
* Returns: %TRUE on success, %FALSE if there was an error.
3502+
*
3503+
* Since: 8.0.0
3504+
*/
3505+
gboolean garrow_large_string_array_builder_append_string_len(
3506+
GArrowLargeStringArrayBuilder *builder,
3507+
const gchar *value,
3508+
gint64 length,
3509+
GError **error)
34633510
{
34643511
auto arrow_builder =
34653512
static_cast<arrow::LargeStringBuilder *>(
34663513
garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)));
3467-
auto status = arrow_builder->Append(value);
3514+
auto status = arrow_builder->Append(value, length);
34683515
return garrow_error_check(error,
34693516
status,
3470-
"[large-string-array-builder][append-string]");
3517+
"[large-string-array-builder][append-string-len]");
34713518
}
34723519

34733520
/**

c_glib/arrow-glib/array-builder.h

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -754,6 +754,14 @@ GARROW_AVAILABLE_IN_0_16
754754
gboolean garrow_string_array_builder_append_string(GArrowStringArrayBuilder *builder,
755755
const gchar *value,
756756
GError **error);
757+
758+
GARROW_AVAILABLE_IN_8_0
759+
gboolean
760+
garrow_string_array_builder_append_string_len(GArrowStringArrayBuilder *builder,
761+
const gchar *value,
762+
gint32 length,
763+
GError **error);
764+
757765
#ifndef GARROW_DISABLE_DEPRECATED
758766
GARROW_DEPRECATED_IN_0_16_FOR(garrow_string_array_builder_append_strings)
759767
gboolean garrow_string_array_builder_append_values(GArrowStringArrayBuilder *builder,
@@ -790,6 +798,12 @@ GARROW_AVAILABLE_IN_0_16
790798
gboolean garrow_large_string_array_builder_append_string(GArrowLargeStringArrayBuilder *builder,
791799
const gchar *value,
792800
GError **error);
801+
GARROW_AVAILABLE_IN_8_0
802+
gboolean garrow_large_string_array_builder_append_string_len(
803+
GArrowLargeStringArrayBuilder *builder,
804+
const gchar *value,
805+
gint64 length,
806+
GError **error);
793807
GARROW_AVAILABLE_IN_0_16
794808
gboolean garrow_large_string_array_builder_append_strings(GArrowLargeStringArrayBuilder *builder,
795809
const gchar **values,

c_glib/test/test-array-builder.rb

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1765,6 +1765,20 @@ def builder_class_name
17651765
end
17661766
end
17671767

1768+
test("#append_string") do
1769+
builder = create_builder
1770+
builder.append_string("Hello")
1771+
assert_equal(build_array(["Hello"]),
1772+
builder.finish)
1773+
end
1774+
1775+
test("#append_string_len") do
1776+
builder = create_builder
1777+
builder.append_string_len("Hello", 3)
1778+
assert_equal(build_array(["Hel"]),
1779+
builder.finish)
1780+
end
1781+
17681782
sub_test_case("#append_strings") do
17691783
include ArrayBuilderAppendStringsTests
17701784
end
@@ -1835,6 +1849,20 @@ def builder_class_name
18351849
end
18361850
end
18371851

1852+
test("#append_string") do
1853+
builder = create_builder
1854+
builder.append_string("Hello")
1855+
assert_equal(build_array(["Hello"]),
1856+
builder.finish)
1857+
end
1858+
1859+
test("#append_string_len") do
1860+
builder = create_builder
1861+
builder.append_string_len("Hello", 3)
1862+
assert_equal(build_array(["Hel"]),
1863+
builder.finish)
1864+
end
1865+
18381866
sub_test_case("#append_strings") do
18391867
include ArrayBuilderAppendStringsTests
18401868
end

0 commit comments

Comments
 (0)