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]