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())
+}