@@ -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+
56775796G_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 ;
0 commit comments