Skip to content

Commit 4d46c8b

Browse files
committed
Fix logical error with offsets array in JsonFileWriter. Add broken string test case to simple.json
Change-Id: If62adb8cc209868e105f07f276c54140fe366df5
1 parent 36ab5d6 commit 4d46c8b

File tree

3 files changed

+27
-3
lines changed

3 files changed

+27
-3
lines changed

integration/data/simple.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@
2222
{"type": "DATA", "typeBitWidth": 64}
2323
]
2424
}
25+
},
26+
{
27+
"name": "baz",
28+
"type": {"name": "utf8"},
29+
"nullable": true, "children": [],
30+
"typeLayout": {
31+
"vectors": [
32+
{"type": "VALIDITY", "typeBitWidth": 1},
33+
{"type": "OFFSET", "typeBitWidth": 32},
34+
{"type": "DATA", "typeBitWidth": 64}
35+
]
36+
}
2537
}
2638
]
2739
},
@@ -40,6 +52,13 @@
4052
"count": 5,
4153
"VALIDITY": [1, 0, 0, 1, 1],
4254
"DATA": [1.0, 2.0, 3.0, 4.0, 5.0]
55+
},
56+
{
57+
"name": "baz",
58+
"count": 5,
59+
"VALIDITY": [1, 0, 0, 1, 1],
60+
"OFFSET": [0, 2, 2, 2, 5, 9],
61+
"DATA": ["aa", "", "", "bbb", "cccc"]
4362
}
4463
]
4564
}

java/vector/src/main/java/org/apache/arrow/vector/file/json/JsonFileReader.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,13 @@ private void readVector(Field field, FieldVector vector) throws JsonParseExcepti
127127
ValueVector valueVector = (ValueVector)innerVector;
128128
valueVector.allocateNew();
129129
Mutator mutator = valueVector.getMutator();
130-
mutator.setValueCount(count);
131-
for (int i = 0; i < count; i++) {
130+
131+
int innerVectorCount = count;
132+
if (vectorType.getName() == "OFFSET") {
133+
innerVectorCount++;
134+
}
135+
mutator.setValueCount(innerVectorCount);
136+
for (int i = 0; i < innerVectorCount; i++) {
132137
parser.nextToken();
133138
setValueFromParser(valueVector, i);
134139
}

java/vector/src/main/java/org/apache/arrow/vector/file/json/JsonFileWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -114,7 +114,7 @@ private void writeVector(Field field, FieldVector vector) throws IOException {
114114
BufferBacked innerVector = fieldInnerVectors.get(v);
115115
generator.writeArrayFieldStart(vectorType.getName());
116116
ValueVector valueVector = (ValueVector)innerVector;
117-
for (int i = 0; i < valueCount; i++) {
117+
for (int i = 0; i < valueVector.getAccessor().getValueCount(); i++) {
118118
writeValueToGenerator(valueVector, i);
119119
}
120120
generator.writeEndArray();

0 commit comments

Comments
 (0)