Skip to content

Commit 31732a8

Browse files
committed
Test to show that NOT EQUALS filter estimate is incorrect
When the NDV for the source variable is 1, the overlap percent should not assume full overlap
1 parent c07cdb5 commit 31732a8

File tree

1 file changed

+27
-0
lines changed

1 file changed

+27
-0
lines changed

presto-main-base/src/test/java/com/facebook/presto/cost/AbstractTestFilterStatsCalculator.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,15 @@
1414
package com.facebook.presto.cost;
1515

1616
import com.facebook.presto.Session;
17+
import com.facebook.presto.common.type.DoubleType;
1718
import com.facebook.presto.common.type.VarcharType;
1819
import com.facebook.presto.metadata.MetadataManager;
1920
import com.facebook.presto.spi.relation.RowExpression;
2021
import com.facebook.presto.spi.relation.VariableReferenceExpression;
2122
import com.facebook.presto.sql.InMemoryExpressionOptimizerProvider;
2223
import com.facebook.presto.sql.TestingRowExpressionTranslator;
2324
import com.facebook.presto.sql.planner.TypeProvider;
25+
import com.facebook.presto.sql.planner.iterative.rule.test.PlanBuilder;
2426
import com.facebook.presto.sql.tree.Expression;
2527
import com.google.common.collect.ImmutableList;
2628
import org.testng.annotations.BeforeClass;
@@ -37,6 +39,7 @@
3739
import static java.lang.Double.POSITIVE_INFINITY;
3840
import static java.lang.String.format;
3941
import static org.testng.Assert.assertEquals;
42+
import static org.testng.Assert.assertNotEquals;
4043

4144
public abstract class AbstractTestFilterStatsCalculator
4245
{
@@ -605,6 +608,30 @@ public void testInPredicateFilter()
605608
.nullsFraction(0.0));
606609
}
607610

611+
@Test
612+
public void testComplicatedAndOr()
613+
{
614+
Expression exp = expression("name <> 'business'");
615+
TypeProvider customTypes = TypeProvider.fromVariables(ImmutableList.<VariableReferenceExpression>builder()
616+
.add(new VariableReferenceExpression(Optional.empty(), "name", MEDIUM_VARCHAR_TYPE))
617+
.build());
618+
619+
RowExpression rowExpression = translator.translateAndOptimize(exp, customTypes);
620+
621+
VariableStatsEstimate nameStats = VariableStatsEstimate.builder()
622+
.setNullsFraction(0D)
623+
.setDistinctValuesCount(1D)
624+
.build();
625+
626+
PlanNodeStatsEstimate inputStats = PlanNodeStatsEstimate.builder()
627+
.addVariableStatistics(new VariableReferenceExpression(Optional.empty(), "name", MEDIUM_VARCHAR_TYPE), nameStats)
628+
.setOutputRowCount(100D)
629+
.build();
630+
631+
PlanNodeStatsEstimate rowExpressionStatsEstimate = statsCalculator.filterStats(inputStats, rowExpression, session);
632+
assertNotEquals(rowExpressionStatsEstimate.getOutputRowCount(), 0D, 0.0001D);
633+
}
634+
608635
protected PlanNodeStatsAssertion assertExpression(String expression)
609636
{
610637
return assertExpression(expression(expression));

0 commit comments

Comments
 (0)