diff --git a/c_glib/parquet-glib/arrow-file-reader.cpp b/c_glib/parquet-glib/arrow-file-reader.cpp index 692fd0ca0a6..ddbfde1b4c0 100644 --- a/c_glib/parquet-glib/arrow-file-reader.cpp +++ b/c_glib/parquet-glib/arrow-file-reader.cpp @@ -181,6 +181,24 @@ gparquet_arrow_file_reader_new_path(const gchar *path, GError **error) } } +/** + * gparquet_arrow_file_reader_close: + * @reader: A #GParquetArrowFileReader. + * + * Close the reader. + * + * Since: 23.0.0 + */ +void +gparquet_arrow_file_reader_close(GParquetArrowFileReader *reader) +{ + auto parquet_arrow_file_reader = gparquet_arrow_file_reader_get_raw(reader); + auto parquet_reader = parquet_arrow_file_reader->parquet_reader(); + if (parquet_reader) { + parquet_reader->Close(); + } +} + /** * gparquet_arrow_file_reader_read_table: * @reader: A #GParquetArrowFileReader. diff --git a/c_glib/parquet-glib/arrow-file-reader.h b/c_glib/parquet-glib/arrow-file-reader.h index 52d7293bad0..04df24b87d3 100644 --- a/c_glib/parquet-glib/arrow-file-reader.h +++ b/c_glib/parquet-glib/arrow-file-reader.h @@ -43,6 +43,10 @@ GPARQUET_AVAILABLE_IN_0_11 GParquetArrowFileReader * gparquet_arrow_file_reader_new_path(const gchar *path, GError **error); +GPARQUET_AVAILABLE_IN_23_0 +void +gparquet_arrow_file_reader_close(GParquetArrowFileReader *reader); + GPARQUET_AVAILABLE_IN_0_11 GArrowTable * gparquet_arrow_file_reader_read_table(GParquetArrowFileReader *reader, GError **error); diff --git a/ruby/red-arrow/test/test-feather.rb b/ruby/red-arrow/test/test-feather.rb index 21d8a2c318d..a182c7a5d24 100644 --- a/ruby/red-arrow/test/test-feather.rb +++ b/ruby/red-arrow/test/test-feather.rb @@ -29,6 +29,7 @@ def setup begin yield(@output) ensure + GC.start # Ensure freeing Arrow::Table that refers @output.path. @output.close! end end diff --git a/ruby/red-arrow/test/test-record-batch-stream-reader.rb b/ruby/red-arrow/test/test-record-batch-stream-reader.rb index 6db2dd49256..3222734ac9f 100644 --- a/ruby/red-arrow/test/test-record-batch-stream-reader.rb +++ b/ruby/red-arrow/test/test-record-batch-stream-reader.rb @@ -16,6 +16,10 @@ # under the License. class RecordBatchStreamReaderTest < Test::Unit::TestCase + def teardown + GC.start # Ensure freeing Arrow::RecordBatch that refers tempfile.path. + end + test("write/read") do fields = [ Arrow::Field.new("uint8", :uint8), diff --git a/ruby/red-arrow/test/test-table.rb b/ruby/red-arrow/test/test-table.rb index 2117e60df9c..45b178f3181 100644 --- a/ruby/red-arrow/test/test-table.rb +++ b/ruby/red-arrow/test/test-table.rb @@ -747,6 +747,10 @@ def create_output(extension) @file.path end + def teardown + GC.start # Ensure freeing Arrow::Table that refers @file.path. + end + sub_test_case("save: auto detect") do test("arrow") do output = create_output(".arrow") diff --git a/ruby/red-parquet/lib/parquet/arrow-file-reader.rb b/ruby/red-parquet/lib/parquet/arrow-file-reader.rb index 6923c21987b..aa533eecdd1 100644 --- a/ruby/red-parquet/lib/parquet/arrow-file-reader.rb +++ b/ruby/red-parquet/lib/parquet/arrow-file-reader.rb @@ -17,6 +17,8 @@ module Parquet class ArrowFileReader + include Arrow::BlockClosable + def each_row_group return to_enum(__method__) {n_row_groups} unless block_given? diff --git a/ruby/red-parquet/lib/parquet/arrow-file-writer.rb b/ruby/red-parquet/lib/parquet/arrow-file-writer.rb index 137dc518e3f..5677577f227 100644 --- a/ruby/red-parquet/lib/parquet/arrow-file-writer.rb +++ b/ruby/red-parquet/lib/parquet/arrow-file-writer.rb @@ -17,6 +17,8 @@ module Parquet class ArrowFileWriter + include Arrow::BlockClosable + # Write data to Apache Parquet. # # @return [void] diff --git a/ruby/red-parquet/test/test-arrow-table.rb b/ruby/red-parquet/test/test-arrow-table.rb index 1ea2669e316..240c4ff1387 100644 --- a/ruby/red-parquet/test/test-arrow-table.rb +++ b/ruby/red-parquet/test/test-arrow-table.rb @@ -50,6 +50,7 @@ def setup begin yield(@output) ensure + GC.start # Ensure freeing Arrow::Table that refers @output.path. @output.close! end end diff --git a/ruby/red-parquet/test/test-boolean-statistics.rb b/ruby/red-parquet/test/test-boolean-statistics.rb index 013500484b1..788995ba027 100644 --- a/ruby/red-parquet/test/test-boolean-statistics.rb +++ b/ruby/red-parquet/test/test-boolean-statistics.rb @@ -17,15 +17,22 @@ class TestBooleanStatistics < Test::Unit::TestCase def setup - file = Tempfile.open(["data", ".parquet"]) - array = Arrow::BooleanArray.new([nil, false, true]) - table = Arrow::Table.new("boolean" => array) - writer = Parquet::ArrowFileWriter.new(table.schema, file.path) - chunk_size = 1024 - writer.write_table(table, chunk_size) - writer.close - reader = Parquet::ArrowFileReader.new(file.path) - @statistics = reader.metadata.get_row_group(0).get_column_chunk(0).statistics + Tempfile.create(["data", ".parquet"]) do |file| + array = Arrow::BooleanArray.new([nil, false, true]) + table = Arrow::Table.new("boolean" => array) + Parquet::ArrowFileWriter.open(table.schema, file.path) do |writer| + chunk_size = 1024 + writer.write_table(table, chunk_size) + writer.close + end + Parquet::ArrowFileReader.open(file.path) do |reader| + @statistics = + reader.metadata.get_row_group(0).get_column_chunk(0).statistics + yield + @statistics = nil + end + GC.start # Ensure freeing @statistics that refers file.path. + end end def test_min