Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 21 additions & 6 deletions c_glib/arrow-glib/basic-array.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2329,7 +2329,10 @@ garrow_base_binary_array_get_value(GArrowArray *array, gint64 i)
auto arrow_array = garrow_array_get_raw(array);
auto arrow_binary_array = std::static_pointer_cast<BINARY_ARRAY_CLASS>(arrow_array);
auto view = arrow_binary_array->GetView(i);
return g_bytes_new_static(view.data(), view.length());
return g_bytes_new_with_free_func(view.data(),
view.length(),
g_object_unref,
g_object_ref(array));
};

template <typename BINARY_ARRAY_CLASS>
Expand Down Expand Up @@ -2763,7 +2766,10 @@ garrow_binary_view_array_get_value(GArrowBinaryViewArray *array, gint64 i)
{
auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
auto view = static_cast<arrow::BinaryViewArray *>(arrow_array.get())->GetView(i);
return g_bytes_new_static(view.data(), view.length());
return g_bytes_new_with_free_func(view.data(),
view.length(),
g_object_unref,
g_object_ref(array));
}

G_DEFINE_TYPE(GArrowStringViewArray,
Expand Down Expand Up @@ -2834,7 +2840,10 @@ garrow_string_view_array_get_value(GArrowStringViewArray *array, gint64 i)
{
auto arrow_array = garrow_array_get_raw(GARROW_ARRAY(array));
auto view = static_cast<arrow::StringViewArray *>(arrow_array.get())->GetView(i);
return g_bytes_new_static(view.data(), view.length());
return g_bytes_new_with_free_func(view.data(),
view.length(),
g_object_unref,
g_object_ref(array));
}

G_DEFINE_TYPE(GArrowDate32Array, garrow_date32_array, GARROW_TYPE_NUMERIC_ARRAY)
Expand Down Expand Up @@ -3617,7 +3626,10 @@ garrow_fixed_size_binary_array_get_value(GArrowFixedSizeBinaryArray *array, gint
auto arrow_binary_array =
std::static_pointer_cast<arrow::FixedSizeBinaryArray>(arrow_array);
auto value = arrow_binary_array->GetValue(i);
return g_bytes_new_static(value, arrow_binary_array->byte_width());
return g_bytes_new_with_free_func(value,
arrow_binary_array->byte_width(),
g_object_unref,
g_object_ref(array));
}

/**
Expand All @@ -3635,8 +3647,11 @@ garrow_fixed_size_binary_array_get_values_bytes(GArrowFixedSizeBinaryArray *arra
auto arrow_binary_array =
std::static_pointer_cast<arrow::FixedSizeBinaryArray>(arrow_array);
auto value = arrow_binary_array->raw_values();
return g_bytes_new_static(value,
arrow_binary_array->byte_width() * arrow_array->length());
return g_bytes_new_with_free_func(value,
arrow_binary_array->byte_width() *
arrow_array->length(),
g_object_unref,
g_object_ref(array));
}

G_DEFINE_TYPE(GArrowDecimal32Array,
Expand Down
19 changes: 13 additions & 6 deletions c_glib/arrow-glib/buffer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -281,8 +281,9 @@ garrow_buffer_get_capacity(GArrowBuffer *buffer)
* garrow_buffer_get_data:
* @buffer: A #GArrowBuffer.
*
* Returns: (transfer full): The data of the buffer. The data is owned by
* the buffer. You should not free or modify the data.
* Returns: (transfer full): The data of the buffer. The data isn't
* copied. The returned #GBytes keeps the data alive. You should not
* modify the data.
*
* Since: 0.3.0
*/
Expand All @@ -296,7 +297,10 @@ garrow_buffer_get_data(GArrowBuffer *buffer)
}

auto arrow_buffer = garrow_buffer_get_raw(buffer);
auto data = g_bytes_new_static(arrow_buffer->data(), arrow_buffer->size());
auto data = g_bytes_new_with_free_func(arrow_buffer->data(),
arrow_buffer->size(),
g_object_unref,
g_object_ref(buffer));
return data;
}

Expand All @@ -305,8 +309,8 @@ garrow_buffer_get_data(GArrowBuffer *buffer)
* @buffer: A #GArrowBuffer.
*
* Returns: (transfer full) (nullable): The data of the buffer. If the
* buffer is immutable, it returns %NULL. The data is owned by the
* buffer. You should not free the data.
* buffer is immutable, it returns %NULL. The data isn't copied. The
* returned #GBytes keeps the data alive.
*
* Since: 0.3.0
*/
Expand All @@ -324,7 +328,10 @@ garrow_buffer_get_mutable_data(GArrowBuffer *buffer)
return priv->data;
}

return g_bytes_new_static(arrow_buffer->mutable_data(), arrow_buffer->size());
return g_bytes_new_with_free_func(arrow_buffer->mutable_data(),
arrow_buffer->size(),
g_object_unref,
g_object_ref(buffer));
}

/**
Expand Down
2 changes: 1 addition & 1 deletion c_glib/parquet-glib/metadata.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -217,7 +217,7 @@ gparquet_column_chunk_metadata_get_statistics(GParquetColumnChunkMetadata *metad
auto parquet_metadata = gparquet_column_chunk_metadata_get_raw(metadata);
auto parquet_statistics = parquet_metadata->statistics();
if (parquet_statistics) {
return gparquet_statistics_new_raw(&parquet_statistics);
return gparquet_statistics_new_raw(&parquet_statistics, metadata);
} else {
return NULL;
}
Expand Down
Loading
Loading