You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@gobblin.apache.org by hu...@apache.org on 2017/08/19 01:15:37 UTC

incubator-gobblin git commit: [GOBBLIN-215] Fix the hasJoinOperation when SQL statement has limit

Repository: incubator-gobblin
Updated Branches:
  refs/heads/master eae5e6d26 -> d6ac23609


[GOBBLIN-215] Fix the hasJoinOperation when SQL statement has limit

Closes #2050 from yukuai518/sql


Project: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/commit/d6ac2360
Tree: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/tree/d6ac2360
Diff: http://git-wip-us.apache.org/repos/asf/incubator-gobblin/diff/d6ac2360

Branch: refs/heads/master
Commit: d6ac2360978bb1dd2789a97ac7f6e5b50ab190fd
Parents: eae5e6d
Author: Kuai Yu <ku...@linkedin.com>
Authored: Fri Aug 18 18:15:31 2017 -0700
Committer: Hung Tran <hu...@linkedin.com>
Committed: Fri Aug 18 18:15:31 2017 -0700

----------------------------------------------------------------------
 .../apache/gobblin/source/jdbc/JdbcExtractor.java    | 15 ++++++++++++---
 .../gobblin/source/jdbc/JdbcExtractorTest.java       | 12 ++++++++++++
 2 files changed, 24 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/d6ac2360/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcExtractor.java
----------------------------------------------------------------------
diff --git a/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcExtractor.java b/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcExtractor.java
index a6cf8a1..b68036c 100644
--- a/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcExtractor.java
+++ b/gobblin-modules/gobblin-sql/src/main/java/org/apache/gobblin/source/jdbc/JdbcExtractor.java
@@ -39,6 +39,7 @@ import java.util.Map;
 
 import org.apache.calcite.sql.SqlKind;
 import org.apache.calcite.sql.SqlNode;
+import org.apache.calcite.sql.SqlOrderBy;
 import org.apache.calcite.sql.SqlSelect;
 import org.apache.calcite.sql.parser.SqlParseException;
 import org.apache.calcite.sql.parser.SqlParser;
@@ -1167,9 +1168,17 @@ public abstract class JdbcExtractor extends QueryBasedExtractor<JsonArray, JsonE
 
     SqlParser sqlParser = SqlParser.create(selectQuery);
     try {
-      SqlSelect sqlSelect = (SqlSelect)sqlParser.parseQuery();
-      SqlNode node = sqlSelect.getFrom();
-      return node.getKind() == SqlKind.JOIN;
+
+      SqlNode all = sqlParser.parseQuery();
+      SqlSelect query;
+      if (all instanceof SqlSelect) {
+        query = (SqlSelect) all;
+      } else if (all instanceof SqlOrderBy) {
+        query = (SqlSelect) ((SqlOrderBy) all).query;
+      } else {
+        throw new UnsupportedOperationException("The select query is type of " + all.getClass() + " which is not supported here");
+      }
+      return query.getFrom().getKind() == SqlKind.JOIN;
     } catch (SqlParseException e) {
       return false;
     }

http://git-wip-us.apache.org/repos/asf/incubator-gobblin/blob/d6ac2360/gobblin-modules/gobblin-sql/src/test/java/org/apache/gobblin/source/jdbc/JdbcExtractorTest.java
----------------------------------------------------------------------
diff --git a/gobblin-modules/gobblin-sql/src/test/java/org/apache/gobblin/source/jdbc/JdbcExtractorTest.java b/gobblin-modules/gobblin-sql/src/test/java/org/apache/gobblin/source/jdbc/JdbcExtractorTest.java
index c6d53f1..53c35df 100644
--- a/gobblin-modules/gobblin-sql/src/test/java/org/apache/gobblin/source/jdbc/JdbcExtractorTest.java
+++ b/gobblin-modules/gobblin-sql/src/test/java/org/apache/gobblin/source/jdbc/JdbcExtractorTest.java
@@ -131,6 +131,10 @@ public class JdbcExtractorTest {
     Assert.assertTrue(result);
     result = JdbcExtractor.hasJoinOperation("select a.fromLoc from a , b");
     Assert.assertTrue(result);
+    result = JdbcExtractor.hasJoinOperation("select a.fromLoc from a , b  limit 100");
+    Assert.assertTrue(result);
+    result = JdbcExtractor.hasJoinOperation("select a.fromLoc from a limit 100");
+    Assert.assertFalse(result);
     result = JdbcExtractor.hasJoinOperation("select a.fromLoc from a ,     b");
     Assert.assertTrue(result);
 
@@ -139,10 +143,18 @@ public class JdbcExtractorTest {
     Assert.assertFalse(result);
     result = JdbcExtractor.hasJoinOperation("select a.fromLoc from a where a.id=\"hello,world\"");
     Assert.assertFalse(result);
+    result = JdbcExtractor.hasJoinOperation("select a.fromLoc from a where a.id=\"hello,world\" limit 100");
+    Assert.assertFalse(result);
 
     // complex query
     result = JdbcExtractor.hasJoinOperation(
         "select a.fromLoc from (Select dest as fromLoc, id from b) as a, c where a.id < c.id");
     Assert.assertTrue(result);
+    result = JdbcExtractor.hasJoinOperation(
+        "select a.fromLoc from (Select dest as fromLoc, id from b) as a, c where a.id < c.id limit 10");
+    Assert.assertTrue(result);
+    result = JdbcExtractor.hasJoinOperation(
+        "select a.fromLoc from (Select dest as fromLoc, id from b) as a limit 10");
+    Assert.assertFalse(result);
   }
 }