Skip to content

Commit 93b51a0

Browse files
kouwesm
authored andcommitted
ARROW-1315: [GLib] Add missing status check for arrow::ArrayBuilder::Finish()
Author: Kouhei Sutou <[email protected]> Closes #933 from kou/glib-add-missing-status-check-for-array-builder-finish and squashes the following commits: ba98ff5 [Kouhei Sutou] [GLib] Update Go examples to follow Finish() API change b951b8f [Kouhei Sutou] [GLib] Add missing status check for arrow::ArrayBuilder::Finish()
1 parent ee928d2 commit 93b51a0

File tree

5 files changed

+119
-26
lines changed

5 files changed

+119
-26
lines changed

c_glib/arrow-glib/array-builder.cpp

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,16 +220,22 @@ garrow_array_builder_new(const std::shared_ptr<arrow::DataType> &type,
220220
/**
221221
* garrow_array_builder_finish:
222222
* @builder: A #GArrowArrayBuilder.
223+
* @error: (nullable): Return location for a #GError or %NULL.
223224
*
224-
* Returns: (transfer full): The built #GArrowArray.
225+
* Returns: (transfer full): The built #GArrowArray on success,
226+
* %NULL on error.
225227
*/
226228
GArrowArray *
227-
garrow_array_builder_finish(GArrowArrayBuilder *builder)
229+
garrow_array_builder_finish(GArrowArrayBuilder *builder, GError **error)
228230
{
229231
auto arrow_builder = garrow_array_builder_get_raw(builder);
230232
std::shared_ptr<arrow::Array> arrow_array;
231-
arrow_builder->Finish(&arrow_array);
232-
return garrow_array_new_raw(&arrow_array);
233+
auto status = arrow_builder->Finish(&arrow_array);
234+
if (garrow_error_check(error, status, "[array-builder][finish]")) {
235+
return garrow_array_new_raw(&arrow_array);
236+
} else {
237+
return NULL;
238+
}
233239
}
234240

235241

c_glib/arrow-glib/array-builder.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,8 @@ struct _GArrowArrayBuilderClass
6565

6666
GType garrow_array_builder_get_type (void) G_GNUC_CONST;
6767

68-
GArrowArray *garrow_array_builder_finish (GArrowArrayBuilder *builder);
68+
GArrowArray *garrow_array_builder_finish (GArrowArrayBuilder *builder,
69+
GError **error);
6970

7071

7172
#define GARROW_TYPE_BOOLEAN_ARRAY_BUILDER \

c_glib/example/build.c

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,13 @@ main(int argc, char **argv)
4747
g_object_unref(builder);
4848
return EXIT_FAILURE;
4949
}
50-
array = garrow_array_builder_finish(GARROW_ARRAY_BUILDER(builder));
50+
array = garrow_array_builder_finish(GARROW_ARRAY_BUILDER(builder), &error);
51+
if (!array) {
52+
g_print("failed to finish: %s\n", error->message);
53+
g_error_free(error);
54+
g_object_unref(builder);
55+
return EXIT_FAILURE;
56+
}
5157
g_object_unref(builder);
5258
}
5359

c_glib/example/go/write-batch.go

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,79 +29,119 @@ func BuildUInt8Array() *arrow.Array {
2929
for _, value := range []uint8{1, 2, 4, 8} {
3030
builder.Append(value)
3131
}
32-
return builder.Finish()
32+
array, err := builder.Finish()
33+
if err != nil {
34+
log.Fatalf("Failed to build array: %v", err)
35+
}
36+
return array
3337
}
3438

3539
func BuildUInt16Array() *arrow.Array {
3640
builder := arrow.NewUInt16ArrayBuilder()
3741
for _, value := range []uint16{1, 2, 4, 8} {
3842
builder.Append(value)
3943
}
40-
return builder.Finish()
44+
array, err := builder.Finish()
45+
if err != nil {
46+
log.Fatalf("Failed to build array: %v", err)
47+
}
48+
return array
4149
}
4250

