This is an automated email from the ASF dual-hosted git repository.
zeroshade pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-go.git
The following commit(s) were added to refs/heads/main by this push:
new 1885c623 fix(parquet): report initialized row-group columns correctly
(#1072)
1885c623 is described below
commit 1885c623009f313499f1f3f23141fd4959642255
Author: Minh Vu <[email protected]>
AuthorDate: Wed Aug 5 20:33:43 2026 +0200
fix(parquet): report initialized row-group columns correctly (#1072)
## Problem
`RowGroupMetaDataBuilder.nextCol` already represents the number of
initialized columns. The incomplete-row-group error subtracted one from
it, reporting `-1` before any column was initialized and remaining off
by one afterward.
## Change
Report `nextCol` directly in the diagnostic. This changes only the error
count; row-group construction behavior is unchanged.
## Coverage
The regression test checks the messages with zero and one initialized
columns in a two-column schema.
## Validation
`go test ./parquet/metadata`
---
parquet/file/file_writer_test.go | 4 ++--
parquet/metadata/metadata_test.go | 17 +++++++++++++++++
parquet/metadata/row_group.go | 2 +-
3 files changed, 20 insertions(+), 3 deletions(-)
diff --git a/parquet/file/file_writer_test.go b/parquet/file/file_writer_test.go
index 6265a32a..9e1abd08 100644
--- a/parquet/file/file_writer_test.go
+++ b/parquet/file/file_writer_test.go
@@ -1474,8 +1474,8 @@ func TestRowGroupClosePropagatesMetadataFinishError(t
*testing.T) {
rgw, err := writer.AppendRowGroupChecked()
require.NoError(t, err)
- require.ErrorContains(t, rgw.Close(), "only -1 out of 1 columns are
initialized")
- require.ErrorContains(t, writer.Close(), "only -1 out of 1 columns are
initialized")
+ require.ErrorContains(t, rgw.Close(), "only 0 out of 1 columns are
initialized")
+ require.ErrorContains(t, writer.Close(), "only 0 out of 1 columns are
initialized")
}
func TestFlushWithFooterKeepsPageIndexBuilderAppendable(t *testing.T) {
diff --git a/parquet/metadata/metadata_test.go
b/parquet/metadata/metadata_test.go
index 39034fb2..96b11819 100644
--- a/parquet/metadata/metadata_test.go
+++ b/parquet/metadata/metadata_test.go
@@ -88,6 +88,23 @@ func assertStatsSet(t *testing.T, m
*metadata.ColumnChunkMetaData) {
assert.True(t, ok)
}
+func TestRowGroupFinishReportsInitializedColumnCount(t *testing.T) {
+ fields := schema.FieldList{
+ schema.NewInt32Node("first", parquet.Repetitions.Required, -1),
+ schema.NewInt32Node("second", parquet.Repetitions.Required, -1),
+ }
+ root, err := schema.NewGroupNode("schema",
parquet.Repetitions.Required, fields, -1)
+ require.NoError(t, err)
+ builder := metadata.NewFileMetadataBuilder(schema.NewSchema(root),
parquet.NewWriterProperties(), nil)
+ rowGroup := builder.AppendRowGroup()
+
+ err = rowGroup.Finish(0, 0)
+ require.EqualError(t, err, "parquet: only 0 out of 2 columns are
initialized")
+ rowGroup.NextColumnChunk()
+ err = rowGroup.Finish(0, 0)
+ require.EqualError(t, err, "parquet: only 1 out of 2 columns are
initialized")
+}
+
func assertStats(t *testing.T, m *metadata.ColumnChunkMetaData)
metadata.TypedStatistics {
s, err := m.Statistics()
assert.NoError(t, err)
diff --git a/parquet/metadata/row_group.go b/parquet/metadata/row_group.go
index c8d19a01..b578e343 100644
--- a/parquet/metadata/row_group.go
+++ b/parquet/metadata/row_group.go
@@ -187,7 +187,7 @@ func (r *RowGroupMetaDataBuilder) NextColumnChunk()
*ColumnChunkMetaDataBuilder
// being written. e.g. first row group should be 0, second is 1, and so on...
func (r *RowGroupMetaDataBuilder) Finish(_ int64, ordinal int16) error {
if r.nextCol != r.NumColumns() {
- return fmt.Errorf("parquet: only %d out of %d columns are
initialized", r.nextCol-1, r.schema.NumColumns())
+ return fmt.Errorf("parquet: only %d out of %d columns are
initialized", r.nextCol, r.schema.NumColumns())
}
var (