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 <[email protected]> Authored: Fri Aug 18 18:15:31 2017 -0700 Committer: Hung Tran <[email protected]> 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); } }
