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]