You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@calcite.apache.org by vl...@apache.org on 2019/01/03 19:26:05 UTC

[calcite] branch master updated: [CALCITE-2768] PlannerTest ignores top-level order by clause (~RootRel.collation)

This is an automated email from the ASF dual-hosted git repository.

vladimirsitnikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/calcite.git


The following commit(s) were added to refs/heads/master by this push:
     new b54f6de  [CALCITE-2768] PlannerTest ignores top-level order by clause (~RootRel.collation)
b54f6de is described below

commit b54f6de9d7f87e9853fc9ec01b586555a089b913
Author: Vladimir Sitnikov <si...@gmail.com>
AuthorDate: Thu Jan 3 21:58:55 2019 +0300

    [CALCITE-2768] PlannerTest ignores top-level order by clause (~RootRel.collation)
---
 .../calcite/sql/validate/LexCaseSensitiveTest.java |  2 +-
 .../java/org/apache/calcite/tools/PlannerTest.java | 56 ++++++++++++++++------
 2 files changed, 42 insertions(+), 16 deletions(-)

diff --git a/core/src/test/java/org/apache/calcite/sql/validate/LexCaseSensitiveTest.java b/core/src/test/java/org/apache/calcite/sql/validate/LexCaseSensitiveTest.java
index 589a466..d315269 100644
--- a/core/src/test/java/org/apache/calcite/sql/validate/LexCaseSensitiveTest.java
+++ b/core/src/test/java/org/apache/calcite/sql/validate/LexCaseSensitiveTest.java
@@ -70,7 +70,7 @@ public class LexCaseSensitiveTest {
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).rel;
     RelTraitSet traitSet =
-        planner.getEmptyTraitSet().replace(EnumerableConvention.INSTANCE);
+        convert.getTraitSet().replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     assertThat(transform, instanceOf(EnumerableProject.class));
     List<String> fieldNames = transform.getRowType().getFieldNames();
diff --git a/core/src/test/java/org/apache/calcite/tools/PlannerTest.java b/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
index 3b68d16..7bd85b6 100644
--- a/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
+++ b/core/src/test/java/org/apache/calcite/tools/PlannerTest.java
@@ -361,7 +361,7 @@ public class PlannerTest {
     SqlNode parse = planner.parse("select * from \"emps\"");
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).project();
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     assertThat(toString(transform),
@@ -424,14 +424,26 @@ public class PlannerTest {
         + "      EnumerableTableScan(table=[[hr, emps]])\n");
   }
 
+  @Test public void testTwoSortDontRemove() throws Exception {
+    runDuplicateSortCheck("select empid+deptno from ( "
+        + "select empid, deptno "
+        + "from emps "
+        + "order by empid) "
+        + "order by deptno",
+        "EnumerableSort(sort0=[$1], dir0=[ASC])\n"
+        + "  EnumerableProject(EXPR$0=[+($0, $1)], deptno=[$1])\n"
+        + "    EnumerableSort(sort0=[$0], dir0=[ASC])\n"
+        + "      EnumerableProject(empid=[$0], deptno=[$1])\n"
+        + "        EnumerableTableScan(table=[[hr, emps]])\n");
+  }
+
   /** Tests that outer order by is not removed since window function
    * might reorder the rows in-between */
-  @Ignore("RelOptPlanner$CannotPlanException: Node [rel#27:Subset#6"
-      + ".ENUMERABLE.[]] could not be implemented; planner state:\n"
+  @Ignore("Node [rel#22:Subset#3.ENUMERABLE.[2]] could not be implemented; planner state:\n"
       + "\n"
-      + "Root: rel#27:Subset#6.ENUMERABLE.[]")
+      + "Root: rel#22:Subset#3.ENUMERABLE.[2]")
   @Test public void testDuplicateSortPlanWithOver() throws Exception {
-    runDuplicateSortCheck("select empid+deptno from ( "
+    runDuplicateSortCheck("select emp_cnt, empid+deptno from ( "
         + "select empid, deptno, count(*) over (partition by deptno) emp_cnt from ( "
         + "  select empid, deptno "
         + "    from emps "
@@ -448,6 +460,20 @@ public class PlannerTest {
         + "              EnumerableTableScan(table=[[hr, emps]])\n");
   }
 
+  @Test public void testDuplicateSortPlanWithRemovedOver() throws Exception {
+    runDuplicateSortCheck("select empid+deptno from ( "
+        + "select empid, deptno, count(*) over (partition by deptno) emp_cnt from ( "
+        + "  select empid, deptno "
+        + "    from emps "
+        + "   order by emps.deptno) "
+        + ")"
+        + "order by deptno",
+        "EnumerableProject(EXPR$0=[+($0, $1)], deptno=[$1])\n"
+        + "  EnumerableSort(sort0=[$1], dir0=[ASC])\n"
+        + "    EnumerableProject(empid=[$0], deptno=[$1])\n"
+        + "      EnumerableTableScan(table=[[hr, emps]])\n");
+  }
+
   // If proper "SqlParseException, ValidationException, RelConversionException"
   // is used, then checkstyle fails with
   // "Redundant throws: 'ValidationException' listed more then one time"
@@ -466,7 +492,7 @@ public class PlannerTest {
     SqlNode parse = planner.parse(sql);
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).rel;
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     if (traitSet.getTrait(RelCollationTraitDef.INSTANCE) == null) {
       // SortRemoveRule can only work if collation trait is enabled.
@@ -492,7 +518,7 @@ public class PlannerTest {
             + "order by \"deptno\"");
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).rel;
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     assertThat(toString(transform),
@@ -520,7 +546,7 @@ public class PlannerTest {
     SqlNode parse = planner.parse("select * from \"emps\"");
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).project();
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     assertThat(toString(transform),
@@ -540,7 +566,7 @@ public class PlannerTest {
     SqlNode parse = planner.parse("select * from \"emps\"");
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).project();
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     RelNode transform2 = planner.transform(0, traitSet, transform);
@@ -594,7 +620,7 @@ public class PlannerTest {
     SqlNode parse = planner.parse("select * from \"emps\"");
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).rel;
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     RelNode transform2 = planner.transform(1, traitSet, transform);
@@ -644,10 +670,10 @@ public class PlannerTest {
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).project();
 
-    RelTraitSet traitSet0 = planner.getEmptyTraitSet()
+    RelTraitSet traitSet0 = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
 
-    RelTraitSet traitSet1 = planner.getEmptyTraitSet()
+    RelTraitSet traitSet1 = convert.getTraitSet()
         .replace(out);
 
     RelNode transform = planner.transform(0, traitSet0, convert);
@@ -704,7 +730,7 @@ public class PlannerTest {
 
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).project();
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     assertThat(toString(transform),
@@ -786,7 +812,7 @@ public class PlannerTest {
     SqlNode parse = planner.parse(sql);
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).rel;
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     assertThat(toString(transform), containsString(expected));
@@ -936,7 +962,7 @@ public class PlannerTest {
 
     SqlNode validate = planner.validate(parse);
     RelNode convert = planner.rel(validate).project();
-    RelTraitSet traitSet = planner.getEmptyTraitSet()
+    RelTraitSet traitSet = convert.getTraitSet()
         .replace(EnumerableConvention.INSTANCE);
     RelNode transform = planner.transform(0, traitSet, convert);
     assertThat(toString(transform), containsString(expected));