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]

Reply via email to