DRILL-7490: LIMIT is not pushed to JDBC storage plugin

closes #1936
diff --git a/contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcPluginWithMySQLIT.java b/contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcPluginWithMySQLIT.java
index bd065ca..6253d11 100644
--- a/contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcPluginWithMySQLIT.java
+++ b/contrib/storage-jdbc/src/test/java/org/apache/drill/exec/store/jdbc/TestJdbcPluginWithMySQLIT.java
@@ -37,10 +37,7 @@
 
 import java.math.BigDecimal;
 
-import static org.hamcrest.CoreMatchers.containsString;
-import static org.hamcrest.core.IsNot.not;
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
 
 /**
  * JDBC storage plugin tests against MySQL.
@@ -195,11 +192,12 @@
   @Test
   public void pushdownJoin() throws Exception {
     String query = "select x.person_id from (select person_id from mysql.`drill_mysql_test`.person) x "
-            + "join (select person_id from mysql.`drill_mysql_test`.person) y on x.person_id = y.person_id ";
-    String plan = queryBuilder().sql(query).explainText();
-
-    assertThat("Query plan shouldn't contain Join operator",
-        plan, not(containsString("Join")));
+            + "join (select person_id from mysql.`drill_mysql_test`.person) y on x.person_id = y.person_id";
+    queryBuilder()
+        .sql(query)
+        .planMatcher()
+        .exclude("Join")
+        .match();
   }
 
   @Test
@@ -211,12 +209,11 @@
             "ON e.first_name = s.first_name " +
             "WHERE e.last_name > 'hello'";
 
-    String plan = queryBuilder().sql(query).explainText();
-
-    assertThat("Query plan shouldn't contain Join operator",
-        plan, not(containsString("Join")));
-    assertThat("Query plan shouldn't contain Filter operator",
-        plan, not(containsString("Filter")));
+    queryBuilder()
+        .sql(query)
+        .planMatcher()
+        .exclude("Join", "Filter")
+        .match();
   }
 
   @Test
@@ -341,4 +338,15 @@
         .baselineValuesForSingleColumn("SYSTEM VIEW", "TABLE", "VIEW")
         .go();
   }
+
+  @Test
+  public void testLimitPushDown() throws Exception {
+    String query = "select person_id from mysql.`drill_mysql_test`.person limit 10";
+    queryBuilder()
+        .sql(query)
+        .planMatcher()
+        .include("Jdbc\\(.*LIMIT 10")
+        .exclude("Limit\\(")
+        .match();
+  }
 }
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/cost/DrillRelMdRowCount.java b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/cost/DrillRelMdRowCount.java
index a24f5d1..0bfb70a 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/cost/DrillRelMdRowCount.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/cost/DrillRelMdRowCount.java
@@ -18,12 +18,9 @@
 package org.apache.drill.exec.planner.cost;
 
 import java.io.IOException;
-import org.apache.calcite.rel.SingleRel;
 import org.apache.calcite.rel.core.Aggregate;
 import org.apache.calcite.rel.core.Filter;
 import org.apache.calcite.rel.core.Join;
-import org.apache.calcite.rel.core.Project;
-import org.apache.calcite.rel.core.Sort;
 import org.apache.calcite.rel.core.TableScan;
 import org.apache.calcite.rel.core.Union;
 import org.apache.calcite.rel.metadata.ReflectiveRelMetadataProvider;
@@ -59,7 +56,7 @@
           ((AggPrelBase) rel).getOperatorPhase() == AggPrelBase.OperatorPhase.PHASE_1of2) {
       // Phase 1 Aggregate would return rows in the range [NDV, input_rows]. Hence, use the
       // existing estimate of 1/10 * input_rows
-        Double rowCount = mq.getRowCount(rel.getInput()) / 10;
+        double rowCount = mq.getRowCount(rel.getInput()) / 10;
         Double ndv = mq.getDistinctRowCount(rel.getInput(), groupKey, null);
         // Use max of NDV and input_rows/10
         if (ndv != null) {
@@ -83,21 +80,6 @@
   }
 
   @Override
-  public Double getRowCount(Project rel, RelMetadataQuery mq) {
-    return rel.estimateRowCount(mq);
-  }
-
-  @Override
-  public Double getRowCount(Sort rel, RelMetadataQuery mq) {
-    return rel.estimateRowCount(mq);
-  }
-
-  @Override
-  public Double getRowCount(SingleRel rel, RelMetadataQuery mq) {
-    return rel.estimateRowCount(mq);
-  }
-
-  @Override
   public Double getRowCount(Join rel, RelMetadataQuery mq) {
     return rel.estimateRowCount(mq);
   }