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);
}
}