[chore](Nereids): polish StatsCalculatorTest (#22884)
This commit is contained in:
@ -31,7 +31,6 @@ import org.apache.doris.nereids.trees.expressions.Or;
|
||||
import org.apache.doris.nereids.trees.expressions.SlotReference;
|
||||
import org.apache.doris.nereids.trees.expressions.StatementScopeIdGenerator;
|
||||
import org.apache.doris.nereids.trees.expressions.literal.IntegerLiteral;
|
||||
import org.apache.doris.nereids.trees.plans.FakePlan;
|
||||
import org.apache.doris.nereids.trees.plans.GroupPlan;
|
||||
import org.apache.doris.nereids.trees.plans.LimitPhase;
|
||||
import org.apache.doris.nereids.trees.plans.Plan;
|
||||
@ -41,7 +40,6 @@ import org.apache.doris.nereids.trees.plans.logical.LogicalOlapScan;
|
||||
import org.apache.doris.nereids.trees.plans.logical.LogicalTopN;
|
||||
import org.apache.doris.nereids.types.IntegerType;
|
||||
import org.apache.doris.nereids.util.PlanConstructor;
|
||||
import org.apache.doris.qe.ConnectContext;
|
||||
import org.apache.doris.statistics.ColumnStatistic;
|
||||
import org.apache.doris.statistics.ColumnStatisticBuilder;
|
||||
import org.apache.doris.statistics.Statistics;
|
||||
@ -49,11 +47,9 @@ import org.apache.doris.statistics.Statistics;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.common.collect.Lists;
|
||||
import mockit.Mocked;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
@ -61,11 +57,12 @@ import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
public class StatsCalculatorTest {
|
||||
private final LogicalOlapScan scan = PlanConstructor.newLogicalOlapScan(0, "t1", 0);
|
||||
|
||||
private Group newGroup() {
|
||||
GroupExpression groupExpression = new GroupExpression(new FakePlan());
|
||||
Group group = new Group(null, groupExpression, null);
|
||||
group.getPhysicalExpressions().remove(0);
|
||||
private Group newFakeGroup() {
|
||||
GroupExpression groupExpression = new GroupExpression(scan);
|
||||
Group group = new Group(null, groupExpression, new LogicalProperties(Collections::emptyList));
|
||||
group.getLogicalExpressions().remove(0);
|
||||
return group;
|
||||
}
|
||||
|
||||
@ -138,22 +135,19 @@ public class StatsCalculatorTest {
|
||||
ImmutableSet and = ImmutableSet.of(eq1, eq2);
|
||||
ImmutableSet or = ImmutableSet.of(new Or(eq1, eq2));
|
||||
|
||||
Group childGroup = newGroup();
|
||||
childGroup.setLogicalProperties(new LogicalProperties(Collections::emptyList));
|
||||
Group childGroup = newFakeGroup();
|
||||
GroupPlan groupPlan = new GroupPlan(childGroup);
|
||||
childGroup.setStatistics(childStats);
|
||||
|
||||
LogicalFilter<GroupPlan> logicalFilter = new LogicalFilter<>(and, groupPlan);
|
||||
GroupExpression groupExpression = new GroupExpression(logicalFilter, ImmutableList.of(childGroup));
|
||||
Group ownerGroup = newGroup();
|
||||
groupExpression.setOwnerGroup(ownerGroup);
|
||||
Group ownerGroup = new Group(null, groupExpression, null);
|
||||
StatsCalculator.estimate(groupExpression, null);
|
||||
Assertions.assertEquals((10000 * 0.1 * 0.05), ownerGroup.getStatistics().getRowCount(), 0.001);
|
||||
|
||||
LogicalFilter<GroupPlan> logicalFilterOr = new LogicalFilter<>(or, groupPlan);
|
||||
GroupExpression groupExpressionOr = new GroupExpression(logicalFilterOr, ImmutableList.of(childGroup));
|
||||
Group ownerGroupOr = newGroup();
|
||||
groupExpressionOr.setOwnerGroup(ownerGroupOr);
|
||||
Group ownerGroupOr = new Group(null, groupExpressionOr, null);
|
||||
StatsCalculator.estimate(groupExpressionOr, null);
|
||||
Assertions.assertEquals((long) (10000 * (0.1 + 0.05 - 0.1 * 0.05)),
|
||||
ownerGroupOr.getStatistics().getRowCount(), 0.001);
|
||||
@ -163,9 +157,7 @@ public class StatsCalculatorTest {
|
||||
// a=200 and b=300 => output: 0 rows
|
||||
@org.junit.Test
|
||||
public void testFilterOutofRange() {
|
||||
List<String> qualifier = Lists.newArrayList();
|
||||
qualifier.add("test");
|
||||
qualifier.add("t");
|
||||
List<String> qualifier = ImmutableList.of("test", "t");
|
||||
SlotReference slot1 = new SlotReference("c1", IntegerType.INSTANCE, true, qualifier);
|
||||
SlotReference slot2 = new SlotReference("c2", IntegerType.INSTANCE, true, qualifier);
|
||||
|
||||
@ -191,21 +183,20 @@ public class StatsCalculatorTest {
|
||||
ImmutableSet and = ImmutableSet.of(new And(eq1, eq2));
|
||||
ImmutableSet or = ImmutableSet.of(new Or(eq1, eq2));
|
||||
|
||||
Group childGroup = newGroup();
|
||||
childGroup.setLogicalProperties(new LogicalProperties(Collections::emptyList));
|
||||
Group childGroup = newFakeGroup();
|
||||
GroupPlan groupPlan = new GroupPlan(childGroup);
|
||||
childGroup.setStatistics(childStats);
|
||||
|
||||
LogicalFilter<GroupPlan> logicalFilter = new LogicalFilter<>(and, groupPlan);
|
||||
GroupExpression groupExpression = new GroupExpression(logicalFilter, ImmutableList.of(childGroup));
|
||||
Group ownerGroup = newGroup();
|
||||
Group ownerGroup = new Group(null, groupExpression, null);
|
||||
groupExpression.setOwnerGroup(ownerGroup);
|
||||
StatsCalculator.estimate(groupExpression, null);
|
||||
Assertions.assertEquals(0, ownerGroup.getStatistics().getRowCount(), 0.001);
|
||||
|
||||
LogicalFilter<GroupPlan> logicalFilterOr = new LogicalFilter<>(or, groupPlan);
|
||||
GroupExpression groupExpressionOr = new GroupExpression(logicalFilterOr, ImmutableList.of(childGroup));
|
||||
Group ownerGroupOr = newGroup();
|
||||
Group ownerGroupOr = new Group(null, groupExpressionOr, null);
|
||||
groupExpressionOr.setOwnerGroup(ownerGroupOr);
|
||||
StatsCalculator.estimate(groupExpressionOr, null);
|
||||
Assertions.assertEquals(0, ownerGroupOr.getStatistics().getRowCount(), 0.001);
|
||||
@ -249,20 +240,20 @@ public class StatsCalculatorTest {
|
||||
// }
|
||||
|
||||
@Test
|
||||
public void testOlapScan(@Mocked ConnectContext context) {
|
||||
public void testOlapScan() {
|
||||
long tableId1 = 0;
|
||||
List<String> qualifier = ImmutableList.of("test", "t");
|
||||
SlotReference slot1 = new SlotReference(new ExprId(0),
|
||||
"c1", IntegerType.INSTANCE, true, qualifier, new Column("c1", PrimitiveType.INT));
|
||||
|
||||
OlapTable table1 = PlanConstructor.newOlapTable(tableId1, "t1", 0);
|
||||
LogicalOlapScan logicalOlapScan1 = (LogicalOlapScan) new LogicalOlapScan(StatementScopeIdGenerator.newRelationId(), table1,
|
||||
LogicalOlapScan logicalOlapScan1 = (LogicalOlapScan) new LogicalOlapScan(
|
||||
StatementScopeIdGenerator.newRelationId(), table1,
|
||||
Collections.emptyList()).withGroupExprLogicalPropChildren(Optional.empty(),
|
||||
Optional.of(new LogicalProperties(() -> ImmutableList.of(slot1))), ImmutableList.of());
|
||||
Group childGroup = newGroup();
|
||||
GroupExpression groupExpression = new GroupExpression(logicalOlapScan1, ImmutableList.of(childGroup));
|
||||
Group ownerGroup = newGroup();
|
||||
groupExpression.setOwnerGroup(ownerGroup);
|
||||
|
||||
GroupExpression groupExpression = new GroupExpression(logicalOlapScan1, ImmutableList.of());
|
||||
Group ownerGroup = new Group(null, groupExpression, null);
|
||||
StatsCalculator.estimate(groupExpression, null);
|
||||
Statistics stats = ownerGroup.getStatistics();
|
||||
Assertions.assertEquals(1, stats.columnStatistics().size());
|
||||
@ -271,9 +262,7 @@ public class StatsCalculatorTest {
|
||||
|
||||
@Test
|
||||
public void testLimit() {
|
||||
List<String> qualifier = new ArrayList<>();
|
||||
qualifier.add("test");
|
||||
qualifier.add("t");
|
||||
List<String> qualifier = ImmutableList.of("test", "t");
|
||||
SlotReference slot1 = new SlotReference(new ExprId(0),
|
||||
"c1", IntegerType.INSTANCE, true, qualifier, new Column("c1", PrimitiveType.INT));
|
||||
ColumnStatisticBuilder columnStat1 = new ColumnStatisticBuilder();
|
||||
@ -283,17 +272,14 @@ public class StatsCalculatorTest {
|
||||
slotColumnStatsMap.put(slot1, columnStat1.build());
|
||||
Statistics childStats = new Statistics(10, slotColumnStatsMap);
|
||||
|
||||
Group childGroup = newGroup();
|
||||
childGroup.setLogicalProperties(new LogicalProperties(Collections::emptyList));
|
||||
Group childGroup = newFakeGroup();
|
||||
GroupPlan groupPlan = new GroupPlan(childGroup);
|
||||
childGroup.setStatistics(childStats);
|
||||
|
||||
LogicalLimit<? extends Plan> logicalLimit = new LogicalLimit<>(1, 2,
|
||||
LimitPhase.GLOBAL, new LogicalLimit<>(1, 2, LimitPhase.LOCAL, groupPlan)
|
||||
);
|
||||
LimitPhase.GLOBAL, new LogicalLimit<>(1, 2, LimitPhase.LOCAL, groupPlan));
|
||||
GroupExpression groupExpression = new GroupExpression(logicalLimit, ImmutableList.of(childGroup));
|
||||
Group ownerGroup = newGroup();
|
||||
ownerGroup.addGroupExpression(groupExpression);
|
||||
Group ownerGroup = new Group(null, groupExpression, null);
|
||||
StatsCalculator.estimate(groupExpression, null);
|
||||
Statistics limitStats = ownerGroup.getStatistics();
|
||||
Assertions.assertEquals(1, limitStats.getRowCount());
|
||||
@ -304,9 +290,7 @@ public class StatsCalculatorTest {
|
||||
|
||||
@Test
|
||||
public void testTopN() {
|
||||
List<String> qualifier = new ArrayList<>();
|
||||
qualifier.add("test");
|
||||
qualifier.add("t");
|
||||
List<String> qualifier = ImmutableList.of("test", "t");
|
||||
SlotReference slot1 = new SlotReference("c1", IntegerType.INSTANCE, true, qualifier);
|
||||
ColumnStatisticBuilder columnStat1 = new ColumnStatisticBuilder();
|
||||
columnStat1.setNdv(10);
|
||||
@ -315,15 +299,13 @@ public class StatsCalculatorTest {
|
||||
slotColumnStatsMap.put(slot1, columnStat1.build());
|
||||
Statistics childStats = new Statistics(10, slotColumnStatsMap);
|
||||
|
||||
Group childGroup = newGroup();
|
||||
childGroup.setLogicalProperties(new LogicalProperties(Collections::emptyList));
|
||||
Group childGroup = newFakeGroup();
|
||||
GroupPlan groupPlan = new GroupPlan(childGroup);
|
||||
childGroup.setStatistics(childStats);
|
||||
|
||||
LogicalTopN<GroupPlan> logicalTopN = new LogicalTopN<>(Collections.emptyList(), 1, 2, groupPlan);
|
||||
GroupExpression groupExpression = new GroupExpression(logicalTopN, ImmutableList.of(childGroup));
|
||||
Group ownerGroup = newGroup();
|
||||
ownerGroup.addGroupExpression(groupExpression);
|
||||
Group ownerGroup = new Group(null, groupExpression, null);
|
||||
StatsCalculator.estimate(groupExpression, null);
|
||||
Statistics topNStats = ownerGroup.getStatistics();
|
||||
Assertions.assertEquals(1, topNStats.getRowCount());
|
||||
|
||||
Reference in New Issue
Block a user