4351
func BuildUInt32Array() *arrow.Array {
4452
builder := arrow.NewUInt32ArrayBuilder()
4553
for _, value := range []uint32{1, 2, 4, 8} {
4654
builder.Append(value)
4755
}
48-
return builder.Finish()
56+
array, err := builder.Finish()
57+
if err != nil {
58+
log.Fatalf("Failed to build array: %v", err)
59+
}
60+
return array
4961
}
5062

5163
func BuildUInt64Array() *arrow.Array {
5264
builder := arrow.NewUInt64ArrayBuilder()
5365
for _, value := range []uint64{1, 2, 4, 8} {
5466
builder.Append(value)
5567
}
56-
return builder.Finish()
68+
array, err := builder.Finish()
69+
if err != nil {
70+
log.Fatalf("Failed to build array: %v", err)
71+
}
72+
return array
5773
}
5874

5975
func BuildInt8Array() *arrow.Array {
6076
builder := arrow.NewInt8ArrayBuilder()
6177
for _, value := range []int8{1, -2, 4, -8} {
6278
builder.Append(value)
6379
}
64-
return builder.Finish()
80+
array, err := builder.Finish()
81+
if err != nil {
82+
log.Fatalf("Failed to build array: %v", err)
83+
}
84+
return array
6585
}
6686

6787
func BuildInt16Array() *arrow.Array {
6888
builder := arrow.NewInt16ArrayBuilder()
6989
for _, value := range []int16{1, -2, 4, -8} {
7090
builder.Append(value)
7191
}
72-
return builder.Finish()
92+
array, err := builder.Finish()
93+
if err != nil {
94+
log.Fatalf("Failed to build array: %v", err)
95+
}
96+
return array
7397
}
7498

7599
func BuildInt32Array() *arrow.Array {
76100
builder := arrow.NewInt32ArrayBuilder()
77101
for _, value := range []int32{1, -2, 4, -8} {
78102
builder.Append(value)
79103
}
80-
return builder.Finish()
104+
array, err := builder.Finish()
105+
if err != nil {
106+
log.Fatalf("Failed to build array: %v", err)
107+
}
108+
return array
81109
}
82110

83111
func BuildInt64Array() *arrow.Array {
84112
builder := arrow.NewInt64ArrayBuilder()
85113
for _, value := range []int64{1, -2, 4, -8} {
86114
builder.Append(value)
87115
}
88-
return builder.Finish()
116+
array, err := builder.Finish()
117+
if err != nil {
118+
log.Fatalf("Failed to build array: %v", err)
119+
}
120+
return array
89121
}
90122

91123
func BuildFloatArray() *arrow.Array {
92124
builder := arrow.NewFloatArrayBuilder()
93125
for _, value := range []float32{1.1, -2.2, 4.4, -8.8} {
94126
builder.Append(value)
95127
}
96-
return builder.Finish()
128+
array, err := builder.Finish()
129+
if err != nil {
130+
log.Fatalf("Failed to build array: %v", err)
131+
}
132+
return array
97133
}
98134

99135
func BuildDoubleArray() *arrow.Array {
100136
builder := arrow.NewDoubleArrayBuilder()
101137
for _, value := range []float64{1.1, -2.2, 4.4, -8.8} {
102138
builder.Append(value)
103139
}
104-
return builder.Finish()
140+
array, err := builder.Finish()
141+
if err != nil {
142+
log.Fatalf("Failed to build array: %v", err)
143+
}
144+
return array
105145
}
106146

