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

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


The following commit(s) were added to refs/heads/28.0.1 by this push:
     new 8a78de44bbb Fix NullFilter getDimensionRangeSet. (#15500) (#15509)
8a78de44bbb is described below

commit 8a78de44bbb713d9d3f5de558f165dafccd30d7c
Author: Laksh Singla <[email protected]>
AuthorDate: Thu Dec 7 21:45:31 2023 +0530

    Fix NullFilter getDimensionRangeSet. (#15500) (#15509)
    
    It wasn't checking the column name, so it would return a domain regardless
    of the input column. This means that null filters on data sources with range
    partitioning would lead to excessive pruning of segments, and therefore
    missing results.
    
    Co-authored-by: Gian Merlino <[email protected]>
---
 .../java/org/apache/druid/query/filter/NullFilter.java   |  4 ++++
 .../org/apache/druid/segment/filter/NullFilterTests.java | 16 ++++++++++++++++
 2 files changed, 20 insertions(+)

diff --git 
a/processing/src/main/java/org/apache/druid/query/filter/NullFilter.java 
b/processing/src/main/java/org/apache/druid/query/filter/NullFilter.java
index 14bdb6f4185..da737bdce89 100644
--- a/processing/src/main/java/org/apache/druid/query/filter/NullFilter.java
+++ b/processing/src/main/java/org/apache/druid/query/filter/NullFilter.java
@@ -114,6 +114,10 @@ public class NullFilter extends 
AbstractOptimizableDimFilter implements Filter
   @Override
   public RangeSet<String> getDimensionRangeSet(String dimension)
   {
+    if (!Objects.equals(getColumn(), dimension)) {
+      return null;
+    }
+
     RangeSet<String> retSet = TreeRangeSet.create();
     // Nulls are less than empty String in segments
     retSet.add(Range.lessThan(""));
diff --git 
a/processing/src/test/java/org/apache/druid/segment/filter/NullFilterTests.java 
b/processing/src/test/java/org/apache/druid/segment/filter/NullFilterTests.java
index b123ead53a5..084c1c24c2b 100644
--- 
a/processing/src/test/java/org/apache/druid/segment/filter/NullFilterTests.java
+++ 
b/processing/src/test/java/org/apache/druid/segment/filter/NullFilterTests.java
@@ -23,6 +23,8 @@ import com.fasterxml.jackson.core.JsonProcessingException;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.base.Function;
 import com.google.common.collect.ImmutableList;
+import com.google.common.collect.Range;
+import com.google.common.collect.TreeRangeSet;
 import nl.jqno.equalsverifier.EqualsVerifier;
 import org.apache.druid.common.config.NullHandling;
 import org.apache.druid.jackson.DefaultObjectMapper;
@@ -41,6 +43,7 @@ import org.junit.runners.Parameterized;
 
 import java.io.Closeable;
 import java.util.Arrays;
+import java.util.Collections;
 
 @RunWith(Enclosed.class)
 public class NullFilterTests
@@ -310,6 +313,19 @@ public class NullFilterTests
 
   public static class NullFilterNonParameterizedTest
   {
+    @Test
+    public void testGetDimensionRangeSet()
+    {
+      final NullFilter filter = new NullFilter("x", null);
+
+      Assert.assertEquals(
+          TreeRangeSet.create(Collections.singleton(Range.lessThan(""))),
+          filter.getDimensionRangeSet("x")
+      );
+
+      Assert.assertNull(filter.getDimensionRangeSet("y"));
+    }
+
     @Test
     public void testSerde() throws JsonProcessingException
     {


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

Reply via email to