diff options
Diffstat (limited to 'exec')
3 files changed, 42 insertions, 1 deletions
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/JSONRecordReader.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/JSONRecordReader.java index 80f867857..66c5ccf50 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/JSONRecordReader.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/JSONRecordReader.java @@ -301,7 +301,9 @@ public class JSONRecordReader implements RecordReader { rowIndex, colIndex, groupCount); - + if(readType == ReadType.ARRAY) { + groupCount--; + } isFull = isFull || currentFieldFull; } token = parser.nextToken(); diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/store/json/JSONRecordReaderTest.java b/exec/java-exec/src/test/java/org/apache/drill/exec/store/json/JSONRecordReaderTest.java index bfeb8929b..e812997b6 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/store/json/JSONRecordReaderTest.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/store/json/JSONRecordReaderTest.java @@ -387,4 +387,33 @@ public class JSONRecordReaderTest { assertEquals(0, jr.next()); assertTrue(mutator.getRemovedFields().isEmpty()); } + + @Test + public void testJsonArrayandNormalFields(@Injectable final FragmentContext context) throws ExecutionSetupException, IOException { + new Expectations() { + { + context.getAllocator(); + returns(new TopLevelAllocator()); + } + }; + + JSONRecordReader jr = new JSONRecordReader(context, + FileUtils.getResourceAsFile("/scan_json_test_7.json").toURI().toString(), + FileSystem.getLocal(new Configuration()), null, null); + + MockOutputMutator mutator = new MockOutputMutator(); + List<ValueVector> addFields = mutator.getAddFields(); + jr.setup(mutator); + assertEquals(2, jr.next()); + assertEquals(3, addFields.size()); + + assertField(addFields.get(0), 0, MinorType.VARCHAR, "ABC", "test"); + assertField(addFields.get(2), 0, MinorType.VARCHAR, "drill", "a"); + assertField(addFields.get(0), 1, MinorType.VARCHAR, "abc", "test"); + assertField(addFields.get(2), 1, MinorType.VARCHAR, "apache", "a"); + + + assertEquals(0, jr.next()); + assertTrue(mutator.getRemovedFields().isEmpty()); + } } diff --git a/exec/java-exec/src/test/resources/scan_json_test_7.json b/exec/java-exec/src/test/resources/scan_json_test_7.json new file mode 100644 index 000000000..628aa50a2 --- /dev/null +++ b/exec/java-exec/src/test/resources/scan_json_test_7.json @@ -0,0 +1,10 @@ +{ + "test": "ABC", + "test2": [1,2,3], + "a": "drill" +} +{ + "test": "abc", + "test2": [1,2,3,4], + "a": "apache" +}
\ No newline at end of file |