Skip to content

Commit 8a78de4

Browse files
LakshSinglagianm
andauthored
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 <gianmerlino@gmail.com>
1 parent 889f03b commit 8a78de4

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

processing/src/main/java/org/apache/druid/query/filter/NullFilter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,10 @@ public Filter toFilter()
114114
@Override
115115
public RangeSet<String> getDimensionRangeSet(String dimension)
116116
{
117+
if (!Objects.equals(getColumn(), dimension)) {
118+
return null;
119+
}
120+
117121
RangeSet<String> retSet = TreeRangeSet.create();
118122
// Nulls are less than empty String in segments
119123
retSet.add(Range.lessThan(""));

processing/src/test/java/org/apache/druid/segment/filter/NullFilterTests.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import com.fasterxml.jackson.databind.ObjectMapper;
2424
import com.google.common.base.Function;
2525
import com.google.common.collect.ImmutableList;
26+
import com.google.common.collect.Range;
27+
import com.google.common.collect.TreeRangeSet;
2628
import nl.jqno.equalsverifier.EqualsVerifier;
2729
import org.apache.druid.common.config.NullHandling;
2830
import org.apache.druid.jackson.DefaultObjectMapper;
@@ -41,6 +43,7 @@
4143

4244
import java.io.Closeable;
4345
import java.util.Arrays;
46+
import java.util.Collections;
4447

4548
@RunWith(Enclosed.class)
4649
public class NullFilterTests
@@ -310,6 +313,19 @@ public void testArrays()
310313

311314
public static class NullFilterNonParameterizedTest
312315
{
316+
@Test
317+
public void testGetDimensionRangeSet()
318+
{
319+
final NullFilter filter = new NullFilter("x", null);
320+
321+
Assert.assertEquals(
322+
TreeRangeSet.create(Collections.singleton(Range.lessThan(""))),
323+
filter.getDimensionRangeSet("x")
324+
);
325+
326+
Assert.assertNull(filter.getDimensionRangeSet("y"));
327+
}
328+
313329
@Test
314330
public void testSerde() throws JsonProcessingException
315331
{

0 commit comments

Comments
 (0)