107147
func main() {

c_glib/example/go/write-stream.go

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,79 +29,119 @@ func BuildUInt8Array() *arrow.Array {
2929
for _, value := range []uint8{1, 2, 4, 8} {
3030
builder.Append(value)
3131
}
32-
return builder.Finish()
32+
array, err := builder.Finish()
33+
if err != nil {
34+
log.Fatalf("Failed to build array: %v", err)
35+
}
36+
return array
3337
}
3438

3539
func BuildUInt16Array() *arrow.Array {
3640
builder := arrow.NewUInt16ArrayBuilder()
3741
for _, value := range []uint16{1, 2, 4, 8} {
3842
builder.Append(value)
3943
}
40-
return builder.Finish()
44+
array, err := builder.Finish()
45+
if err != nil {
46+
log.Fatalf("Failed to build array: %v", err)
47+
}
48+
return array
4149
}
4250

4351
func BuildUInt32Array() *arrow.Array {
4452
builder := arrow.NewUInt32ArrayBuilder()
4553
for _, value := range []uint32{1, 2, 4, 8} {
4654
builder.Append(value)
4755
}
48-
return builder.Finish()
56+
array, err := builder.Finish()
57+
if err != nil {
58+
log.Fatalf("Failed to build array: %v", err)
59+
}
60+
return array
4961
}
5062

5163
func BuildUInt64Array() *arrow.Array {
5264
builder := arrow.NewUInt64ArrayBuilder()
5365
for _, value := range []uint64{1, 2, 4, 8} {
5466
builder.Append(value)
5567
}
56-
return builder.Finish()
68+
array, err := builder.Finish()
69+
if err != nil {
70+
log.Fatalf("Failed to build array: %v", err)
71+
}
72+
return array
5773
}
5874

5975
func BuildInt8Array() *arrow.Array {
6076
builder := arrow.NewInt8ArrayBuilder()
6177
for _, value := range []int8{1, -2, 4, -8} {
6278
builder.Append(value)
6379
}
64-
return builder.Finish()
80+
array, err := builder.Finish()
81+
if err != nil {
82+
log.Fatalf("Failed to build array: %v", err)
83+
}
84+
return array
6585
}
6686

6787
func BuildInt16Array() *arrow.Array {
6888
builder := arrow.NewInt16ArrayBuilder()
6989
for _, value := range []int16{1, -2, 4, -8} {
7090
builder.Append(value)
7191
}
72-
return builder.Finish()
92+
array, err := builder.Finish()
93+
if err != nil {
94+
log.Fatalf("Failed to build array: %v", err)
95+
}
96+
return array
7397
}
7498

7599
func BuildInt32Array() *arrow.Array {
76100
builder := arrow.NewInt32ArrayBuilder()
77101
for _, value := range []int32{1, -2, 4, -8} {
78102
builder.Append(value)
79103
}
80-
return builder.Finish()
104+
array, err := builder.Finish()
105+
if err != nil {
106+
log.Fatalf("Failed to build array: %v", err)
107+
}
108+
return array
81109
}
82110

83111
func BuildInt64Array() *arrow.Array {
84112
builder := arrow.NewInt64ArrayBuilder()
85113
for _, value := range []int64{1, -2, 4, -8} {
86114
builder.Append(value)
87115
}
88-
return builder.Finish()
116+
array, err := builder.Finish()
117+
if err != nil {
118+
log.Fatalf("Failed to build array: %v", err)
119+
}
120+
return array
89121
}
90122

91123
func BuildFloatArray() *arrow.Array {
92124
builder := arrow.NewFloatArrayBuilder()
93125
for _, value := range []float32{1.1, -2.2, 4.4, -8.8} {
94126
builder.Append(value)
95127
}
96-
return builder.Finish()
128+
array, err := builder.Finish()
129+
if err != nil {
130+
log.Fatalf("Failed to build array: %v", err)
131+
}
132+
return array
97133
}
98134

99135
func BuildDoubleArray() *arrow.Array {
100136
builder := arrow.NewDoubleArrayBuilder()
101137
for _, value := range []float64{1.1, -2.2, 4.4, -8.8} {
102138
builder.Append(value)
103139
}
104-
return builder.Finish()
140+
array, err := builder.Finish()
141+
if err != nil {
142+
log.Fatalf("Failed to build array: %v", err)
143+
}
144+
return array
105145
}
106146

107147
func main() {

0 commit comments

Comments
 (0)