This is an automated email from the ASF dual-hosted git repository.

cwylie pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/druid.git


The following commit(s) were added to refs/heads/master by this push:
     new 42f2496b7d1 fix bug with nested empty array fields (#15532)
42f2496b7d1 is described below

commit 42f2496b7d1828b56324fd58ff03fd47b3a39e23
Author: Clint Wylie <[email protected]>
AuthorDate: Sat Dec 9 12:20:21 2023 -0800

    fix bug with nested empty array fields (#15532)
---
 .../apache/druid/segment/nested/FieldTypeInfo.java | 16 +++-
 .../druid/query/scan/NestedDataScanQueryTest.java  |  4 +-
 .../test/resources/nested-all-types-test-data.json | 14 ++--
 .../sql/calcite/CalciteNestedDataQueryTest.java    | 94 +++++++++++++++++-----
 4 files changed, 100 insertions(+), 28 deletions(-)

diff --git 
a/processing/src/main/java/org/apache/druid/segment/nested/FieldTypeInfo.java 
b/processing/src/main/java/org/apache/druid/segment/nested/FieldTypeInfo.java
index b832e3d7350..b00af7a132f 100644
--- 
a/processing/src/main/java/org/apache/druid/segment/nested/FieldTypeInfo.java
+++ 
b/processing/src/main/java/org/apache/druid/segment/nested/FieldTypeInfo.java
@@ -250,7 +250,21 @@ public class FieldTypeInfo
 
     public void write(MutableTypeSet types) throws IOException
     {
-      valuesOut.write(types.getByteValue());
+      byte typeByte = types.getByteValue();
+      // adjust for empty array if needed
+      if (types.hasUntypedArray()) {
+        Set<ColumnType> columnTypes = 
FieldTypeInfo.convertToSet(types.getByteValue());
+        ColumnType leastRestrictive = null;
+        for (ColumnType type : columnTypes) {
+          leastRestrictive = ColumnType.leastRestrictiveType(leastRestrictive, 
type);
+        }
+        if (leastRestrictive == null) {
+          typeByte = add(typeByte, ColumnType.LONG_ARRAY);
+        } else if (!leastRestrictive.isArray()) {
+          typeByte = add(typeByte, ColumnType.ofArray(leastRestrictive));
+        }
+      }
+      valuesOut.write(typeByte);
       numWritten++;
     }
 
diff --git 
a/processing/src/test/java/org/apache/druid/query/scan/NestedDataScanQueryTest.java
 
b/processing/src/test/java/org/apache/druid/query/scan/NestedDataScanQueryTest.java
index fcf6720311f..8435ea42f5f 100644
--- 
a/processing/src/test/java/org/apache/druid/query/scan/NestedDataScanQueryTest.java
+++ 
b/processing/src/test/java/org/apache/druid/query/scan/NestedDataScanQueryTest.java
@@ -787,12 +787,12 @@ public class NestedDataScanQueryTest extends 
InitializedNullHandlingTest
     Assert.assertEquals(resultsRealtime.size(), resultsSegments.size());
     if (NullHandling.replaceWithDefault()) {
       Assert.assertEquals(
-          "[[1672531200000, null, 0, 0.0, 1, 51, -0.13, 1, [], [51, -35], 
{a=700, b={x=g, y=1.1, z=[9, null, 9, 9]}, v=[]}, {x=400, y=[{l=[null], m=100, 
n=5}, {l=[a, b, c], m=a, n=1}], z={}}, null, [a, b], null, [2, 3], null, 
[null], null, [1, 0, 1], null, [{x=1}, {x=2}], null, hello, 1234, 1.234, {x=1, 
y=hello, z={a=1.1, b=1234, c=[a, b, c]}}, [a, b, c], [1, 2, 3], [1.1, 2.2, 
3.3], [], {}, [null, null], [{}, {}, {}], [{a=b, x=1, y=1.3}], 1], 
[1672531200000, null, 2, 0.0, 0, b, 1.1, b, 2 [...]
+          "[[1672531200000, null, 0, 0.0, 1, 51, -0.13, 1, [], [51, -35], 
{a=700, b={x=g, y=1.1, z=[9, null, 9, 9]}, v=[]}, {x=400, y=[{l=[null], m=100, 
n=5}, {l=[a, b, c], m=a, n=1}], z={}}, null, [a, b], null, [2, 3], null, 
[null], null, [1, 0, 1], null, [{x=1}, {x=2}], null, hello, 1234, 1.234, {x=1, 
y=hello, z={a=1.1, b=1234, c=[a, b, c], d=[]}}, [a, b, c], [1, 2, 3], [1.1, 
2.2, 3.3], [], {}, [null, null], [{}, {}, {}], [{a=b, x=1, y=1.3}], 1], 
[1672531200000, null, 2, 0.0, 0, b, 1.1 [...]
           resultsSegments.get(0).getEvents().toString()
       );
     } else {
       Assert.assertEquals(
-          "[[1672531200000, null, null, null, 1, 51, -0.13, 1, [], [51, -35], 
{a=700, b={x=g, y=1.1, z=[9, null, 9, 9]}, v=[]}, {x=400, y=[{l=[null], m=100, 
n=5}, {l=[a, b, c], m=a, n=1}], z={}}, null, [a, b], null, [2, 3], null, 
[null], null, [1, 0, 1], null, [{x=1}, {x=2}], null, hello, 1234, 1.234, {x=1, 
y=hello, z={a=1.1, b=1234, c=[a, b, c]}}, [a, b, c], [1, 2, 3], [1.1, 2.2, 
3.3], [], {}, [null, null], [{}, {}, {}], [{a=b, x=1, y=1.3}], 1], 
[1672531200000, , 2, null, 0, b, 1.1, b,  [...]
+          "[[1672531200000, null, null, null, 1, 51, -0.13, 1, [], [51, -35], 
{a=700, b={x=g, y=1.1, z=[9, null, 9, 9]}, v=[]}, {x=400, y=[{l=[null], m=100, 
n=5}, {l=[a, b, c], m=a, n=1}], z={}}, null, [a, b], null, [2, 3], null, 
[null], null, [1, 0, 1], null, [{x=1}, {x=2}], null, hello, 1234, 1.234, {x=1, 
y=hello, z={a=1.1, b=1234, c=[a, b, c], d=[]}}, [a, b, c], [1, 2, 3], [1.1, 
2.2, 3.3], [], {}, [null, null], [{}, {}, {}], [{a=b, x=1, y=1.3}], 1], 
[1672531200000, , 2, null, 0, b, 1. [...]
           resultsSegments.get(0).getEvents().toString()
       );
     }
diff --git a/processing/src/test/resources/nested-all-types-test-data.json 
b/processing/src/test/resources/nested-all-types-test-data.json
index b70c8764601..8aa221062c7 100644
--- a/processing/src/test/resources/nested-all-types-test-data.json
+++ b/processing/src/test/resources/nested-all-types-test-data.json
@@ -1,7 +1,7 @@
-{"timestamp": "2023-01-01T00:00:00", "str":"a",    "long":1,     "double":1.0, 
 "bool": true,  "variant": 1,       "variantNumeric": 1,     
"variantEmptyObj":1,   "variantEmtpyArray":1,  "variantWithArrays": 1,         
"obj":{"a": 100, "b": {"x": "a", "y": 1.1, "z": [1, 2, 3, 4]}, "v": []},     
"complexObj":{"x": 1234, "y": [{"l": ["a", "b", "c"], "m": "a", "n": 1},{"l": 
["a", "b", "c"], "m": "a", "n": 1}], "z": {"a": [1.1, 2.2, 3.3], "b": true}},   
  "arrayString": ["a", "b"],       "ar [...]
-{"timestamp": "2023-01-01T00:00:00", "str":"",     "long":2,                   
 "bool": false, "variant": "b",     "variantNumeric": 1.1,   
"variantEmptyObj":"b", "variantEmtpyArray":2,  "variantWithArrays": "b",       
"obj":{"a": 200, "b": {"x": "b", "y": 1.1, "z": [2, 4, 6]}, "v": []},        
"complexObj":{"x": 10,   "y": [{"l": ["b", "b", "c"], "m": "b", "n": 2}, [1, 2, 
3]],                               "z": {"a": [5.5], "b": false}},              
"arrayString": ["a", "b", "c"],  "ar [...]
-{"timestamp": "2023-01-01T00:00:00", "str":"null", "long":3,     "double":2.0, 
                "variant": 3.0,     "variantNumeric": 1.0,   
"variantEmptyObj":3.3, "variantEmtpyArray":3,  "variantWithArrays": 3.0,       
"obj":{"a": 300},                                                            
"complexObj":{"x": 4.4,  "y": [{"l": [], "m": 100, "n": 3},{"l": ["a"]}, {"l": 
["b"], "n": []}],                   "z": {"a": [], "b": true}},                 
 "arrayString": ["b", "c"],       "ar [...]
-{"timestamp": "2023-01-01T00:00:00", "str":"b",    "long":4,     "double":3.3, 
 "bool": true,  "variant": "1",                              
"variantEmptyObj":{},  "variantEmtpyArray":4,  "variantWithArrays": "1",       
"obj":{"a": 400, "b": {"x": "d", "y": 1.1, "z": [3, 4]}, "v": []},           
"complexObj":{"x": 1234,                                                        
                                   "z": {"a": [1.1, 2.2, 3.3], "b": true}},     
"arrayString": ["d", "e"],       "ar [...]
-{"timestamp": "2023-01-01T00:00:00", "str":"c",    "long": null, "double":4.4, 
 "bool": true,  "variant": "hello", "variantNumeric": -1000, 
"variantEmptyObj":{},  "variantEmtpyArray":[], "variantWithArrays": "hello",   
"obj":{"a": 500, "b": {"x": "e", "z": [1, 2, 3, 4]}, "v": "a"},              
"complexObj":{"x": 11,   "y": [],                                               
                                   "z": {"a": [null], "b": false}},             
"arrayString": null,                 [...]
-{"timestamp": "2023-01-01T00:00:00", "str":"d",    "long":5,     "double":5.9, 
 "bool": false,                     "variantNumeric": 3.33,  
"variantEmptyObj":"a", "variantEmtpyArray":6,                                  
"obj":{"a": 600, "b": {"x": "f", "y": 1.1, "z": [6, 7, 8, 9]}, "v": "b"},       
                                                                                
                                                                             
"arrayString": ["a", "b"],       "ar [...]
-{"timestamp": "2023-01-01T00:00:00", "str":null,                 
"double":null, "bool": true,  "variant": 51,      "variantNumeric": -0.13, 
"variantEmptyObj":1,   "variantEmtpyArray":[], "variantWithArrays": [51, -35], 
"obj":{"a": 700, "b": {"x": "g", "y": 1.1, "z": [9, null, 9, 9]}, "v": []},  
"complexObj":{"x": 400,  "y": [{"l": [null], "m": 100, "n": 5},{"l": ["a", "b", 
"c"], "m": "a", "n": 1}],          "z": {}},                                    
                                 "ar [...]
+{"timestamp": "2023-01-01T00:00:00", "str":"a",    "long":1,     "double":1.0, 
 "bool": true,  "variant": 1,       "variantNumeric": 1,     
"variantEmptyObj":1,   "variantEmtpyArray":1,  "variantWithArrays": 1,         
"obj":{"a": 100, "b": {"x": "a", "y": 1.1, "z": [1, 2, 3, 4]}, "v": []},     
"complexObj":{"x": 1234, "y": [{"l": ["a", "b", "c"], "m": "a", "n": 1},{"l": 
["a", "b", "c"], "m": "a", "n": 1}], "z": {"a": [1.1, 2.2, 3.3], "b": true}},   
  "arrayString": ["a", "b"],       "ar [...]
+{"timestamp": "2023-01-01T00:00:00", "str":"",     "long":2,                   
 "bool": false, "variant": "b",     "variantNumeric": 1.1,   
"variantEmptyObj":"b", "variantEmtpyArray":2,  "variantWithArrays": "b",       
"obj":{"a": 200, "b": {"x": "b", "y": 1.1, "z": [2, 4, 6]}, "v": []},        
"complexObj":{"x": 10,   "y": [{"l": ["b", "b", "c"], "m": "b", "n": 2}, [1, 2, 
3]],                               "z": {"a": [5.5], "b": false}},              
"arrayString": ["a", "b", "c"],  "ar [...]
+{"timestamp": "2023-01-01T00:00:00", "str":"null", "long":3,     "double":2.0, 
                "variant": 3.0,     "variantNumeric": 1.0,   
"variantEmptyObj":3.3, "variantEmtpyArray":3,  "variantWithArrays": 3.0,       
"obj":{"a": 300},                                                            
"complexObj":{"x": 4.4,  "y": [{"l": [], "m": 100, "n": 3},{"l": ["a"]}, {"l": 
["b"], "n": []}],                   "z": {"a": [], "b": true}},                 
 "arrayString": ["b", "c"],       "ar [...]
+{"timestamp": "2023-01-01T00:00:00", "str":"b",    "long":4,     "double":3.3, 
 "bool": true,  "variant": "1",                              
"variantEmptyObj":{},  "variantEmtpyArray":4,  "variantWithArrays": "1",       
"obj":{"a": 400, "b": {"x": "d", "y": 1.1, "z": [3, 4]}, "v": []},           
"complexObj":{"x": 1234,                                                        
                                   "z": {"a": [1.1, 2.2, 3.3], "b": true}},     
"arrayString": ["d", "e"],       "ar [...]
+{"timestamp": "2023-01-01T00:00:00", "str":"c",    "long": null, "double":4.4, 
 "bool": true,  "variant": "hello", "variantNumeric": -1000, 
"variantEmptyObj":{},  "variantEmtpyArray":[], "variantWithArrays": "hello",   
"obj":{"a": 500, "b": {"x": "e", "z": [1, 2, 3, 4]}, "v": "a"},              
"complexObj":{"x": 11,   "y": [],                                               
                                   "z": {"a": [null], "b": false}},             
"arrayString": null,                 [...]
+{"timestamp": "2023-01-01T00:00:00", "str":"d",    "long":5,     "double":5.9, 
 "bool": false,                     "variantNumeric": 3.33,  
"variantEmptyObj":"a", "variantEmtpyArray":6,                                  
"obj":{"a": 600, "b": {"x": "f", "y": 1.1, "z": [6, 7, 8, 9]}, "v": "b"},       
                                                                                
                                                                             
"arrayString": ["a", "b"],       "ar [...]
+{"timestamp": "2023-01-01T00:00:00", "str":null,                 
"double":null, "bool": true,  "variant": 51,      "variantNumeric": -0.13, 
"variantEmptyObj":1,   "variantEmtpyArray":[], "variantWithArrays": [51, -35], 
"obj":{"a": 700, "b": {"x": "g", "y": 1.1, "z": [9, null, 9, 9]}, "v": []},  
"complexObj":{"x": 400,  "y": [{"l": [null], "m": 100, "n": 5},{"l": ["a", "b", 
"c"], "m": "a", "n": 1}],          "z": {}},                                    
                                 "ar [...]
diff --git 
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java
 
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java
index 90b3932d1e6..a40dfbf79f9 100644
--- 
a/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java
+++ 
b/sql/src/test/java/org/apache/druid/sql/calcite/CalciteNestedDataQueryTest.java
@@ -5771,7 +5771,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -5809,7 +5809,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -5847,7 +5847,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -5885,7 +5885,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -5923,7 +5923,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -5961,7 +5961,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -5999,7 +5999,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -6039,7 +6039,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -6077,7 +6077,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -6115,7 +6115,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -6153,7 +6153,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -6191,7 +6191,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -6229,7 +6229,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -6267,7 +6267,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                 "hello",
                 1234L,
                 1.234D,
-                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"]}}",
+                
"{\"x\":1,\"y\":\"hello\",\"z\":{\"a\":1.1,\"b\":1234,\"c\":[\"a\",\"b\",\"c\"],\"d\":[]}}",
                 "[\"a\",\"b\",\"c\"]",
                 "[1,2,3]",
                 "[1.1,2.2,3.3]",
@@ -6589,7 +6589,11 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                       .dataSource(DATA_SOURCE_ARRAYS)
                       .intervals(querySegmentSpec(Filtration.eternity()))
                       .virtualColumns(
-                          expressionVirtualColumn("v0", 
"json_query_array(\"arrayObject\",'$')", 
ColumnType.ofArray(ColumnType.NESTED_DATA))
+                          expressionVirtualColumn(
+                              "v0",
+                              "json_query_array(\"arrayObject\",'$')",
+                              ColumnType.ofArray(ColumnType.NESTED_DATA)
+                          )
                       )
                       .columns("v0")
                       .context(QUERY_CONTEXT_DEFAULT)
@@ -6623,6 +6627,7 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
         )
         .run();
   }
+
   @Test
   public void testUnnestJsonQueryArrays()
   {
@@ -6636,7 +6641,11 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                       .dataSource(
                           UnnestDataSource.create(
                               TableDataSource.create(DATA_SOURCE_ARRAYS),
-                              expressionVirtualColumn("j0.unnest", 
"json_query_array(\"arrayObject\",'$')", 
ColumnType.ofArray(ColumnType.NESTED_DATA)),
+                              expressionVirtualColumn(
+                                  "j0.unnest",
+                                  "json_query_array(\"arrayObject\",'$')",
+                                  ColumnType.ofArray(ColumnType.NESTED_DATA)
+                              ),
                               null
                           )
                       )
@@ -6707,7 +6716,11 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                             .setDataSource(
                                 UnnestDataSource.create(
                                     TableDataSource.create(DATA_SOURCE_ARRAYS),
-                                    expressionVirtualColumn("j0.unnest", 
"json_query_array(\"arrayObject\",'$')", 
ColumnType.ofArray(ColumnType.NESTED_DATA)),
+                                    expressionVirtualColumn(
+                                        "j0.unnest",
+                                        
"json_query_array(\"arrayObject\",'$')",
+                                        
ColumnType.ofArray(ColumnType.NESTED_DATA)
+                                    ),
                                     null
                                 )
                             )
@@ -6763,7 +6776,11 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
                       .dataSource(
                           UnnestDataSource.create(
                               TableDataSource.create(DATA_SOURCE_ARRAYS),
-                              expressionVirtualColumn("j0.unnest", 
"json_query_array(\"arrayObject\",'$')", 
ColumnType.ofArray(ColumnType.NESTED_DATA)),
+                              expressionVirtualColumn(
+                                  "j0.unnest",
+                                  "json_query_array(\"arrayObject\",'$')",
+                                  ColumnType.ofArray(ColumnType.NESTED_DATA)
+                              ),
                               null
                           )
                       )
@@ -6789,4 +6806,45 @@ public class CalciteNestedDataQueryTest extends 
BaseCalciteQueryTest
         )
         .run();
   }
+
+  @Test
+  public void testJsonValueNestedEmptyArray()
+  {
+    // test for regression
+    skipVectorize();
+    testQuery(
+        "SELECT json_value(cObj, '$.z.d') FROM druid.all_auto",
+        ImmutableList.of(
+            Druids.newScanQueryBuilder()
+                  .dataSource(DATA_SOURCE_ALL)
+                  .intervals(querySegmentSpec(Filtration.eternity()))
+                  .columns(
+                      "v0"
+                  )
+                  .virtualColumns(
+                      new NestedFieldVirtualColumn(
+                          "cObj",
+                          "$.z.d",
+                          "v0",
+                          ColumnType.STRING
+                      )
+                  )
+                  
.resultFormat(ScanQuery.ResultFormat.RESULT_FORMAT_COMPACTED_LIST)
+                  .legacy(false)
+                  .build()
+        ),
+        ImmutableList.of(
+            new Object[]{"[]"},
+            new Object[]{"[]"},
+            new Object[]{"[]"},
+            new Object[]{"[]"},
+            new Object[]{"[]"},
+            new Object[]{"[]"},
+            new Object[]{"[]"}
+        ),
+        RowSignature.builder()
+                    .add("EXPR$0", ColumnType.STRING)
+                    .build()
+    );
+  }
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to