This is an automated email from the ASF dual-hosted git repository.
lakshsingla pushed a commit to branch 28.0.0
in repository https://gitbox.apache.org/repos/asf/druid.git
The following commit(s) were added to refs/heads/28.0.0 by this push:
new 77429c1f096 fix issue with SQL boolean constants not respecting nulls
when strict booleans and sql compatible null handling are enabled (#15135)
(#15152)
77429c1f096 is described below
commit 77429c1f09660d24b7aca4c15f9c67f92d609817
Author: Clint Wylie <[email protected]>
AuthorDate: Sun Oct 15 12:20:38 2023 -0700
fix issue with SQL boolean constants not respecting nulls when strict
booleans and sql compatible null handling are enabled (#15135) (#15152)
---
.../druid/sql/calcite/rule/DruidLogicalValuesRule.java | 5 +++++
.../sql/calcite/rule/DruidLogicalValuesRuleTest.java | 17 +++++++++++++++++
2 files changed, 22 insertions(+)
diff --git
a/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRule.java
b/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRule.java
index 614ffddf566..97fa5b86a6a 100644
---
a/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRule.java
+++
b/sql/src/main/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRule.java
@@ -25,7 +25,9 @@ import org.apache.calcite.plan.RelOptRule;
import org.apache.calcite.plan.RelOptRuleCall;
import org.apache.calcite.rel.logical.LogicalValues;
import org.apache.calcite.rex.RexLiteral;
+import org.apache.druid.common.config.NullHandling;
import org.apache.druid.error.InvalidSqlInput;
+import org.apache.druid.math.expr.ExpressionProcessing;
import org.apache.druid.query.InlineDataSource;
import org.apache.druid.segment.column.RowSignature;
import org.apache.druid.sql.calcite.planner.Calcites;
@@ -120,6 +122,9 @@ public class DruidLogicalValuesRule extends RelOptRule
}
return ((Number) RexLiteral.value(literal)).longValue();
case BOOLEAN:
+ if (ExpressionProcessing.useStrictBooleans() &&
NullHandling.sqlCompatible() && literal.isNull()) {
+ return null;
+ }
return literal.isAlwaysTrue() ? 1L : 0L;
case TIMESTAMP:
case DATE:
diff --git
a/sql/src/test/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRuleTest.java
b/sql/src/test/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRuleTest.java
index ee2e4273f83..2ad83563e9e 100644
---
a/sql/src/test/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRuleTest.java
+++
b/sql/src/test/java/org/apache/druid/sql/calcite/rule/DruidLogicalValuesRuleTest.java
@@ -28,8 +28,10 @@ import org.apache.calcite.sql.type.SqlTypeName;
import org.apache.calcite.util.DateString;
import org.apache.calcite.util.TimeString;
import org.apache.calcite.util.TimestampString;
+import org.apache.druid.common.config.NullHandling;
import org.apache.druid.error.DruidExceptionMatcher;
import org.apache.druid.java.util.common.DateTimes;
+import org.apache.druid.math.expr.ExpressionProcessing;
import org.apache.druid.sql.calcite.planner.DruidTypeSystem;
import org.apache.druid.sql.calcite.planner.PlannerContext;
import org.apache.druid.testing.InitializedNullHandlingTest;
@@ -139,6 +141,21 @@ public class DruidLogicalValuesRuleTest
Assert.assertEquals(0L, fromLiteral);
}
+ @Test
+ public void testGetValueFromNullBooleanLiteral()
+ {
+ RexLiteral literal = REX_BUILDER.makeLiteral(null,
REX_BUILDER.getTypeFactory().createSqlType(SqlTypeName.BOOLEAN));
+
+ if (NullHandling.sqlCompatible() &&
ExpressionProcessing.useStrictBooleans()) {
+ final Object fromLiteral =
DruidLogicalValuesRule.getValueFromLiteral(literal, DEFAULT_CONTEXT);
+ Assert.assertNull(fromLiteral);
+ } else {
+ final Object fromLiteralNonStrict =
DruidLogicalValuesRule.getValueFromLiteral(literal, DEFAULT_CONTEXT);
+ Assert.assertSame(Long.class, fromLiteralNonStrict.getClass());
+ Assert.assertEquals(0L, fromLiteralNonStrict);
+ }
+ }
+
@Test
public void testGetValueFromTimestampLiteral()
{
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]