DRILL-8237: Limit is not pushed down to scan for MSSQL (#2564)
diff --git a/contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcPluginWithMSSQL.java b/contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcPluginWithMSSQL.java
index c759dfe..fb59026 100644
--- a/contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcPluginWithMSSQL.java
+++ b/contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcPluginWithMSSQL.java
@@ -32,7 +32,6 @@
import org.junit.AfterClass;
import org.junit.Assume;
import org.junit.BeforeClass;
-import org.junit.Ignore;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.testcontainers.containers.MSSQLServerContainer;
@@ -50,7 +49,7 @@
@Category(JdbcStorageTest.class)
public class TestJdbcPluginWithMSSQL extends ClusterTest {
- private static MSSQLServerContainer jdbcContainer;
+ private static MSSQLServerContainer<?> jdbcContainer;
@BeforeClass
public static void initMSSQL() throws Exception {
@@ -317,8 +316,6 @@
}
@Test
- @Ignore
- // TODO: Enable once the push down logic has been clarified.
public void testLimitPushDownWithOffset() throws Exception {
String query = "select person_id, first_name from mssql.dbo.person limit 100 offset 10";
queryBuilder()
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/store/enumerable/plan/DrillJdbcSort.java b/exec/java-exec/src/main/java/org/apache/drill/exec/store/enumerable/plan/DrillJdbcSort.java
index 1f15ce3..a1ab014 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/store/enumerable/plan/DrillJdbcSort.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/store/enumerable/plan/DrillJdbcSort.java
@@ -42,7 +42,8 @@
double numRows = mq.getRowCount(this);
double cpuCost = DrillCostBase.COMPARE_CPU_COST * numRows;
DrillCostBase.DrillCostFactory costFactory = (DrillCostBase.DrillCostFactory) planner.getCostFactory();
- return costFactory.makeCost(numRows, cpuCost, 0, 0);
+ // adjust cost to handle the case when the original limit was split
+ return costFactory.makeCost(numRows, cpuCost, 0, 0).multiplyBy(0.1);
}
return super.computeSelfCost(planner, mq);
}