You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@druid.apache.org by cw...@apache.org on 2024/02/23 23:07:38 UTC
(druid) branch master updated: fix bug with expression virtual column indexes on missing columns for expressions that turn null values into not null values (#15959)
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 6145c8dd018 fix bug with expression virtual column indexes on missing columns for expressions that turn null values into not null values (#15959)
6145c8dd018 is described below
commit 6145c8dd018700558c070090ec4dc74b8517fb41
Author: Clint Wylie <cw...@apache.org>
AuthorDate: Fri Feb 23 15:07:32 2024 -0800
fix bug with expression virtual column indexes on missing columns for expressions that turn null values into not null values (#15959)
---
.../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 d118bf475b8..43d669081c0 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: commits-unsubscribe@druid.apache.org
For additional commands, e-mail: commits-help@druid.apache.org