hqx871 commented on a change in pull request #2363:
URL: https://github.com/apache/calcite/pull/2363#discussion_r591511306
##########
File path: core/src/test/java/org/apache/calcite/test/RelMetadataTest.java
##########
@@ -3412,4 +3414,41 @@ public String colType(RelNode rel, int column) {
assertThat(columnOrigin.getOriginTable().getRowType().getFieldNames().get(5),
equalTo("SAL"));
}
+
+ @Test void testSortCpuCostOffsetLimit() {
+ final String sql = "select ename from emp order by ename limit 5 offset 5";
+ double cpuCost = EMP_SIZE * Math.log(10) * 4;
+ checkCpuCost(sql, cpuCost, "offset + fetch smaller than table size "
+ + "=> cpu cost should be: input_size * log(offset + fetch) *
row_bytes");
+ }
+
+ @Test void testSortCpuCostLimit() {
+ final String sql = "select ename from emp limit 10";
+ checkCpuCost(sql, 0d, "no order by clause => cpu cost should be 0");
+ }
+
+ @Test void testSortCpuCostLimit0() {
+ final String sql = "select ename from emp order by ename limit 0";
+ checkCpuCost(sql, 0d, "fetch zero => cpu cost should be 0");
+ }
+
+ @Test void testSortCpuCostLargeLimit() {
+ final String sql = "select ename from emp order by ename limit 10000";
+ double cpuCost = EMP_SIZE * Math.log(EMP_SIZE) * 4;
+ checkCpuCost(sql, cpuCost, "sort limit exceeds table size "
+ + "=> cpu cost should be dominated by table size");
+ }
+
+ private void checkCpuCost(String sql, double expected, String reason) {
+ RelNode rel = convertSql(sql);
+ RelOptCost cost = computeRelSelfCost(rel);
+ final double result = cost.getCpu();
+ assertEquals(expected, result, reason);
Review comment:
I will do it.
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
[email protected]