You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by GitBox <gi...@apache.org> on 2022/01/27 02:32:40 UTC

[GitHub] [arrow] kou commented on a change in pull request #12269: ARROW-15462: [GLib] Add GArrow{Month,DayTime,MonthDayNano}{Scalar,Array,ArrayBuilder}

kou commented on a change in pull request #12269:
URL: https://github.com/apache/arrow/pull/12269#discussion_r793200005



##########
File path: c_glib/arrow-glib/array-builder.cpp
##########
@@ -4484,6 +4494,326 @@ garrow_time64_array_builder_append_nulls(GArrowTime64ArrayBuilder *builder,
 }
 
 
+G_DEFINE_TYPE(GArrowMonthIntervalArrayBuilder,
+              garrow_month_interval_array_builder,
+              GARROW_TYPE_ARRAY_BUILDER)
+
+static void
+garrow_month_interval_array_builder_init(GArrowMonthIntervalArrayBuilder *builder)
+{
+}
+
+static void
+garrow_month_interval_array_builder_class_init(GArrowMonthIntervalArrayBuilderClass *klass)
+{
+}
+
+/**
+ * garrow_month_interval_array_builder_new:
+ *
+ * Returns: A newly created #GArrowMonthIntervalArrayBuilder.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthIntervalArrayBuilder *
+garrow_month_interval_array_builder_new(void)
+{
+  auto builder = garrow_array_builder_new(arrow::month_interval(),
+                                          NULL,
+                                          "[month-interval-array-builder][new]");
+  return GARROW_MONTH_INTERVAL_ARRAY_BUILDER(builder);
+}
+
+/**
+ * garrow_month_interval_array_builder_append_value:
+ * @builder: A #GArrowMonthIntervalArrayBuilder.
+ * @value: The month.
+ * @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_month_interval_array_builder_append_value(GArrowMonthIntervalArrayBuilder *builder,
+                                                 gint32 value,
+                                                 GError **error)
+{
+  return garrow_array_builder_append_value<arrow::MonthIntervalBuilder *>
+    (GARROW_ARRAY_BUILDER(builder),
+     value,
+     error,
+     "[month-interval-array-builder][append-value]");
+}
+
+/**
+ * garrow_month_interval_array_builder_append_values:
+ * @builder: A #GArrowMonthIntervalArrayBuilder.
+ * @values: (array length=values_length): The array of the month.
+ * @values_length: The length of `values`.
+ * @is_valids: (nullable) (array length=is_valids_length): The array of
+ *   boolean that shows whether the Nth value is valid or not. If the
+ *   Nth `is_valids` is %TRUE, the Nth `values` is valid value. Otherwise
+ *   the Nth value is null value.
+ * @is_valids_length: The length of `is_valids`.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Append multiple values at once. It's more efficient than multiple
+ * `append` calls.
+ *
+ * Returns: %TRUE on success, %FALSE if there was an error.
+ *
+ * Since: 8.0.0
+ */
+gboolean
+garrow_month_interval_array_builder_append_values(GArrowMonthIntervalArrayBuilder *builder,
+                                                  const gint32 *values,
+                                                  gint64 values_length,
+                                                  const gboolean *is_valids,
+                                                  gint64 is_valids_length,
+                                                  GError **error)
+{
+  return garrow_array_builder_append_values<arrow::MonthIntervalBuilder *>
+    (GARROW_ARRAY_BUILDER(builder),
+     values,
+     values_length,
+     is_valids,
+     is_valids_length,
+     error,
+     "[month-interval-array-builder][append-values]");
+}
+
+
+G_DEFINE_TYPE(GArrowDayTimeIntervalArrayBuilder,
+              garrow_day_time_interval_array_builder,
+              GARROW_TYPE_ARRAY_BUILDER)
+
+static void
+garrow_day_time_interval_array_builder_init(GArrowDayTimeIntervalArrayBuilder *builder)
+{
+}
+
+static void
+garrow_day_time_interval_array_builder_class_init(GArrowDayTimeIntervalArrayBuilderClass *klass)
+{
+}
+
+/**
+ * garrow_day_time_interval_array_builder_new:
+ *
+ * Returns: A newly created #GArrowDayTimeIntervalArrayBuilder.
+ *
+ * Since: 8.0.0
+ */
+GArrowDayTimeIntervalArrayBuilder *
+garrow_day_time_interval_array_builder_new(void)
+{
+  auto builder = garrow_array_builder_new(arrow::day_time_interval(),
+                                          NULL,
+                                          "[day-time-interval-array-builder][new]");
+  return GARROW_DAY_TIME_INTERVAL_ARRAY_BUILDER(builder);
+}
+
+/**
+ * garrow_day_time_interval_array_builder_append_value:
+ * @builder: A #GArrowDayTimeIntervalArrayBuilder.
+ * @value: A #GArrowDayMillisecond.
+ * @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_day_time_interval_array_builder_append_value(GArrowDayTimeIntervalArrayBuilder *builder,
+                                                    GArrowDayMillisecond *value,
+                                                    GError **error)
+{
+  if (value) {
+    auto arrow_day_millisecond = garrow_day_millisecond_get_raw(value);
+    return garrow_array_builder_append_value<arrow::DayTimeIntervalBuilder *>
+      (GARROW_ARRAY_BUILDER(builder),
+       *arrow_day_millisecond,
+       error,
+       "[day-time-interval-array-builder][append-value]");
+  } else {
+    return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder),
+                                            error);
+  }
+}
+
+/**
+ * garrow_day_time_interval_array_builder_append_values:
+ * @builder: A #GArrowDayTimeIntervalArrayBuilder.
+ * @values: (array length=values_length): The array of a #GArrowDayMillisecond.
+ * @values_length: The length of `values`.
+ * @is_valids: (nullable) (array length=is_valids_length): The array of
+ *   boolean that shows whether the Nth value is valid or not. If the
+ *   Nth `is_valids` is %TRUE, the Nth `values` is valid value. Otherwise
+ *   the Nth value is null value.
+ * @is_valids_length: The length of `is_valids`.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Append multiple values at once. It's more efficient than multiple
+ * `append` calls.
+ *
+ * Returns: %TRUE on success, %FALSE if there was an error.
+ *
+ * Since: 8.0.0
+ */
+gboolean
+garrow_day_time_interval_array_builder_append_values(GArrowDayTimeIntervalArrayBuilder *builder,
+                                                     const GArrowDayMillisecond **values,
+                                                     gint64 values_length,
+                                                     const gboolean *is_valids,
+                                                     gint64 is_valids_length,
+                                                     GError **error)
+{
+  auto arrow_builder =
+    static_cast<arrow::DayTimeIntervalBuilder *>(garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)));
+
+  return garrow_array_builder_append_values(
+    values,
+    values_length,
+    is_valids,
+    is_valids_length,
+    error,
+    "[day-time-interval-array-builder][append-values]",
+    [&arrow_builder](const GArrowDayMillisecond **values,
+                     gint64 values_length,
+                     const uint8_t *valid_bytes) -> arrow::Status {
+      for (int i = 0; i < values_length; i++) {
+        arrow::Status status;
+        if (!valid_bytes || valid_bytes[i]) {
+          status = arrow_builder->Append(*garrow_day_millisecond_get_raw(values[i]));
+        } else {
+          status = arrow_builder->AppendNull();
+        }
+        if (!status.ok()) {
+          return status;
+        }
+      };
+
+      return arrow::Status::OK();
+    });
+}
+
+
+G_DEFINE_TYPE(GArrowMonthDayNanoIntervalArrayBuilder,
+              garrow_month_day_nano_interval_array_builder,
+              GARROW_TYPE_ARRAY_BUILDER)
+
+static void
+garrow_month_day_nano_interval_array_builder_init(GArrowMonthDayNanoIntervalArrayBuilder *builder)
+{
+}
+
+static void
+garrow_month_day_nano_interval_array_builder_class_init(GArrowMonthDayNanoIntervalArrayBuilderClass *klass)
+{
+}
+
+/**
+ * garrow_month_day_nano_interval_array_builder_new:
+ *
+ * Returns: A newly created #GArrowMonthDayNanoIntervalArrayBuilder.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthDayNanoIntervalArrayBuilder *
+garrow_month_day_nano_interval_array_builder_new(void)
+{
+  auto builder = garrow_array_builder_new(arrow::month_day_nano_interval(),
+                                          NULL,
+                                          "[month-day-nano-interval-array-builder][new]");
+  return GARROW_MONTH_DAY_NANO_INTERVAL_ARRAY_BUILDER(builder);
+}
+
+/**
+ * garrow_month_day_nano_interval_array_builder_append_value:
+ * @builder: A #GArrowMonthDayNanoIntervalArrayBuilder.
+ * @value: A #GArrowMonthDayNano.
+ * @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_month_day_nano_interval_array_builder_append_value(GArrowMonthDayNanoIntervalArrayBuilder *builder,
+                                                          GArrowMonthDayNano *value,
+                                                          GError **error)
+{
+  if (value) {
+    auto arrow_day_millisecond = garrow_month_day_nano_get_raw(value);

Review comment:
       ```suggestion
       auto arrow_month_day_nano = garrow_month_day_nano_get_raw(value);
   ```

##########
File path: c_glib/arrow-glib/basic-array.cpp
##########
@@ -2806,6 +2822,265 @@ garrow_time64_array_get_values(GArrowTime64Array *array,
 }
 
 
+G_DEFINE_TYPE(GArrowMonthIntervalArray,
+              garrow_month_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)
+
+static void
+garrow_month_interval_array_init(GArrowMonthIntervalArray *object)
+{
+}
+
+static void
+garrow_month_interval_array_class_init(GArrowMonthIntervalArrayClass *klass)
+{
+}
+
+/**
+ * garrow_month_interval_array_new:
+ * @length: The number of elements.
+ * @data: The binary data in Arrow format of the array.
+ * @null_bitmap: (nullable): The bitmap that shows null elements. The
+ *   N-th element is null when the N-th bit is 0, not null otherwise.
+ *   If the array has no null elements, the bitmap must be %NULL and
+ *   @n_nulls is 0.
+ * @n_nulls: The number of null elements. If -1 is specified, the
+ *   number of nulls are computed from @null_bitmap.
+ *
+ * Returns: A newly created #GArrowMonthIntervalArray.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthIntervalArray *
+garrow_month_interval_array_new(gint64 length,
+                                GArrowBuffer *data,
+                                GArrowBuffer *null_bitmap,
+                                gint64 n_nulls)
+{
+  auto array = garrow_primitive_array_new<arrow::MonthIntervalType>(length,
+                                                                    data,
+                                                                    null_bitmap,
+                                                                    n_nulls);
+  return GARROW_MONTH_INTERVAL_ARRAY(array);
+}
+
+/**
+ * garrow_month_interval_array_get_value:
+ * @array: A #GArrowMonthIntervalArray.
+ * @i: The index of the target value.
+ *
+ * Returns: The @i-th value.
+ *
+ * Since: 8.0.0
+ */
+gint32
+garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                      gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  return static_cast<arrow::MonthIntervalArray *>(arrow_array.get())->Value(i);
+}
+
+/**
+ * garrow_month_interval_array_get_values:
+ * @array: A #GArrowMonthIntervalArray.
+ * @length: (out): The number of values.
+ *
+ * Returns: (array length=length): The raw values.
+ *
+ * Since: 8.0.0
+ */
+const gint32 *
+garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                       gint64 *length)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  return garrow_array_get_values_raw<arrow::MonthIntervalType>(arrow_array, length);
+}
+
+
+G_DEFINE_TYPE(GArrowDayTimeIntervalArray,
+              garrow_day_time_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)
+
+static void
+garrow_day_time_interval_array_init(GArrowDayTimeIntervalArray *object)
+{
+}
+
+static void
+garrow_day_time_interval_array_class_init(GArrowDayTimeIntervalArrayClass *klass)
+{
+}
+
+/**
+ * garrow_day_time_interval_array_new:
+ * @length: The number of elements.
+ * @data: The binary data in Arrow format of the array.
+ * @null_bitmap: (nullable): The bitmap that shows null elements. The
+ *   N-th element is null when the N-th bit is 0, not null otherwise.
+ *   If the array has no null elements, the bitmap must be %NULL and
+ *   @n_nulls is 0.
+ * @n_nulls: The number of null elements. If -1 is specified, the
+ *   number of nulls are computed from @null_bitmap.
+ *
+ * Returns: A newly created #GArrowDayTimeIntervalArray.
+ *
+ * Since: 8.0.0
+ */
+GArrowDayTimeIntervalArray *
+garrow_day_time_interval_array_new(gint64 length,
+                                   GArrowBuffer *data,
+                                   GArrowBuffer *null_bitmap,
+                                   gint64 n_nulls)
+{
+  auto array = garrow_primitive_array_new<arrow::DayTimeIntervalType>(length,
+                                                                      data,
+                                                                      null_bitmap,
+                                                                      n_nulls);
+  return GARROW_DAY_TIME_INTERVAL_ARRAY(array);
+}
+
+/**
+ * garrow_day_time_interval_array_get_value:
+ * @array: A #GArrowDayTimeIntervalArray.
+ * @i: The index of the target value.
+ *
+ * Returns: (transfer full): The @i-th value.
+ *
+ * Since: 8.0.0
+ */
+GArrowDayMillisecond *
+garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array,
+                                         gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_day_time_interval_array =
+    std::static_pointer_cast<arrow::DayTimeIntervalArray>(arrow_array);
+  auto arrow_day_time_interval = arrow_day_time_interval_array->GetValue(i);
+  return garrow_day_millisecond_new_raw(&arrow_day_time_interval);
+}
+
+/**
+ * garrow_day_time_interval_array_get_values:
+ * @array: A #GArrowDayTimeIntervalArray.
+ *
+ * Returns: (nullable) (element-type GArrowDayMillisecond) (transfer full):
+ *   The returned list of #GArrowDayMillisecond on success, %NULL on error.

Review comment:
       `NULL` isn't an error. If the number of elements is `0`, `NULL` is returned as a valid value. 
   
   ```suggestion
    *   The list of #GArrowDayMillisecond.
   ```

##########
File path: c_glib/arrow-glib/array-builder.cpp
##########
@@ -4484,6 +4494,326 @@ garrow_time64_array_builder_append_nulls(GArrowTime64ArrayBuilder *builder,
 }
 
 
+G_DEFINE_TYPE(GArrowMonthIntervalArrayBuilder,
+              garrow_month_interval_array_builder,
+              GARROW_TYPE_ARRAY_BUILDER)
+
+static void
+garrow_month_interval_array_builder_init(GArrowMonthIntervalArrayBuilder *builder)
+{
+}
+
+static void
+garrow_month_interval_array_builder_class_init(GArrowMonthIntervalArrayBuilderClass *klass)
+{
+}
+
+/**
+ * garrow_month_interval_array_builder_new:
+ *
+ * Returns: A newly created #GArrowMonthIntervalArrayBuilder.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthIntervalArrayBuilder *
+garrow_month_interval_array_builder_new(void)
+{
+  auto builder = garrow_array_builder_new(arrow::month_interval(),
+                                          NULL,
+                                          "[month-interval-array-builder][new]");
+  return GARROW_MONTH_INTERVAL_ARRAY_BUILDER(builder);
+}
+
+/**
+ * garrow_month_interval_array_builder_append_value:
+ * @builder: A #GArrowMonthIntervalArrayBuilder.
+ * @value: The month.
+ * @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_month_interval_array_builder_append_value(GArrowMonthIntervalArrayBuilder *builder,
+                                                 gint32 value,
+                                                 GError **error)
+{
+  return garrow_array_builder_append_value<arrow::MonthIntervalBuilder *>
+    (GARROW_ARRAY_BUILDER(builder),
+     value,
+     error,
+     "[month-interval-array-builder][append-value]");
+}
+
+/**
+ * garrow_month_interval_array_builder_append_values:
+ * @builder: A #GArrowMonthIntervalArrayBuilder.
+ * @values: (array length=values_length): The array of the month.
+ * @values_length: The length of `values`.
+ * @is_valids: (nullable) (array length=is_valids_length): The array of
+ *   boolean that shows whether the Nth value is valid or not. If the
+ *   Nth `is_valids` is %TRUE, the Nth `values` is valid value. Otherwise
+ *   the Nth value is null value.
+ * @is_valids_length: The length of `is_valids`.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Append multiple values at once. It's more efficient than multiple
+ * `append` calls.
+ *
+ * Returns: %TRUE on success, %FALSE if there was an error.
+ *
+ * Since: 8.0.0
+ */
+gboolean
+garrow_month_interval_array_builder_append_values(GArrowMonthIntervalArrayBuilder *builder,
+                                                  const gint32 *values,
+                                                  gint64 values_length,
+                                                  const gboolean *is_valids,
+                                                  gint64 is_valids_length,
+                                                  GError **error)
+{
+  return garrow_array_builder_append_values<arrow::MonthIntervalBuilder *>
+    (GARROW_ARRAY_BUILDER(builder),
+     values,
+     values_length,
+     is_valids,
+     is_valids_length,
+     error,
+     "[month-interval-array-builder][append-values]");
+}
+
+
+G_DEFINE_TYPE(GArrowDayTimeIntervalArrayBuilder,
+              garrow_day_time_interval_array_builder,
+              GARROW_TYPE_ARRAY_BUILDER)
+
+static void
+garrow_day_time_interval_array_builder_init(GArrowDayTimeIntervalArrayBuilder *builder)
+{
+}
+
+static void
+garrow_day_time_interval_array_builder_class_init(GArrowDayTimeIntervalArrayBuilderClass *klass)
+{
+}
+
+/**
+ * garrow_day_time_interval_array_builder_new:
+ *
+ * Returns: A newly created #GArrowDayTimeIntervalArrayBuilder.
+ *
+ * Since: 8.0.0
+ */
+GArrowDayTimeIntervalArrayBuilder *
+garrow_day_time_interval_array_builder_new(void)
+{
+  auto builder = garrow_array_builder_new(arrow::day_time_interval(),
+                                          NULL,
+                                          "[day-time-interval-array-builder][new]");
+  return GARROW_DAY_TIME_INTERVAL_ARRAY_BUILDER(builder);
+}
+
+/**
+ * garrow_day_time_interval_array_builder_append_value:
+ * @builder: A #GArrowDayTimeIntervalArrayBuilder.
+ * @value: A #GArrowDayMillisecond.
+ * @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_day_time_interval_array_builder_append_value(GArrowDayTimeIntervalArrayBuilder *builder,
+                                                    GArrowDayMillisecond *value,
+                                                    GError **error)
+{
+  if (value) {
+    auto arrow_day_millisecond = garrow_day_millisecond_get_raw(value);
+    return garrow_array_builder_append_value<arrow::DayTimeIntervalBuilder *>
+      (GARROW_ARRAY_BUILDER(builder),
+       *arrow_day_millisecond,
+       error,
+       "[day-time-interval-array-builder][append-value]");
+  } else {
+    return garrow_array_builder_append_null(GARROW_ARRAY_BUILDER(builder),
+                                            error);
+  }
+}
+
+/**
+ * garrow_day_time_interval_array_builder_append_values:
+ * @builder: A #GArrowDayTimeIntervalArrayBuilder.
+ * @values: (array length=values_length): The array of a #GArrowDayMillisecond.
+ * @values_length: The length of `values`.
+ * @is_valids: (nullable) (array length=is_valids_length): The array of
+ *   boolean that shows whether the Nth value is valid or not. If the
+ *   Nth `is_valids` is %TRUE, the Nth `values` is valid value. Otherwise
+ *   the Nth value is null value.
+ * @is_valids_length: The length of `is_valids`.
+ * @error: (nullable): Return location for a #GError or %NULL.
+ *
+ * Append multiple values at once. It's more efficient than multiple
+ * `append` calls.
+ *
+ * Returns: %TRUE on success, %FALSE if there was an error.
+ *
+ * Since: 8.0.0
+ */
+gboolean
+garrow_day_time_interval_array_builder_append_values(GArrowDayTimeIntervalArrayBuilder *builder,
+                                                     const GArrowDayMillisecond **values,
+                                                     gint64 values_length,
+                                                     const gboolean *is_valids,
+                                                     gint64 is_valids_length,
+                                                     GError **error)
+{
+  auto arrow_builder =
+    static_cast<arrow::DayTimeIntervalBuilder *>(garrow_array_builder_get_raw(GARROW_ARRAY_BUILDER(builder)));
+
+  return garrow_array_builder_append_values(
+    values,
+    values_length,
+    is_valids,
+    is_valids_length,
+    error,
+    "[day-time-interval-array-builder][append-values]",
+    [&arrow_builder](const GArrowDayMillisecond **values,
+                     gint64 values_length,
+                     const uint8_t *valid_bytes) -> arrow::Status {
+      for (int i = 0; i < values_length; i++) {
+        arrow::Status status;
+        if (!valid_bytes || valid_bytes[i]) {
+          status = arrow_builder->Append(*garrow_day_millisecond_get_raw(values[i]));
+        } else {
+          status = arrow_builder->AppendNull();
+        }
+        if (!status.ok()) {
+          return status;
+        }
+      };
+
+      return arrow::Status::OK();
+    });
+}
+
+
+G_DEFINE_TYPE(GArrowMonthDayNanoIntervalArrayBuilder,
+              garrow_month_day_nano_interval_array_builder,
+              GARROW_TYPE_ARRAY_BUILDER)
+
+static void
+garrow_month_day_nano_interval_array_builder_init(GArrowMonthDayNanoIntervalArrayBuilder *builder)
+{
+}
+
+static void
+garrow_month_day_nano_interval_array_builder_class_init(GArrowMonthDayNanoIntervalArrayBuilderClass *klass)
+{
+}
+
+/**
+ * garrow_month_day_nano_interval_array_builder_new:
+ *
+ * Returns: A newly created #GArrowMonthDayNanoIntervalArrayBuilder.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthDayNanoIntervalArrayBuilder *
+garrow_month_day_nano_interval_array_builder_new(void)
+{
+  auto builder = garrow_array_builder_new(arrow::month_day_nano_interval(),
+                                          NULL,
+                                          "[month-day-nano-interval-array-builder][new]");
+  return GARROW_MONTH_DAY_NANO_INTERVAL_ARRAY_BUILDER(builder);
+}
+
+/**
+ * garrow_month_day_nano_interval_array_builder_append_value:
+ * @builder: A #GArrowMonthDayNanoIntervalArrayBuilder.
+ * @value: A #GArrowMonthDayNano.
+ * @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_month_day_nano_interval_array_builder_append_value(GArrowMonthDayNanoIntervalArrayBuilder *builder,
+                                                          GArrowMonthDayNano *value,
+                                                          GError **error)
+{
+  if (value) {
+    auto arrow_day_millisecond = garrow_month_day_nano_get_raw(value);
+    return garrow_array_builder_append_value<arrow::MonthDayNanoIntervalBuilder *>
+      (GARROW_ARRAY_BUILDER(builder),
+       *arrow_day_millisecond,

Review comment:
       ```suggestion
          *arrow_month_day_nano,
   ```

##########
File path: c_glib/arrow-glib/basic-array.h
##########
@@ -617,6 +618,76 @@ const gint64 *garrow_time64_array_get_values(GArrowTime64Array *array,
                                              gint64 *length);
 
 
+#define GARROW_TYPE_MONTH_INTERVAL_ARRAY (garrow_month_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalArray,
+                         garrow_month_interval_array,
+                         GARROW,
+                         MONTH_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowMonthIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;
+};
+
+GARROW_AVAILABLE_IN_8_0
+GArrowMonthIntervalArray *garrow_month_interval_array_new(gint64 length,
+                                                          GArrowBuffer *data,
+                                                          GArrowBuffer *null_bitmap,
+                                                          gint64 n_nulls);
+GARROW_AVAILABLE_IN_8_0
+gint32 garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                             gint64 i);
+GARROW_AVAILABLE_IN_8_0
+const gint32 *garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                             gint64 *length);
+
+
+#define GARROW_TYPE_DAY_TIME_INTERVAL_ARRAY (garrow_day_time_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowDayTimeIntervalArray,
+                         garrow_day_time_interval_array,
+                         GARROW,
+                         DAY_TIME_INTERVAL_ARRAY,
+                         GArrowNumericArray)

Review comment:
       ```suggestion
                            GArrowPrimitiveArray)
   ```

##########
File path: c_glib/arrow-glib/basic-array.cpp
##########
@@ -2806,6 +2822,265 @@ garrow_time64_array_get_values(GArrowTime64Array *array,
 }
 
 
+G_DEFINE_TYPE(GArrowMonthIntervalArray,
+              garrow_month_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)
+
+static void
+garrow_month_interval_array_init(GArrowMonthIntervalArray *object)
+{
+}
+
+static void
+garrow_month_interval_array_class_init(GArrowMonthIntervalArrayClass *klass)
+{
+}
+
+/**
+ * garrow_month_interval_array_new:
+ * @length: The number of elements.
+ * @data: The binary data in Arrow format of the array.
+ * @null_bitmap: (nullable): The bitmap that shows null elements. The
+ *   N-th element is null when the N-th bit is 0, not null otherwise.
+ *   If the array has no null elements, the bitmap must be %NULL and
+ *   @n_nulls is 0.
+ * @n_nulls: The number of null elements. If -1 is specified, the
+ *   number of nulls are computed from @null_bitmap.
+ *
+ * Returns: A newly created #GArrowMonthIntervalArray.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthIntervalArray *
+garrow_month_interval_array_new(gint64 length,
+                                GArrowBuffer *data,
+                                GArrowBuffer *null_bitmap,
+                                gint64 n_nulls)
+{
+  auto array = garrow_primitive_array_new<arrow::MonthIntervalType>(length,
+                                                                    data,
+                                                                    null_bitmap,
+                                                                    n_nulls);
+  return GARROW_MONTH_INTERVAL_ARRAY(array);
+}
+
+/**
+ * garrow_month_interval_array_get_value:
+ * @array: A #GArrowMonthIntervalArray.
+ * @i: The index of the target value.
+ *
+ * Returns: The @i-th value.
+ *
+ * Since: 8.0.0
+ */
+gint32
+garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                      gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  return static_cast<arrow::MonthIntervalArray *>(arrow_array.get())->Value(i);
+}
+
+/**
+ * garrow_month_interval_array_get_values:
+ * @array: A #GArrowMonthIntervalArray.
+ * @length: (out): The number of values.
+ *
+ * Returns: (array length=length): The raw values.
+ *
+ * Since: 8.0.0
+ */
+const gint32 *
+garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                       gint64 *length)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  return garrow_array_get_values_raw<arrow::MonthIntervalType>(arrow_array, length);
+}
+
+
+G_DEFINE_TYPE(GArrowDayTimeIntervalArray,
+              garrow_day_time_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)

