Repository: incubator-drill Updated Branches: refs/heads/master 30ce7d710 -> 721e7c257
DRILL-446 Fix Json Array parsing Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/721e7c25 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/721e7c25 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/721e7c25 Branch: refs/heads/master Commit: 721e7c25759eda2f12b17e15e4ca32ab16ec1e1c Parents: 30ce7d7 Author: Bhallamudi Venkata Siva Kamesh <[email protected]> Authored: Tue Mar 25 11:04:07 2014 -0700 Committer: Timothy Chen <[email protected]> Committed: Tue Mar 25 11:04:15 2014 -0700 ---------------------------------------------------------------------- .../exec/store/easy/json/JSONRecordReader.java | 4 ++- .../exec/store/json/JSONRecordReaderTest.java | 29 ++++++++++++++++++++ .../src/test/resources/scan_json_test_7.json | 10 +++++++ 3 files changed, 42 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/721e7c25/exec/java-exec/src/main/java/org/apache/drill/exec/store/easy/json/JSONRecordReader.java ---------------------------------------------------------------------- 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 80f8678..66c5ccf 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(); http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/721e7c25/exec/java-exec/src/test/java/org/apache/drill/exec/store/json/JSONRecordReaderTest.java ---------------------------------------------------------------------- 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 bfeb892..e812997 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()); + } } http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/721e7c25/exec/java-exec/src/test/resources/scan_json_test_7.json ---------------------------------------------------------------------- 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 0000000..628aa50 --- /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
