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 4acb3d15 fix(parquet/variant): fix basic stringify (#624)
4acb3d15 is described below

commit 4acb3d154cd5cccfa0e464d0815165ac449fbdcc
Author: Matt Topol <[email protected]>
AuthorDate: Tue Jan 6 20:44:08 2026 -0500

    fix(parquet/variant): fix basic stringify (#624)
    
    ### Rationale for this change
    fixes #623
    
    ### What changes are included in this PR?
    checking for the `isLarge` bit upon calling `Value()` for a BasicArray
    was incorrect, forgetting to shift appropriately.
    
    ### Are these changes tested?
    Yes, a unit test is added to check for this
    
    ### Are there any user-facing changes?
    only fixing the assert.
---
 parquet/variant/variant.go      |  2 +-
 parquet/variant/variant_test.go | 25 +++++++++++++++++++++++++
 2 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/parquet/variant/variant.go b/parquet/variant/variant.go
index 254bc3c3..00925564 100644
--- a/parquet/variant/variant.go
+++ b/parquet/variant/variant.go
@@ -685,7 +685,7 @@ func (v Value) Value() any {
        case BasicArray:
                valueHdr := (v.value[0] >> basicTypeBits)
                fieldOffsetSz := (valueHdr & 0b11) + 1
-               isLarge := (valueHdr & 0b1) == 1
+               isLarge := ((valueHdr >> 2) & 0b1) == 1
 
                var (
                        sz                     int
diff --git a/parquet/variant/variant_test.go b/parquet/variant/variant_test.go
index c623f646..0a2d3154 100644
--- a/parquet/variant/variant_test.go
+++ b/parquet/variant/variant_test.go
@@ -783,3 +783,28 @@ func TestValueCloneConsistency(t *testing.T) {
        assert.Equal(t, variant.String, cloned.Type())
        assert.Equal(t, "test", cloned.Value())
 }
+
+// test fix from github.com/apache/arrow-go/issues/623
+func TestVariantJSONRoundTrip(t *testing.T) {
+       jsonBytes := []byte(`{
+  "object_array": [
+    {
+      "a_field_name_1": "some value 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+      "a_field_name_2": "some value 
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA",
+      "a_field_name_3": "some value",
+      "a_field_name_4": "some value",
+      "a_field_name_5": "some value",
+      "a_field_name_6": "some value",
+      "a_field_name_7": "some value",
+      "a_field_name_8": "some value",
+      "a_field_name_9": "some value",
+      "a_field_name_10": "some value"
+    }
+  ]
+}`)
+       variantFromJSON, err := variant.ParseJSONBytes(jsonBytes, false)
+       if err != nil {
+               panic(err)
+       }
+       assert.JSONEq(t, string(jsonBytes), variantFromJSON.String())
+}

Reply via email to