clintropolis commented on code in PR #19061:
URL: https://github.com/apache/druid/pull/19061#discussion_r2957143006
##########
processing/src/test/java/org/apache/druid/query/filter/FilterSegmentPrunerTest.java:
##########
@@ -70,15 +72,71 @@ void testPrune()
List<DataSegment> segs = List.of(seg1, seg2, seg3, seg4, seg5, seg6, seg7);
- FilterSegmentPruner prunerRange = new FilterSegmentPruner(range_a, null);
- FilterSegmentPruner prunerEmptyFields = new FilterSegmentPruner(range_a,
Collections.emptySet());
- FilterSegmentPruner prunerExpression = new
FilterSegmentPruner(expression_b, null);
+ FilterSegmentPruner prunerRange = new FilterSegmentPruner(range_a, null,
null);
+ FilterSegmentPruner prunerEmptyFields = new FilterSegmentPruner(range_a,
Collections.emptySet(), null);
+ FilterSegmentPruner prunerExpression = new
FilterSegmentPruner(expression_b, null, null);
Assertions.assertEquals(Set.of(seg1, seg4, seg5, seg6, seg7),
prunerRange.prune(segs, Function.identity()));
Assertions.assertEquals(Set.copyOf(segs), prunerExpression.prune(segs,
Function.identity()));
Assertions.assertEquals(Set.copyOf(segs), prunerEmptyFields.prune(segs,
Function.identity()));
}
+ @Test
+ void testPruneVirtualColumn()
+ {
+ VirtualColumns shardVirtualColumns = VirtualColumns.create(
+ new ExpressionVirtualColumn("vdim1", "concat(dim1, 'foo')",
ColumnType.STRING, TestExprMacroTable.INSTANCE)
+ );
+ String interval1 = "2026-02-18T00:00:00Z/2026-02-19T00:00:00Z";
+
+ DataSegment seg1 = makeDataSegment(
+ interval1,
+ makeRange(List.of("vdim1"), shardVirtualColumns, 0, null,
StringTuple.create("abcfoo"))
+ );
+ DataSegment seg2 = makeDataSegment(
+ interval1,
+ makeRange(List.of("vdim1"), shardVirtualColumns, 1,
StringTuple.create("abcfoo"), StringTuple.create("lmnfoo"))
+ );
+ DataSegment seg3 = makeDataSegment(
+ interval1,
+ makeRange(List.of("vdim1"), shardVirtualColumns, 2,
StringTuple.create("lmnfoo"), null)
+ );
+
+ List<DataSegment> segs = List.of(seg1, seg2, seg3);
+
+ // same expression, same name
+ VirtualColumns queryVirtualColumns = VirtualColumns.create(
+ new ExpressionVirtualColumn("vdim1", "concat(dim1, 'foo')",
ColumnType.STRING, TestExprMacroTable.INSTANCE)
+ );
+ DimFilter range_a = new RangeFilter("vdim1", ColumnType.STRING, null,
"aaa", null, null, null);
+ FilterSegmentPruner prunerRange = new FilterSegmentPruner(range_a, null,
queryVirtualColumns);
+ FilterSegmentPruner prunerEmptyFields = new FilterSegmentPruner(range_a,
Collections.emptySet(), queryVirtualColumns);
+ Assertions.assertEquals(Set.of(seg1), prunerRange.prune(segs,
Function.identity()));
+ Assertions.assertEquals(Set.copyOf(segs), prunerEmptyFields.prune(segs,
Function.identity()));
+
+ // same expression, different name
+ queryVirtualColumns = VirtualColumns.create(
+ new ExpressionVirtualColumn("v0", "concat(dim1, 'foo')",
ColumnType.STRING, TestExprMacroTable.INSTANCE)
+ );
+ range_a = new RangeFilter("v0", ColumnType.STRING, null, "aaa", null,
null, null);
+ prunerRange = new FilterSegmentPruner(range_a, null, queryVirtualColumns);
+ prunerEmptyFields = new FilterSegmentPruner(range_a,
Collections.emptySet(), queryVirtualColumns);
+
+ Assertions.assertEquals(Set.of(seg1), prunerRange.prune(segs,
Function.identity()));
+ Assertions.assertEquals(Set.copyOf(segs), prunerEmptyFields.prune(segs,
Function.identity()));
+
+ // same expression, different name
+ queryVirtualColumns = VirtualColumns.create(
+ new ExpressionVirtualColumn("v10", "concat(dim1, 'foo')",
ColumnType.STRING, TestExprMacroTable.INSTANCE)
+ );
+ range_a = new RangeFilter("v10", ColumnType.STRING, null, "aaa", null,
null, null);
+ prunerRange = new FilterSegmentPruner(range_a, null, queryVirtualColumns);
+ prunerEmptyFields = new FilterSegmentPruner(range_a,
Collections.emptySet(), queryVirtualColumns);
+
+ Assertions.assertEquals(Set.of(seg1), prunerRange.prune(segs,
Function.identity()));
+ Assertions.assertEquals(Set.copyOf(segs), prunerEmptyFields.prune(segs,
Function.identity()));
Review Comment:
ah no they are not really different, removed this redundant one but added
some additional stuff like mixing different names from the segments too and
calling prune twice to ensure cache is hit
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]