wojustme commented on a change in pull request #2702:
URL: https://github.com/apache/calcite/pull/2702#discussion_r811647693



##########
File path: 
core/src/test/java/org/apache/calcite/test/MaterializedViewSubstitutionVisitorTest.java
##########
@@ -1259,6 +1259,259 @@ protected final MaterializedViewFixture sql(String 
materialize,
     sql(mv, query).ok();
   }
 
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[null, null], query[null, 3].
+   */
+  @Test void testSortToSort1() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "fetch next 3 rows only";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "LogicalSort(fetch=[3])\n"
+            + "  EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[null, null], query[2, 3].
+   */
+  @Test void testSortToSort2() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 2 rows\n"
+        + "fetch next 3 rows only";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "LogicalSort(offset=[2], fetch=[3])\n"
+            + "  EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[2, null], query[3, null]
+   */
+  @Test void testSortToSort3() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 2 rows";
+    final String query = ""

Review comment:
       `order by name`?
   You want to see an no-match test case?

##########
File path: 
core/src/test/java/org/apache/calcite/test/MaterializedViewSubstitutionVisitorTest.java
##########
@@ -1259,6 +1259,259 @@ protected final MaterializedViewFixture sql(String 
materialize,
     sql(mv, query).ok();
   }
 
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[null, null], query[null, 3].
+   */
+  @Test void testSortToSort1() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "fetch next 3 rows only";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "LogicalSort(fetch=[3])\n"
+            + "  EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[null, null], query[2, 3].
+   */
+  @Test void testSortToSort2() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 2 rows\n"
+        + "fetch next 3 rows only";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "LogicalSort(offset=[2], fetch=[3])\n"
+            + "  EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[2, null], query[3, null]
+   */
+  @Test void testSortToSort3() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 2 rows";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 3 rows";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "LogicalSort(offset=[1])\n"
+            + "  EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[null, 2], query[null, 2]
+   */
+  @Test void testSortToSort4() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "fetch next 3 rows only";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 0 rows\n"
+        + "fetch next 3 rows only";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It needn't be matched, info of offset and fetch.
+   * eg: mv[6, null], query[3, null].
+   */
+  @Test void testSortToSort5() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 6 rows";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 3 rows";
+    sql(mv, query).noMat();
+  }
+
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[2, null], query[3, 3].
+   */
+  @Test void testSortToSort6() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 2 rows";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 3 rows\n"
+        + "fetch next 3 rows only";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "LogicalSort(offset=[1], fetch=[3])\n"
+            + "  EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It need be matched, info of offset and fetch.
+   * eg: mv[2, 10], query[3, 3]
+   */
+  @Test void testSortToSort7() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 2 rows\n"
+        + "fetch next 10 rows only";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 3 rows\n"
+        + "fetch next 3 rows only";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "LogicalSort(offset=[1], fetch=[3])\n"
+            + "  EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It needn't be matched, info of offset and fetch.
+   * eg: mv[5, 10], query[3, 3]
+   */
+  @Test void testSortToSort8() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 5 rows\n"
+        + "fetch next 10 rows only";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"\n"
+        + "offset 3 rows\n"
+        + "fetch next 3 rows only";
+    sql(mv, query).noMat();
+  }
+
+  /**
+   * It need be matched, query has direction's info, which cloud rebuild by mv.
+   */
+  @Test void testSortToSort9() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\"";
+    final String query = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"
+        + "order by \"deptno\" desc";
+    sql(mv, query)
+        .checkingThatResultContains(""
+            + "LogicalSort(sort0=[$1], dir0=[DESC])\n"
+            + "  EnumerableTableScan(table=[[hr, MV0]])")
+        .ok();
+  }
+
+  /**
+   * It need be matched, query has direction's info, which cloud rebuild by mv.
+   * And query also has the info of offset and fetch.
+   */
+  @Test void testSortToSort10() {
+    final String mv = ""
+        + "select \"name\", \"deptno\"\n"
+        + "from \"emps\"\n"

Review comment:
       Got it, I add multiple-columns-sort test case.




-- 
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]


Reply via email to