Review comment:
       ```suggestion
                 GARROW_TYPE_PRIMITIVE_ARRAY)
   ```

##########
File path: c_glib/arrow-glib/basic-array.h
##########
@@ -617,6 +618,76 @@ const gint64 *garrow_time64_array_get_values(GArrowTime64Array *array,
                                              gint64 *length);
 
 
+#define GARROW_TYPE_MONTH_INTERVAL_ARRAY (garrow_month_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalArray,
+                         garrow_month_interval_array,
+                         GARROW,
+                         MONTH_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowMonthIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;
+};
+
+GARROW_AVAILABLE_IN_8_0
+GArrowMonthIntervalArray *garrow_month_interval_array_new(gint64 length,
+                                                          GArrowBuffer *data,
+                                                          GArrowBuffer *null_bitmap,
+                                                          gint64 n_nulls);
+GARROW_AVAILABLE_IN_8_0
+gint32 garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                             gint64 i);
+GARROW_AVAILABLE_IN_8_0
+const gint32 *garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                             gint64 *length);

Review comment:
       ```suggestion
                                                        gint64 *length);
   ```

##########
File path: c_glib/arrow-glib/meson.build
##########
@@ -27,6 +27,7 @@ sources = files(
   'composite-array.cpp',
   'composite-data-type.cpp',
   'datum.cpp',
+  'interval.cpp',

Review comment:
       Could you keep this list in alphabetical order?

##########
File path: c_glib/arrow-glib/basic-array.h
##########
@@ -617,6 +618,76 @@ const gint64 *garrow_time64_array_get_values(GArrowTime64Array *array,
                                              gint64 *length);
 
 
+#define GARROW_TYPE_MONTH_INTERVAL_ARRAY (garrow_month_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalArray,
+                         garrow_month_interval_array,
+                         GARROW,
+                         MONTH_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowMonthIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;
+};
+
+GARROW_AVAILABLE_IN_8_0
+GArrowMonthIntervalArray *garrow_month_interval_array_new(gint64 length,
+                                                          GArrowBuffer *data,
+                                                          GArrowBuffer *null_bitmap,
+                                                          gint64 n_nulls);
+GARROW_AVAILABLE_IN_8_0
+gint32 garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                             gint64 i);
+GARROW_AVAILABLE_IN_8_0
+const gint32 *garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                             gint64 *length);
+
+
+#define GARROW_TYPE_DAY_TIME_INTERVAL_ARRAY (garrow_day_time_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowDayTimeIntervalArray,
+                         garrow_day_time_interval_array,
+                         GARROW,
+                         DAY_TIME_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowDayTimeIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;
+};
+
+GARROW_AVAILABLE_IN_8_0
+GArrowDayTimeIntervalArray *garrow_day_time_interval_array_new(gint64 length,
+                                                               GArrowBuffer *data,
+                                                               GArrowBuffer *null_bitmap,
+                                                               gint64 n_nulls);
+GARROW_AVAILABLE_IN_8_0
+GArrowDayMillisecond *garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array,
+                                                               gint64 i);
+GARROW_AVAILABLE_IN_8_0
+GList *garrow_day_time_interval_array_get_values(GArrowDayTimeIntervalArray *array);
+
+
+#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_ARRAY (garrow_month_day_nano_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowMonthDayNanoIntervalArray,
+                         garrow_month_day_nano_interval_array,
+                         GARROW,
+                         MONTH_DAY_NANO_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowMonthDayNanoIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;

