Skip to content

Commit

Permalink
[fix](test) fix PlannerTest testEliminatingSortNode (apache#21112)
Browse files Browse the repository at this point in the history
testEliminatingSortNode needs to check if SortNode is existed in plan tree, so it should check plan1.contains("order by:"), but rather than plan1.contains("SORT INFO:") or plan1.contains("SORT LIMIT:").
  • Loading branch information
xiaokang authored Jun 28, 2023
1 parent 274203a commit e7dd65f
Showing 1 changed file with 23 additions and 45 deletions.
68 changes: 23 additions & 45 deletions fe/fe-core/src/test/java/org/apache/doris/planner/PlannerTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -560,71 +560,60 @@ public void testPushSortToOlapScan() throws Exception {

@Test
public void testEliminatingSortNode() throws Exception {
// success case 1
// fail case 1
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertTrue(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertTrue(plan1.contains("SORT LIMIT:"));
Assertions.assertTrue(plan1.contains("order by:"));
}

// fail case 2
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 and k3 = 2 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 and k3 = 2 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertTrue(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertTrue(plan1.contains("SORT LIMIT:"));
Assertions.assertTrue(plan1.contains("order by:"));
}

// fail case 3
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 and k2 != 2 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 and k2 != 2 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertTrue(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertTrue(plan1.contains("SORT LIMIT:"));
Assertions.assertTrue(plan1.contains("order by:"));
}

// fail case 4
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 or k2 = 2 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 or k2 = 2 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertTrue(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertTrue(plan1.contains("SORT LIMIT:"));
Assertions.assertTrue(plan1.contains("order by:"));
}

// fail case 5
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 and k2 = 2 or k3 = 3 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 and k2 = 2 or k3 = 3 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertTrue(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertTrue(plan1.contains("SORT LIMIT:"));
Assertions.assertTrue(plan1.contains("order by:"));
}

// fail case 6
// TODO, support: in (select 1)
{
String sql1 = "explain select k1 from db1.tbl1 where k1 in (select 1) and k2 = 2 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select k1 from db1.tbl1 where k1 in (select 1) and k2 = 2 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
Expand All @@ -634,8 +623,7 @@ public void testEliminatingSortNode() throws Exception {

// fail case 7
{
String sql1 = "explain select k1 from db1.tbl1 where k1 not in (1) and k2 = 2 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select k1 from db1.tbl1 where k1 not in (1) and k2 = 2 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
Expand All @@ -645,63 +633,53 @@ public void testEliminatingSortNode() throws Exception {

// success case 1
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 and k2 = 2 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 = 1 and k2 = 2 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertFalse(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertFalse(plan1.contains("SORT LIMIT:"));
Assertions.assertFalse(plan1.contains("order by:"));
}

// success case 2
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k3 = 3 and k2 = 2 and k1 = 1 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k3 = 3 and k2 = 2 and k1 = 1 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertFalse(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertFalse(plan1.contains("SORT LIMIT:"));
Assertions.assertFalse(plan1.contains("order by:"));
}

// success case 3
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 in (1) and k2 in (2) and k2 !=2 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 in (1) and k2 in (2) and k2 !=2 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertFalse(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertFalse(plan1.contains("SORT LIMIT:"));
Assertions.assertFalse(plan1.contains("order by:"));
}

// success case 4
{
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 in (concat('1','2')) and k2 = 2 order by k1, k2 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
String sql1 = "explain select /*+ SET_VAR(enable_nereids_planner=false) */ k1 from db1.tbl1 where k1 in (concat('1','2')) and k2 = 2 order by k1, k2";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertFalse(plan1.contains("SORT INFO:\n `k1`\n `k2`"));
Assertions.assertFalse(plan1.contains("SORT LIMIT:"));
Assertions.assertFalse(plan1.contains("order by:"));
}

// success case 5
{
String sql1 = "explain select tbl1.k1 from db1.tbl1 join db1.tbl2 on tbl1.k1 = tbl2.k1"
+ " where tbl1.k1 = 1 and tbl2.k1 = 2 and tbl1.k2 = 3 order by tbl1.k1, tbl2.k1 limit "
+ connectContext.getSessionVariable().topnOptLimitThreshold;
+ " where tbl1.k1 = 1 and tbl2.k1 = 2 and tbl1.k2 = 3 order by tbl1.k1, tbl2.k1";
StmtExecutor stmtExecutor1 = new StmtExecutor(connectContext, sql1);
stmtExecutor1.execute();
Planner planner1 = stmtExecutor1.planner();
String plan1 = planner1.getExplainString(new ExplainOptions(false, false));
Assertions.assertFalse(plan1.contains("SORT INFO:"));
Assertions.assertFalse(plan1.contains("SORT LIMIT:"));
Assertions.assertFalse(plan1.contains("order by:"));
}
}
}

0 comments on commit e7dd65f

Please sign in to comment.