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 989b5550 fix(parquet/metadata): use default writer properties when 
props is nil (#1058)
989b5550 is described below

commit 989b5550baa70da3b425f8c70e4f0877f84de36d
Author: Minh Vu <[email protected]>
AuthorDate: Wed Aug 5 19:35:25 2026 +0200

    fix(parquet/metadata): use default writer properties when props is nil 
(#1058)
    
    ### Rationale for this change
    
    `NewFileMetadataBuilder` documents that nil writer properties select the
    defaults, but dereferenced `props` while checking encryption settings
    and panicked.
    
    ### What changes are included in this PR?
    
    Initialize standard writer properties when `props` is nil, before
    reading encryption configuration.
    
    ### Are these changes tested?
    
    Yes. A regression test exercises the documented nil call with a valid
    schema.
    
    `go test ./parquet/metadata -run
    TestNewFileMetadataBuilderUsesDefaultProperties`
    
    ### Are there any user-facing changes?
    
    Passing nil writer properties now behaves as documented.
---
 parquet/metadata/file.go          |  3 +++
 parquet/metadata/metadata_test.go | 13 +++++++++++++
 2 files changed, 16 insertions(+)

diff --git a/parquet/metadata/file.go b/parquet/metadata/file.go
index f9035db2..95a00571 100644
--- a/parquet/metadata/file.go
+++ b/parquet/metadata/file.go
@@ -54,6 +54,9 @@ type FileMetaDataBuilder struct {
 // NewFileMetadataBuilder will use the default writer properties if nil is 
passed for
 // the writer properties and nil is allowable for the key value metadata.
 func NewFileMetadataBuilder(schema *schema.Schema, props 
*parquet.WriterProperties, kvmeta KeyValueMetadata) *FileMetaDataBuilder {
+       if props == nil {
+               props = parquet.NewWriterProperties()
+       }
        var crypto *format.FileCryptoMetaData
        if props.FileEncryptionProperties() != nil && 
props.FileEncryptionProperties().EncryptedFooter() {
                crypto = format.NewFileCryptoMetaData()
diff --git a/parquet/metadata/metadata_test.go 
b/parquet/metadata/metadata_test.go
index 9c043911..39034fb2 100644
--- a/parquet/metadata/metadata_test.go
+++ b/parquet/metadata/metadata_test.go
@@ -31,6 +31,19 @@ import (
        "github.com/stretchr/testify/require"
 )
 
+func TestNewFileMetadataBuilderUsesDefaultProperties(t *testing.T) {
+       root, err := schema.NewGroupNode("schema", 
parquet.Repetitions.Required, schema.FieldList{
+               schema.NewInt32Node("value", parquet.Repetitions.Required, -1),
+       }, -1)
+       require.NoError(t, err)
+
+       builder := metadata.NewFileMetadataBuilder(schema.NewSchema(root), nil, 
nil)
+       fileMeta, err := builder.Finish()
+       require.NoError(t, err)
+       assert.EqualValues(t, parquet.V2_LATEST, fileMeta.Version())
+       assert.Equal(t, parquet.DefaultCreatedBy, fileMeta.GetCreatedBy())
+}
+
 func generateTableMetaData(schema *schema.Schema, props 
*parquet.WriterProperties, nrows int, statsInt, statsFloat 
metadata.EncodedStatistics) (*metadata.FileMetaData, error) {
        fbuilder := metadata.NewFileMetadataBuilder(schema, props, nil)
        rg1Builder := fbuilder.AppendRowGroup()

Reply via email to