Review comment:
       ```suggestion
     GArrowPrimitiveArrayClass parent_class;
   ```

##########
File path: c_glib/arrow-glib/basic-array.h
##########
@@ -617,6 +618,76 @@ const gint64 *garrow_time64_array_get_values(GArrowTime64Array *array,
                                              gint64 *length);
 
 
+#define GARROW_TYPE_MONTH_INTERVAL_ARRAY (garrow_month_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalArray,
+                         garrow_month_interval_array,
+                         GARROW,
+                         MONTH_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowMonthIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;
+};
+
+GARROW_AVAILABLE_IN_8_0
+GArrowMonthIntervalArray *garrow_month_interval_array_new(gint64 length,
+                                                          GArrowBuffer *data,
+                                                          GArrowBuffer *null_bitmap,
+                                                          gint64 n_nulls);
+GARROW_AVAILABLE_IN_8_0
+gint32 garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                             gint64 i);
+GARROW_AVAILABLE_IN_8_0
+const gint32 *garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                             gint64 *length);
+
+
+#define GARROW_TYPE_DAY_TIME_INTERVAL_ARRAY (garrow_day_time_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowDayTimeIntervalArray,
+                         garrow_day_time_interval_array,
+                         GARROW,
+                         DAY_TIME_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowDayTimeIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;
+};
+
+GARROW_AVAILABLE_IN_8_0
+GArrowDayTimeIntervalArray *garrow_day_time_interval_array_new(gint64 length,
+                                                               GArrowBuffer *data,
+                                                               GArrowBuffer *null_bitmap,
+                                                               gint64 n_nulls);
+GARROW_AVAILABLE_IN_8_0
+GArrowDayMillisecond *garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array,
+                                                               gint64 i);
+GARROW_AVAILABLE_IN_8_0
+GList *garrow_day_time_interval_array_get_values(GArrowDayTimeIntervalArray *array);
+
+
+#define GARROW_TYPE_MONTH_DAY_NANO_INTERVAL_ARRAY (garrow_month_day_nano_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowMonthDayNanoIntervalArray,
+                         garrow_month_day_nano_interval_array,
+                         GARROW,
+                         MONTH_DAY_NANO_INTERVAL_ARRAY,
+                         GArrowNumericArray)

