Skip to content

Commit 70351a0

Browse files
committed
Add GArrowFixedSizeListArray
1 parent 9492e6b commit 70351a0

File tree

8 files changed

+630
-1
lines changed

8 files changed

+630
-1
lines changed

c_glib/arrow-glib/array-builder.cpp

Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5674,6 +5674,125 @@ garrow_large_list_array_builder_get_value_builder(GArrowLargeListArrayBuilder *b
56745674
return priv->value_builder;
56755675
}
56765676

5677+
typedef struct GArrowFixedSizeListArrayBuilderPrivate_
5678+
{
5679+
GArrowArrayBuilder *value_builder;
5680+
} GArrowFixedSizeListArrayBuilderPrivate;
5681+
5682+
G_DEFINE_TYPE_WITH_PRIVATE(GArrowFixedSizeListArrayBuilder,
5683+
garrow_fixed_size_list_array_builder,
5684+
GARROW_TYPE_ARRAY_BUILDER)
5685+
5686+
#define GARROW_FIXED_SIZE_LIST_ARRAY_BUILDER_GET_PRIVATE(obj) \
5687+
static_cast<GArrowFixedSizeListArrayBuilderPrivate *>( \
5688+
garrow_fixed_size_list_array_builder_get_instance_private( \
5689+
GARROW_FIXED_SIZE_LIST_ARRAY_BUILDER(obj)))
5690+
5691+
static void
5692+
garrow_fixed_size_list_array_builder_dispose(GObject *object)
5693+
{
5694+
auto priv = GARROW_FIXED_SIZE_LIST_ARRAY_BUILDER_GET_PRIVATE(object);
5695+
5696+
if (priv->value_builder) {
5697+
g_object_unref(priv->value_builder);
5698+
priv->value_builder = NULL;
5699+
}
5700+
5701+
G_OBJECT_CLASS(garrow_fixed_size_list_array_builder_parent_class)->dispose(object);
5702+
}
5703+
5704+
static void
5705+
garrow_fixed_size_list_array_builder_init(GArrowFixedSizeListArrayBuilder *builder)
5706+
{
5707+
}
5708+
5709+
static void
5710+
garrow_fixed_size_list_array_builder_class_init(
5711+
GArrowFixedSizeListArrayBuilderClass *klass)
5712+
{
5713+
auto gobject_class = G_OBJECT_CLASS(klass);
5714+
5715+
gobject_class->dispose = garrow_fixed_size_list_array_builder_dispose;
5716+
}
5717+
5718+
/**
5719+
* garrow_fixed_size_list_array_builder_new:
5720+
* @data_type: A #GArrowFixedSizeListDataType for value.
5721+
* @error: (nullable): Return location for a #GError or %NULL.
5722+
*
5723+
* Returns: A newly created #GArrowFixedSizeListArrayBuilder.
5724+
*
5725+
* Since: 23.0.0
5726+
*/
5727+
GArrowFixedSizeListArrayBuilder *
5728+
garrow_fixed_size_list_array_builder_new(GArrowFixedSizeListDataType *data_type,
5729+
GError **error)
5730+
{
5731+
if (!GARROW_IS_FIXED_SIZE_LIST_DATA_TYPE(data_type)) {
5732+
g_set_error(
5733+
error,
5734+
GARROW_ERROR,
5735+
GARROW_ERROR_INVALID,
5736+
"[fixed-size-list-array-builder][new] data type must be fixed-size list data type");
5737+
return NULL;
5738+
}
5739+
5740+
auto arrow_data_type = garrow_data_type_get_raw(GARROW_DATA_TYPE(data_type));
5741+
auto builder = garrow_array_builder_new(arrow_data_type,
5742+
error,
5743+
"[fixed-size-list-array-builder][new]");
5744+
return GARROW_FIXED_SIZE_LIST_ARRAY_BUILDER(builder);
5745+
}
5746+
5747+
/**
5748+
* garrow_fixed_size_list_array_builder_append_value:
5749+
* @builder: A #GArrowFixedSizeListArrayBuilder.
5750+
* @error: (nullable): Return location for a #GError or %NULL.
5751+
*
5752+
* Returns: %TRUE on success, %FALSE if there was an error.
5753+
*
5754+
* It appends a new list element. To append a new list element, you
5755+
* need to call this function then append list element values to
5756+
* `value_builder`. `value_builder` is the #GArrowArrayBuilder
5757+
* specified to constructor. You can get `value_builder` by
5758+
* garrow_fixed_size_list_array_builder_get_value_builder().
5759+
*
5760+
* Since: 23.0.0
5761+
*/
5762+
gboolean
5763+
garrow_fixed_size_list_array_builder_append_value(
5764+
GArrowFixedSizeListArrayBuilder *builder, GError **error)
5765+
{
5766+
auto arrow_builder = std::static_pointer_cast<arrow::FixedSizeListBuilder>(
5767+
garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)));
5768+
auto status = arrow_builder->Append();
5769+
return garrow_error_check(error,
5770+
status,
5771+
"[fixed-size-list-array-builder][append-value]");
5772+
}
5773+
5774+
/**
5775+
* garrow_fixed_size_list_array_builder_get_value_builder:
5776+
* @builder: A #GArrowFixedSizeListArrayBuilder.
5777+
*
5778+
* Returns: (transfer none): The #GArrowArrayBuilder for building list element values.
5779+
*
5780+
* Since: 23.0.0
5781+
*/
5782+
GArrowArrayBuilder *
5783+
garrow_fixed_size_list_array_builder_get_value_builder(
5784+
GArrowFixedSizeListArrayBuilder *builder)
5785+
{
5786+
auto priv = GARROW_FIXED_SIZE_LIST_ARRAY_BUILDER_GET_PRIVATE(builder);
5787+
if (!priv->value_builder) {
5788+
auto arrow_builder = std::static_pointer_cast<arrow::FixedSizeListBuilder>(
5789+
garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)));
5790+
auto arrow_value_builder = arrow_builder->value_builder();
5791+
priv->value_builder = garrow_array_builder_new_raw(arrow_value_builder);
5792+
}
5793+
return priv->value_builder;
5794+
}
5795+
56775796
G_DEFINE_TYPE(GArrowStructArrayBuilder,
56785797
garrow_struct_array_builder,
56795798
GARROW_TYPE_ARRAY_BUILDER)
@@ -6779,6 +6898,9 @@ garrow_array_builder_new_raw(std::shared_ptr<arrow::ArrayBuilder> *arrow_builder
67796898
case arrow::Type::type::LARGE_LIST:
67806899
type = GARROW_TYPE_LARGE_LIST_ARRAY_BUILDER;
67816900
break;
6901+
case arrow::Type::type::FIXED_SIZE_LIST:
6902+
type = GARROW_TYPE_FIXED_SIZE_LIST_ARRAY_BUILDER;
6903+
break;
67826904
case arrow::Type::type::STRUCT:
67836905
type = GARROW_TYPE_STRUCT_ARRAY_BUILDER;
67846906
break;

c_glib/arrow-glib/array-builder.h

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1635,6 +1635,32 @@ GARROW_AVAILABLE_IN_0_16
16351635
GArrowArrayBuilder *
16361636
garrow_large_list_array_builder_get_value_builder(GArrowLargeListArrayBuilder *builder);
16371637

1638+
#define GARROW_TYPE_FIXED_SIZE_LIST_ARRAY_BUILDER \
1639+
(garrow_fixed_size_list_array_builder_get_type())
1640+
GARROW_AVAILABLE_IN_23_0
1641+
G_DECLARE_DERIVABLE_TYPE(GArrowFixedSizeListArrayBuilder,
1642+
garrow_fixed_size_list_array_builder,
1643+
GARROW,
1644+
FIXED_SIZE_LIST_ARRAY_BUILDER,
1645+
GArrowArrayBuilder)
1646+
struct _GArrowFixedSizeListArrayBuilderClass
1647+
{
1648+
GArrowArrayBuilderClass parent_class;
1649+
};
1650+
1651+
GARROW_AVAILABLE_IN_23_0
1652+
GArrowFixedSizeListArrayBuilder *
1653+
garrow_fixed_size_list_array_builder_new(GArrowFixedSizeListDataType *data_type,
1654+
GError **error);
1655+
GARROW_AVAILABLE_IN_23_0
1656+
gboolean
1657+
garrow_fixed_size_list_array_builder_append_value(
1658+
GArrowFixedSizeListArrayBuilder *builder, GError **error);
1659+
GARROW_AVAILABLE_IN_23_0
1660+
GArrowArrayBuilder *
1661+
garrow_fixed_size_list_array_builder_get_value_builder(
1662+
GArrowFixedSizeListArrayBuilder *builder);
1663+
16381664
#define GARROW_TYPE_STRUCT_ARRAY_BUILDER (garrow_struct_array_builder_get_type())
16391665
GARROW_AVAILABLE_IN_ALL
16401666
G_DECLARE_DERIVABLE_TYPE(GArrowStructArrayBuilder,

c_glib/arrow-glib/basic-array.cpp

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4005,6 +4005,9 @@ garrow_array_new_raw_valist(std::shared_ptr<arrow::Array> *arrow_array,
40054005
case arrow::Type::type::LARGE_LIST:
40064006
type = GARROW_TYPE_LARGE_LIST_ARRAY;
40074007
break;
4008+
case arrow::Type::type::FIXED_SIZE_LIST:
4009+
type = GARROW_TYPE_FIXED_SIZE_LIST_ARRAY;
4010+
break;
40084011
case arrow::Type::type::STRUCT:
40094012
type = GARROW_TYPE_STRUCT_ARRAY;
40104013
break;

0 commit comments

Comments
 (0)