diff options
author | Bhallamudi Venkata Siva Kamesh <kamesh.hadoop@gmail.com> | 2014-03-25 11:04:07 -0700 |
---|---|---|
committer | Timothy Chen <tnachen@apache.org> | 2014-03-25 11:04:15 -0700 |
commit | 721e7c25759eda2f12b17e15e4ca32ab16ec1e1c (patch) | |
tree | bd821bfcc32576637852bdba67d9cefe2cfe0a24 /exec/java-exec/src | |
parent | 30ce7d710a1bb876a272fd454ff286b5909ff717 (diff) |
DRILL-446 Fix Json Array parsing
Diffstat (limited to 'exec/java-exec/src')
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 |