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

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


The following commit(s) were added to refs/heads/29.0.1 by this push:
     new 8195634e9af fix bug with expression virtual column indexes on missing 
columns for expressions that turn null values into not null values (#15959) 
(#16055)
8195634e9af is described below

commit 8195634e9afb4f303ed880926c19d7a1562790cc
Author: Karan Kumar <[email protected]>
AuthorDate: Mon Mar 11 16:14:27 2024 +0530

    fix bug with expression virtual column indexes on missing columns for 
expressions that turn null values into not null values (#15959) (#16055)
    
    Co-authored-by: Clint Wylie <[email protected]>
---
 .../src/main/java/org/apache/druid/math/expr/Expr.java    |  5 +++++
 .../org/apache/druid/segment/filter/BaseFilterTest.java   |  1 +
 .../apache/druid/segment/filter/EqualityFilterTests.java  | 15 +++++++++++++++
 3 files changed, 21 insertions(+)

diff --git a/processing/src/main/java/org/apache/druid/math/expr/Expr.java 
b/processing/src/main/java/org/apache/druid/math/expr/Expr.java
index 9237b0d14e9..0caa191f6db 100644
--- a/processing/src/main/java/org/apache/druid/math/expr/Expr.java
+++ b/processing/src/main/java/org/apache/druid/math/expr/Expr.java
@@ -207,6 +207,11 @@ public interface Expr extends Cacheable
 
       final ColumnIndexSupplier delegateIndexSupplier = 
columnIndexSelector.getIndexSupplier(column);
       if (delegateIndexSupplier == null) {
+        // if the column doesn't exist, check to see if the expression 
evaluates to a non-null result... if so, we might
+        // need to make a value matcher anyway
+        if (eval(InputBindings.nilBindings()).valueOrDefault() != null) {
+          return NoIndexesColumnIndexSupplier.getInstance();
+        }
         return null;
       }
       final DictionaryEncodedValueIndex<?> delegateRawIndex = 
delegateIndexSupplier.as(
diff --git 
a/processing/src/test/java/org/apache/druid/segment/filter/BaseFilterTest.java 
b/processing/src/test/java/org/apache/druid/segment/filter/BaseFilterTest.java
index f4ecad4485b..a907bc7cd02 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/filter/BaseFilterTest.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/filter/BaseFilterTest.java
@@ -152,6 +152,7 @@ public abstract class BaseFilterTest extends 
InitializedNullHandlingTest
           new ExpressionVirtualColumn("vdim3-concat", "dim3 + dim3", 
ColumnType.LONG, TestExprMacroTable.INSTANCE),
           new ExpressionVirtualColumn("vdim2-offset", "array_offset(dim2, 1)", 
ColumnType.STRING, TestExprMacroTable.INSTANCE),
           new ExpressionVirtualColumn("nestedArrayLong", "array(arrayLong)", 
ColumnType.ofArray(ColumnType.LONG_ARRAY), TestExprMacroTable.INSTANCE),
+          new ExpressionVirtualColumn("fake-nvl", "nvl(fake, 'hello')", 
ColumnType.STRING, TestExprMacroTable.INSTANCE),
           new ListFilteredVirtualColumn("allow-dim0", 
DefaultDimensionSpec.of("dim0"), ImmutableSet.of("3", "4"), true),
           new ListFilteredVirtualColumn("deny-dim0", 
DefaultDimensionSpec.of("dim0"), ImmutableSet.of("3", "4"), false),
           new ListFilteredVirtualColumn("allow-dim2", 
DefaultDimensionSpec.of("dim2"), ImmutableSet.of("a"), true),
diff --git 
a/processing/src/test/java/org/apache/druid/segment/filter/EqualityFilterTests.java
 
b/processing/src/test/java/org/apache/druid/segment/filter/EqualityFilterTests.java
index 9c2bd90071c..78b40ea43d7 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/filter/EqualityFilterTests.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/filter/EqualityFilterTests.java
@@ -124,6 +124,7 @@ public class EqualityFilterTests
       assertFilterMatches(new EqualityFilter("vdim0", ColumnType.LONG, 1L, 
null), ImmutableList.of("1"));
     }
 
+
     @Test
     public void testListFilteredVirtualColumn()
     {
@@ -407,6 +408,20 @@ public class EqualityFilterTests
       }
     }
 
+
+    @Test
+    public void testSingleValueVirtualStringColumnMissingColumnCoalesce()
+    {
+      assertFilterMatches(
+          new EqualityFilter("fake-nvl", ColumnType.STRING, "0", null),
+          ImmutableList.of()
+      );
+      assertFilterMatches(
+          new EqualityFilter("fake-nvl", ColumnType.STRING, "hello", null),
+          ImmutableList.of("0", "1", "2", "3", "4", "5")
+      );
+    }
+
     @Test
     public void testMultiValueStringColumn()
     {


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

Reply via email to