From 50c5197fb02eaef7f7c45ca34fde569346a12392 Mon Sep 17 00:00:00 2001 From: Parth Chandra Date: Mon, 27 Apr 2015 13:48:17 -0700 Subject: [PATCH] DRILL-2872: Result from json file returns data from repeated type fields as "null" --- .../main/codegen/templates/HolderReaderImpl.java | 6 +++++- .../complex/writer/TestComplexTypeReader.java | 13 +++++++++++++ .../src/test/resources/DRILL-2872-result.json | 10 ++++++++++ .../src/test/resources/complex_student.json | 11 +++++++++++ 4 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 exec/java-exec/src/test/resources/DRILL-2872-result.json create mode 100644 exec/java-exec/src/test/resources/complex_student.json diff --git a/exec/java-exec/src/main/codegen/templates/HolderReaderImpl.java b/exec/java-exec/src/main/codegen/templates/HolderReaderImpl.java index 7d4ff318cde..3bf94036c4e 100644 --- a/exec/java-exec/src/main/codegen/templates/HolderReaderImpl.java +++ b/exec/java-exec/src/main/codegen/templates/HolderReaderImpl.java @@ -45,6 +45,8 @@ import org.apache.hadoop.io.Text; import org.joda.time.Period; +// Source code generated using FreeMarker template ${.template_name} + @SuppressWarnings("unused") public class ${holderMode}${name}HolderReaderImpl extends AbstractFieldReader { @@ -104,7 +106,9 @@ public MajorType getType() { @Override public boolean isSet() { - <#if nullMode == "Nullable"> + <#if holderMode == "Repeated"> + return this.repeatedHolder.end!=this.repeatedHolder.start; + <#elseif nullMode == "Nullable"> return this.holder.isSet == 1; <#else> return true; diff --git a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java index 933352340b8..894236ecd60 100644 --- a/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java +++ b/exec/java-exec/src/test/java/org/apache/drill/exec/vector/complex/writer/TestComplexTypeReader.java @@ -221,4 +221,17 @@ public void testComplexAndSimpleColumnSelection() throws Exception { public void testNestedFlatten() throws Exception { test("select flatten(rl) from cp.`jsoninput/input2.json`"); } + + @Test //DRILL-2872. + public void testRepeatedJson() throws Exception { + + final String query="select cast(convert_to(interests, 'JSON') as varchar(0)) as interests from dfs.`/Users/pchandra/work/data/test/complex_student.json`"; + + testBuilder() + .sqlQuery(query) + .unOrdered() + .jsonBaselineFile("drill-2872-result.json") + .go(); + } + } diff --git a/exec/java-exec/src/test/resources/DRILL-2872-result.json b/exec/java-exec/src/test/resources/DRILL-2872-result.json new file mode 100644 index 00000000000..c8667f3f5d6 --- /dev/null +++ b/exec/java-exec/src/test/resources/DRILL-2872-result.json @@ -0,0 +1,10 @@ +{ "interests" : "[ \"Reading\", \"Mountain Biking\", \"Hacking\" ]" } +{ "interests" : "[ \"Soccer\", \"Mountain Biking\", \"C#\" ]" } +{ "interests" : "[ \"Tennis\", \"Mountain Biking\", \"Painting\" ]" } +{ "interests" : "[ \"Hockey\", \"Mountain Biking\", \"Singing\" ]" } +{ "interests" : "[ \"Swimming\", \"Mountain Biking\", \"Sking\" ]" } +{ "interests" : "[ \"Badminton\", \"Hiking\", \"Hacking\" ]" } +{ "interests" : "[ \"Cricket\", \"Mountain Biking\", \"Cooking\" ]" } +{ "interests" : "[ \"Table Tennis\", \"Running\", \"Hacking\" ]" } +{ "interests" : "[ \"Surfing\", \"Mountain Biking\", \"Music\" ]" } +{ "interests" : "[ \"Fencing\", \"Mountain Biking\", \"Writing\" ]" } diff --git a/exec/java-exec/src/test/resources/complex_student.json b/exec/java-exec/src/test/resources/complex_student.json new file mode 100644 index 00000000000..6695b3e6041 --- /dev/null +++ b/exec/java-exec/src/test/resources/complex_student.json @@ -0,0 +1,11 @@ +{"rownum":1,"name":"fred ovid","age":76,"gpa":1.55,"studentnum":692315658449,"create_time":"2014-05-27 00:26:07", "interests": [ "Reading", "Mountain Biking", "Hacking" ], "favorites": {"color": "Blue", "sport": "Soccer", "food": "Spaghetti"}} +{"rownum":2,"name":"bob brown","age":63,"gpa":3.18,"studentnum":650706039334,"create_time":"2014-12-04 21:43:14", "interests": [ "Soccer", "Mountain Biking", "C#" ], "favorites": {"color": "Green", "sport": "Soccer", "food": "Pizza"}} +{"rownum":3,"name":"bob hernandez","age":28,"gpa":1.09,"studentnum":293612255322,"create_time":"2014-05-31 14:33:06", "interests": [ "Tennis", "Mountain Biking", "Painting" ], "favorites": {"color": "Red", "sport": "Tennis", "food": "Hamburger"}} +{"rownum":4,"name":"ulysses xylophone","age":31,"gpa":1.67,"studentnum":896547822355,"create_time":"2014-06-12 11:27:33", "interests": [ "Hockey", "Mountain Biking", "Singing" ], "favorites": {"color": "Yellow", "sport": "Hockey", "food": "Pizza"}} +{"rownum":5,"name":"rachel robinson","age":57,"gpa":1.3,"studentnum":831836166719,"create_time":"2014-09-01 06:45:57", "interests": [ "Swimming", "Mountain Biking", "Sking" ], "favorites": {"color": "Orange", "sport": "Swimming", "food": "Salad"}} +{"rownum":6,"name":"nick johnson","age":43,"gpa":2.1,"studentnum":56304458907,"create_time":"2014-11-20 11:44:00", "interests": [ "Badminton", "Hiking", "Hacking" ], "favorites": {"color": "Black", "sport": "Badminton", "food": "Spaghetti"}} +{"rownum":7,"name":"luke white","age":67,"gpa":3.61,"studentnum":6279517684,"create_time":"2014-05-06 18:28:28", "interests": [ "Cricket", "Mountain Biking", "Cooking" ], "favorites": {"color": "Whit", "sport": "Cricket", "food": "Taco"}} +{"rownum":8,"name":"bob thompson","age":44,"gpa":2.87,"studentnum":61486584730,"create_time":"2014-03-08 06:30:19", "interests": [ "Table Tennis", "Running", "Hacking" ], "favorites": {"color": "Blue", "sport": "Table Tennis", "food": "Spaghetti"}} +{"rownum":9,"name":"ethan steinbeck","age":60,"gpa":1.54,"studentnum":833352929798,"create_time":"2014-08-17 09:00:46", "interests": [ "Surfing", "Mountain Biking", "Music" ], "favorites": {"color": "Green", "sport": "Surfing", "food": "Sandwiches"}} +{"rownum":10,"name":"victor nixon","age":32,"gpa":1.04,"studentnum":487845891564,"create_time":"2014-03-24 21:57:33", "interests": [ "Fencing", "Mountain Biking", "Writing" ], "favorites": {"color": "Blue", "sport": "Fencing", "food": "Spaghetti"}} +