This is an automated email from the ASF dual-hosted git repository.
karan 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 4de1909d79b fix sql planner for json_value with returning boolean to
plan as long type output (#18698)
4de1909d79b is described below
commit 4de1909d79bddfa751b32529989cab637ae62591
Author: Clint Wylie <[email protected]>
AuthorDate: Tue Oct 28 21:29:43 2025 -0700
fix sql planner for json_value with returning boolean to plan as long type
output (#18698)
---
.../builtin/NestedDataOperatorConversions.java | 10 ++---
.../sql/calcite/CalciteNestedDataQueryTest.java | 48 ++++++++++++++++++++++
2 files changed, 53 insertions(+), 5 deletions(-)
diff --git
a/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java
b/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java
index 260b5a9932e..51e4fbc4e8c 100644
---
a/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java
+++
b/sql/src/main/java/org/apache/druid/sql/calcite/expression/builtin/NestedDataOperatorConversions.java
@@ -312,15 +312,15 @@ public class NestedDataOperatorConversions
}
RelDataType sqlType = cx.getValidator().getValidatedNodeType(call);
+ final SqlTypeName sqlTypeName = sqlType.getSqlTypeName();
SqlOperator jsonValueOperator;
- if (SqlTypeName.INT_TYPES.contains(sqlType.getSqlTypeName())) {
+ if (SqlTypeName.INT_TYPES.contains(sqlTypeName) ||
SqlTypeName.BOOLEAN_TYPES.contains(sqlTypeName)) {
jsonValueOperator = JsonValueBigintOperatorConversion.FUNCTION;
- } else if (SqlTypeName.DECIMAL.equals(sqlType.getSqlTypeName()) ||
-
SqlTypeName.APPROX_TYPES.contains(sqlType.getSqlTypeName())) {
+ } else if (SqlTypeName.DECIMAL.equals(sqlTypeName) ||
SqlTypeName.APPROX_TYPES.contains(sqlTypeName)) {
jsonValueOperator = JsonValueDoubleOperatorConversion.FUNCTION;
- } else if
(SqlTypeName.STRING_TYPES.contains(sqlType.getSqlTypeName())) {
+ } else if (SqlTypeName.STRING_TYPES.contains(sqlTypeName)) {
jsonValueOperator = JsonValueVarcharOperatorConversion.FUNCTION;
- } else if (SqlTypeName.ARRAY.equals(sqlType.getSqlTypeName())) {
+ } else if (SqlTypeName.ARRAY.equals(sqlTypeName)) {
ColumnType elementType =
Calcites.getColumnTypeForRelDataType(sqlType.getComponentType());
switch (elementType.getType()) {
case LONG:
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 8d04c66ec11..95ff5b28b85 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
@@ -2453,6 +2453,54 @@ public abstract class CalciteNestedDataQueryTest extends
BaseCalciteQueryTest
.run();
}
+ @Test
+ public void testGroupByRootSingleTypeArrayLongElementFilteredBoolean()
+ {
+ testBuilder()
+ .sql(
+ "SELECT "
+ + "__time,"
+ + "SUM(cnt) "
+ + "FROM druid.arrays "
+ + "WHERE JSON_VALUE(arrayLongNulls, '$[1]' RETURNING BOOLEAN) IS
NULL "
+ + "GROUP BY 1"
+ )
+ .queryContext(QUERY_CONTEXT_NO_STRINGIFY_ARRAY)
+ .expectedQueries(
+ ImmutableList.of(
+ GroupByQuery.builder()
+ .setDataSource(DATA_SOURCE_ARRAYS)
+
.setInterval(querySegmentSpec(Filtration.eternity()))
+ .setGranularity(Granularities.ALL)
+ .setDimensions(
+ dimensions(
+ new DefaultDimensionSpec("__time", "d0",
ColumnType.LONG)
+ )
+ )
+ .setVirtualColumns(
+ new NestedFieldVirtualColumn("arrayLongNulls",
"$[1]", "v0", ColumnType.LONG)
+ )
+ .setDimFilter(isNull("v0"))
+ .setAggregatorSpecs(aggregators(new
LongSumAggregatorFactory("a0", "cnt")))
+ .setContext(QUERY_CONTEXT_NO_STRINGIFY_ARRAY)
+ .build()
+ )
+ )
+ .expectedResults(
+ ImmutableList.of(
+ new Object[]{1672531200000L, 4L},
+ new Object[]{1672617600000L, 4L}
+ )
+ )
+ .expectedSignature(
+ RowSignature.builder()
+ .add("__time", ColumnType.LONG)
+ .add("EXPR$1", ColumnType.LONG)
+ .build()
+ )
+ .run();
+ }
+
@Test
public void testGroupByRootSingleTypeArrayStringElement()
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]