Review comment:
       ```suggestion
                            GArrowPrimitiveArray)
   ```

##########
File path: c_glib/arrow-glib/basic-array.h
##########
@@ -617,6 +618,76 @@ const gint64 *garrow_time64_array_get_values(GArrowTime64Array *array,
                                              gint64 *length);
 
 
+#define GARROW_TYPE_MONTH_INTERVAL_ARRAY (garrow_month_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowMonthIntervalArray,
+                         garrow_month_interval_array,
+                         GARROW,
+                         MONTH_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowMonthIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;
+};
+
+GARROW_AVAILABLE_IN_8_0
+GArrowMonthIntervalArray *garrow_month_interval_array_new(gint64 length,
+                                                          GArrowBuffer *data,
+                                                          GArrowBuffer *null_bitmap,
+                                                          gint64 n_nulls);
+GARROW_AVAILABLE_IN_8_0
+gint32 garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                             gint64 i);
+GARROW_AVAILABLE_IN_8_0
+const gint32 *garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                             gint64 *length);
+
+
+#define GARROW_TYPE_DAY_TIME_INTERVAL_ARRAY (garrow_day_time_interval_array_get_type())
+G_DECLARE_DERIVABLE_TYPE(GArrowDayTimeIntervalArray,
+                         garrow_day_time_interval_array,
+                         GARROW,
+                         DAY_TIME_INTERVAL_ARRAY,
+                         GArrowNumericArray)
+struct _GArrowDayTimeIntervalArrayClass
+{
+  GArrowNumericArrayClass parent_class;

Review comment:
       ```suggestion
     GArrowPrimitiveArrayClass parent_class;
   ```

##########
File path: c_glib/arrow-glib/basic-array.h
##########
@@ -20,6 +20,7 @@
 #pragma once
 
 #include <arrow-glib/basic-data-type.h>
+#include <arrow-glib/interval.h>

Review comment:
       Could you keep this list in alphabetical order?

##########
File path: c_glib/arrow-glib/basic-array.cpp
##########
@@ -2806,6 +2822,265 @@ garrow_time64_array_get_values(GArrowTime64Array *array,
 }
 
 
+G_DEFINE_TYPE(GArrowMonthIntervalArray,
+              garrow_month_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)
+
+static void
+garrow_month_interval_array_init(GArrowMonthIntervalArray *object)
+{
+}
+
+static void
+garrow_month_interval_array_class_init(GArrowMonthIntervalArrayClass *klass)
+{
+}
+
+/**
+ * garrow_month_interval_array_new:
+ * @length: The number of elements.
+ * @data: The binary data in Arrow format of the array.
+ * @null_bitmap: (nullable): The bitmap that shows null elements. The
+ *   N-th element is null when the N-th bit is 0, not null otherwise.
+ *   If the array has no null elements, the bitmap must be %NULL and
+ *   @n_nulls is 0.
+ * @n_nulls: The number of null elements. If -1 is specified, the
+ *   number of nulls are computed from @null_bitmap.
+ *
+ * Returns: A newly created #GArrowMonthIntervalArray.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthIntervalArray *
+garrow_month_interval_array_new(gint64 length,
+                                GArrowBuffer *data,
+                                GArrowBuffer *null_bitmap,
+                                gint64 n_nulls)
+{
+  auto array = garrow_primitive_array_new<arrow::MonthIntervalType>(length,
+                                                                    data,
+                                                                    null_bitmap,
+                                                                    n_nulls);
+  return GARROW_MONTH_INTERVAL_ARRAY(array);
+}
+
+/**
+ * garrow_month_interval_array_get_value:
+ * @array: A #GArrowMonthIntervalArray.
+ * @i: The index of the target value.
+ *
+ * Returns: The @i-th value.
+ *
+ * Since: 8.0.0
+ */
+gint32
+garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                      gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  return static_cast<arrow::MonthIntervalArray *>(arrow_array.get())->Value(i);
+}
+
+/**
+ * garrow_month_interval_array_get_values:
+ * @array: A #GArrowMonthIntervalArray.
+ * @length: (out): The number of values.
+ *
+ * Returns: (array length=length): The raw values.
+ *
+ * Since: 8.0.0
+ */
+const gint32 *
+garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                       gint64 *length)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  return garrow_array_get_values_raw<arrow::MonthIntervalType>(arrow_array, length);
+}
+
+
+G_DEFINE_TYPE(GArrowDayTimeIntervalArray,
+              garrow_day_time_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)
+
+static void
+garrow_day_time_interval_array_init(GArrowDayTimeIntervalArray *object)
+{
+}
+
+static void
+garrow_day_time_interval_array_class_init(GArrowDayTimeIntervalArrayClass *klass)
+{
+}
+
+/**
+ * garrow_day_time_interval_array_new:
+ * @length: The number of elements.
+ * @data: The binary data in Arrow format of the array.
+ * @null_bitmap: (nullable): The bitmap that shows null elements. The
+ *   N-th element is null when the N-th bit is 0, not null otherwise.
+ *   If the array has no null elements, the bitmap must be %NULL and
+ *   @n_nulls is 0.
+ * @n_nulls: The number of null elements. If -1 is specified, the
+ *   number of nulls are computed from @null_bitmap.
+ *
+ * Returns: A newly created #GArrowDayTimeIntervalArray.
+ *
+ * Since: 8.0.0
+ */
+GArrowDayTimeIntervalArray *
+garrow_day_time_interval_array_new(gint64 length,
+                                   GArrowBuffer *data,
+                                   GArrowBuffer *null_bitmap,
+                                   gint64 n_nulls)
+{
+  auto array = garrow_primitive_array_new<arrow::DayTimeIntervalType>(length,
+                                                                      data,
+                                                                      null_bitmap,
+                                                                      n_nulls);
+  return GARROW_DAY_TIME_INTERVAL_ARRAY(array);
+}
+
+/**
+ * garrow_day_time_interval_array_get_value:
+ * @array: A #GArrowDayTimeIntervalArray.
+ * @i: The index of the target value.
+ *
+ * Returns: (transfer full): The @i-th value.
+ *
+ * Since: 8.0.0
+ */
+GArrowDayMillisecond *
+garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array,
+                                         gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_day_time_interval_array =
+    std::static_pointer_cast<arrow::DayTimeIntervalArray>(arrow_array);
+  auto arrow_day_time_interval = arrow_day_time_interval_array->GetValue(i);
+  return garrow_day_millisecond_new_raw(&arrow_day_time_interval);
+}
+
+/**
+ * garrow_day_time_interval_array_get_values:
+ * @array: A #GArrowDayTimeIntervalArray.
+ *
+ * Returns: (nullable) (element-type GArrowDayMillisecond) (transfer full):
+ *   The returned list of #GArrowDayMillisecond on success, %NULL on error.
+ *
+ * Since: 8.0.0
+ */
+GList *
+garrow_day_time_interval_array_get_values(GArrowDayTimeIntervalArray *array)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_day_time_interval_array =
+    std::static_pointer_cast<arrow::DayTimeIntervalArray>(arrow_array);
+  auto length = arrow_day_time_interval_array->length();
+  GList *values = NULL;
+  for (gint64 i = 0; i < length; ++i) {
+    if (arrow_day_time_interval_array->IsValid(i)) {
+      auto arrow_day_time_interval = arrow_day_time_interval_array->GetValue(i);
+      values = g_list_prepend(values, garrow_day_millisecond_new_raw(&arrow_day_time_interval));
+    } else {
+      values = g_list_prepend(values, NULL);
+    }
+  }
+  return g_list_reverse(values);
+}
+
+
+G_DEFINE_TYPE(GArrowMonthDayNanoIntervalArray,
+              garrow_month_day_nano_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)
+
+static void
+garrow_month_day_nano_interval_array_init(GArrowMonthDayNanoIntervalArray *object)
+{
+}
+
+static void
+garrow_month_day_nano_interval_array_class_init(GArrowMonthDayNanoIntervalArrayClass *klass)
+{
+}
+
+/**
+ * garrow_month_day_nano_interval_array_new:
+ * @length: The number of elements.
+ * @data: The binary data in Arrow format of the array.
+ * @null_bitmap: (nullable): The bitmap that shows null elements. The
+ *   N-th element is null when the N-th bit is 0, not null otherwise.
+ *   If the array has no null elements, the bitmap must be %NULL and
+ *   @n_nulls is 0.
+ * @n_nulls: The number of null elements. If -1 is specified, the
+ *   number of nulls are computed from @null_bitmap.
+ *
+ * Returns: A newly created #GArrowMonthDayNanoIntervalArray.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthDayNanoIntervalArray *
+garrow_month_day_nano_interval_array_new(gint64 length,
+                                         GArrowBuffer *data,
+                                         GArrowBuffer *null_bitmap,
+                                         gint64 n_nulls)
+{
+  auto array = garrow_primitive_array_new<arrow::MonthDayNanoIntervalType>(length,
+                                                                           data,
+                                                                           null_bitmap,
+                                                                           n_nulls);
+  return GARROW_MONTH_DAY_NANO_INTERVAL_ARRAY(array);
+}
+
+/**
+ * garrow_month_day_nano_interval_array_get_value:
+ * @array: A #GArrowMonthDayNanoIntervalArray.
+ * @i: The index of the target value.
+ *
+ * Returns: (transfer full): The @i-th value.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthDayNano *
+garrow_month_day_nano_interval_array_get_value(GArrowMonthDayNanoIntervalArray *array,
+                                               gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_month_day_nano_interval_array =
+    std::static_pointer_cast<arrow::MonthDayNanoIntervalArray>(arrow_array);
+  auto arrow_month_day_nano_interval = arrow_month_day_nano_interval_array->GetValue(i);
+  return garrow_month_day_nano_new_raw(&arrow_month_day_nano_interval);
+}
+
+/**
+ * garrow_month_day_nano_interval_array_get_values:
+ * @array: A #GArrowMonthDayNanoIntervalArray.
+ *
+ * Returns: (nullable) (element-type GArrowMonthDayNano) (transfer full):
+ *   The returned list of #GArrowMonthDayNano on success, %NULL on error.

Review comment:
       ```suggestion
    *   The list of #GArrowMonthDayNano.
   ```

##########
File path: c_glib/arrow-glib/scalar.cpp
##########
@@ -20,6 +20,7 @@
 #include <arrow-glib/basic-array.hpp>
 #include <arrow-glib/buffer.hpp>
 #include <arrow-glib/data-type.hpp>
+#include <arrow-glib/interval.hpp>

Review comment:
       Could you keep this list in alphabetical order?

##########
File path: c_glib/arrow-glib/basic-array.cpp
##########
@@ -2806,6 +2822,265 @@ garrow_time64_array_get_values(GArrowTime64Array *array,
 }
 
 
+G_DEFINE_TYPE(GArrowMonthIntervalArray,
+              garrow_month_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)
+
+static void
+garrow_month_interval_array_init(GArrowMonthIntervalArray *object)
+{
+}
+
+static void
+garrow_month_interval_array_class_init(GArrowMonthIntervalArrayClass *klass)
+{
+}
+
+/**
+ * garrow_month_interval_array_new:
+ * @length: The number of elements.
+ * @data: The binary data in Arrow format of the array.
+ * @null_bitmap: (nullable): The bitmap that shows null elements. The
+ *   N-th element is null when the N-th bit is 0, not null otherwise.
+ *   If the array has no null elements, the bitmap must be %NULL and
+ *   @n_nulls is 0.
+ * @n_nulls: The number of null elements. If -1 is specified, the
+ *   number of nulls are computed from @null_bitmap.
+ *
+ * Returns: A newly created #GArrowMonthIntervalArray.
+ *
+ * Since: 8.0.0
+ */
+GArrowMonthIntervalArray *
+garrow_month_interval_array_new(gint64 length,
+                                GArrowBuffer *data,
+                                GArrowBuffer *null_bitmap,
+                                gint64 n_nulls)
+{
+  auto array = garrow_primitive_array_new<arrow::MonthIntervalType>(length,
+                                                                    data,
+                                                                    null_bitmap,
+                                                                    n_nulls);
+  return GARROW_MONTH_INTERVAL_ARRAY(array);
+}
+
+/**
+ * garrow_month_interval_array_get_value:
+ * @array: A #GArrowMonthIntervalArray.
+ * @i: The index of the target value.
+ *
+ * Returns: The @i-th value.
+ *
+ * Since: 8.0.0
+ */
+gint32
+garrow_month_interval_array_get_value(GArrowMonthIntervalArray *array,
+                                      gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  return static_cast<arrow::MonthIntervalArray *>(arrow_array.get())->Value(i);
+}
+
+/**
+ * garrow_month_interval_array_get_values:
+ * @array: A #GArrowMonthIntervalArray.
+ * @length: (out): The number of values.
+ *
+ * Returns: (array length=length): The raw values.
+ *
+ * Since: 8.0.0
+ */
+const gint32 *
+garrow_month_interval_array_get_values(GArrowMonthIntervalArray *array,
+                                       gint64 *length)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  return garrow_array_get_values_raw<arrow::MonthIntervalType>(arrow_array, length);
+}
+
+
+G_DEFINE_TYPE(GArrowDayTimeIntervalArray,
+              garrow_day_time_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)
+
+static void
+garrow_day_time_interval_array_init(GArrowDayTimeIntervalArray *object)
+{
+}
+
+static void
+garrow_day_time_interval_array_class_init(GArrowDayTimeIntervalArrayClass *klass)
+{
+}
+
+/**
+ * garrow_day_time_interval_array_new:
+ * @length: The number of elements.
+ * @data: The binary data in Arrow format of the array.
+ * @null_bitmap: (nullable): The bitmap that shows null elements. The
+ *   N-th element is null when the N-th bit is 0, not null otherwise.
+ *   If the array has no null elements, the bitmap must be %NULL and
+ *   @n_nulls is 0.
+ * @n_nulls: The number of null elements. If -1 is specified, the
+ *   number of nulls are computed from @null_bitmap.
+ *
+ * Returns: A newly created #GArrowDayTimeIntervalArray.
+ *
+ * Since: 8.0.0
+ */
+GArrowDayTimeIntervalArray *
+garrow_day_time_interval_array_new(gint64 length,
+                                   GArrowBuffer *data,
+                                   GArrowBuffer *null_bitmap,
+                                   gint64 n_nulls)
+{
+  auto array = garrow_primitive_array_new<arrow::DayTimeIntervalType>(length,
+                                                                      data,
+                                                                      null_bitmap,
+                                                                      n_nulls);
+  return GARROW_DAY_TIME_INTERVAL_ARRAY(array);
+}
+
+/**
+ * garrow_day_time_interval_array_get_value:
+ * @array: A #GArrowDayTimeIntervalArray.
+ * @i: The index of the target value.
+ *
+ * Returns: (transfer full): The @i-th value.
+ *
+ * Since: 8.0.0
+ */
+GArrowDayMillisecond *
+garrow_day_time_interval_array_get_value(GArrowDayTimeIntervalArray *array,
+                                         gint64 i)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_day_time_interval_array =
+    std::static_pointer_cast<arrow::DayTimeIntervalArray>(arrow_array);
+  auto arrow_day_time_interval = arrow_day_time_interval_array->GetValue(i);
+  return garrow_day_millisecond_new_raw(&arrow_day_time_interval);
+}
+
+/**
+ * garrow_day_time_interval_array_get_values:
+ * @array: A #GArrowDayTimeIntervalArray.
+ *
+ * Returns: (nullable) (element-type GArrowDayMillisecond) (transfer full):
+ *   The returned list of #GArrowDayMillisecond on success, %NULL on error.
+ *
+ * Since: 8.0.0
+ */
+GList *
+garrow_day_time_interval_array_get_values(GArrowDayTimeIntervalArray *array)
+{
+  auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
+  auto arrow_day_time_interval_array =
+    std::static_pointer_cast<arrow::DayTimeIntervalArray>(arrow_array);
+  auto length = arrow_day_time_interval_array->length();
+  GList *values = NULL;
+  for (gint64 i = 0; i < length; ++i) {
+    if (arrow_day_time_interval_array->IsValid(i)) {
+      auto arrow_day_time_interval = arrow_day_time_interval_array->GetValue(i);
+      values = g_list_prepend(values, garrow_day_millisecond_new_raw(&arrow_day_time_interval));
+    } else {
+      values = g_list_prepend(values, NULL);
+    }
+  }
+  return g_list_reverse(values);
+}
+
+
+G_DEFINE_TYPE(GArrowMonthDayNanoIntervalArray,
+              garrow_month_day_nano_interval_array,
+              GARROW_TYPE_NUMERIC_ARRAY)

Review comment:
       ```suggestion
                 GARROW_TYPE_PRIMITIVE_ARRAY)
   ```




-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org