Kap 2.4.x (#1929) * #1916 adjust check password's position when save user
* minor, fix getFromNode when SQL has limit/order by clause Project: http://git-wip-us.apache.org/repos/asf/kylin/repo Commit: http://git-wip-us.apache.org/repos/asf/kylin/commit/72ae6f7b Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/72ae6f7b Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/72ae6f7b Branch: refs/heads/2.1.x Commit: 72ae6f7bce4ca3b3da51c8f2cd4a8836b5c2deac Parents: 2de95a9 Author: Jiatao Tao <245915...@qq.com> Authored: Tue Aug 15 22:39:19 2017 -0500 Committer: GitHub <nore...@github.com> Committed: Tue Aug 15 22:39:19 2017 -0500 ---------------------------------------------------------------------- .../metadata/model/tool/CalciteParser.java | 20 ++++++++++++++------ .../apache/kylin/query/util/PushDownUtil.java | 4 ++++ .../kylin/query/util/PushDownUtilTest.java | 10 +++++----- 3 files changed, 23 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/kylin/blob/72ae6f7b/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java ---------------------------------------------------------------------- diff --git a/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java b/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java index a48abae..01f0b19 100644 --- a/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java +++ b/core-metadata/src/main/java/org/apache/kylin/metadata/model/tool/CalciteParser.java @@ -29,6 +29,7 @@ import org.apache.calcite.sql.SqlIdentifier; import org.apache.calcite.sql.SqlLiteral; import org.apache.calcite.sql.SqlNode; import org.apache.calcite.sql.SqlNodeList; +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; @@ -69,14 +70,21 @@ public class CalciteParser { } public static SqlNode getFromNode(String sql) { - //When the sql have limit clause, calcite will parse it as a SqlOrder Object. - sql = sql.split("LIMIT")[0]; - SqlNode fromNode = null; + SqlNode node = null; try { - fromNode = ((SqlSelect) (CalciteParser.parse(sql))).getFrom(); + node = CalciteParser.parse(sql); } catch (SqlParseException e) { - throw new RuntimeException("Failed to parse expression \'" + sql - + "\', please make sure the expression is valid"); + throw new RuntimeException( + "Failed to parse expression \'" + sql + "\', please make sure the expression is valid"); + } + //When the sql have limit clause, calcite will parse it as a SqlOrder Object. + SqlNode fromNode = null; + if (node instanceof SqlOrderBy) { + SqlOrderBy orderBy = (SqlOrderBy) node; + fromNode = ((SqlSelect) orderBy.query).getFrom(); + } else { + SqlSelect sqlSelect = (SqlSelect) node; + fromNode = sqlSelect.getFrom(); } return fromNode; } http://git-wip-us.apache.org/repos/asf/kylin/blob/72ae6f7b/query/src/main/java/org/apache/kylin/query/util/PushDownUtil.java ---------------------------------------------------------------------- diff --git a/query/src/main/java/org/apache/kylin/query/util/PushDownUtil.java b/query/src/main/java/org/apache/kylin/query/util/PushDownUtil.java index 3edd899..1a9115e 100644 --- a/query/src/main/java/org/apache/kylin/query/util/PushDownUtil.java +++ b/query/src/main/java/org/apache/kylin/query/util/PushDownUtil.java @@ -111,6 +111,10 @@ public class PushDownUtil { FromTablesVisitor ftv = new FromTablesVisitor(); fromNode.accept(ftv); List<SqlNode> tablesWithoutSchema = ftv.getTablesWithoutSchema(); + // sql do not need completion + if (tablesWithoutSchema.isEmpty()) { + return inputSql; + } List<Pair<Integer, Integer>> tablesPos = new ArrayList<>(); for (SqlNode tables : tablesWithoutSchema) { http://git-wip-us.apache.org/repos/asf/kylin/blob/72ae6f7b/query/src/test/java/org/apache/kylin/query/util/PushDownUtilTest.java ---------------------------------------------------------------------- diff --git a/query/src/test/java/org/apache/kylin/query/util/PushDownUtilTest.java b/query/src/test/java/org/apache/kylin/query/util/PushDownUtilTest.java index e2ccd9e..8ed58f7 100644 --- a/query/src/test/java/org/apache/kylin/query/util/PushDownUtilTest.java +++ b/query/src/test/java/org/apache/kylin/query/util/PushDownUtilTest.java @@ -25,12 +25,12 @@ import org.mockito.Mockito; public class PushDownUtilTest { @Test public void testSchemaCompletion() { - String sql1 = "SELECT a \n"+ + String sql1 = "SELECT a \n" + "FROM a.KYLIN_SALES as KYLIN_SALES\n" + "INNER JOIN \"A\".KYLIN_ACCOUNT as BUYER_ACCOUNT\n" + "ON KYLIN_SALES.BUYER_ID = BUYER_ACCOUNT.ACCOUNT_ID\n" + "INNER JOIN \"KYLIN_COUNTRY\" as BUYER_COUNTRY\n" + - "ON BUYER_ACCOUNT.ACCOUNT_COUNTRY = BUYER_COUNTRY.COUNTRY"; + "ON BUYER_ACCOUNT.ACCOUNT_COUNTRY = BUYER_COUNTRY.COUNTRY LIMIT 5"; String sql2 = "select * from DB2.t,DB2.tt,ttt"; String sql3 = "SELECT t1.week_beg_dt, t1.sum_price, t2.cnt\n" + @@ -56,14 +56,14 @@ public class PushDownUtilTest { " ON test_kylin_fact.lstg_site_id = test_sites.site_id\n" + " group by test_cal_dt.week_beg_dt\n" + ") t2\n" + - "on t1.week_beg_dt=t2.week_beg_dt"; + "on t1.week_beg_dt=t2.week_beg_dt limit 5"; String exceptSQL1 = "SELECT a \n" + "FROM a.KYLIN_SALES as KYLIN_SALES\n" + "INNER JOIN \"A\".KYLIN_ACCOUNT as BUYER_ACCOUNT\n" + "ON KYLIN_SALES.BUYER_ID = BUYER_ACCOUNT.ACCOUNT_ID\n" + "INNER JOIN EDW.\"KYLIN_COUNTRY\" as BUYER_COUNTRY\n" + - "ON BUYER_ACCOUNT.ACCOUNT_COUNTRY = BUYER_COUNTRY.COUNTRY"; + "ON BUYER_ACCOUNT.ACCOUNT_COUNTRY = BUYER_COUNTRY.COUNTRY LIMIT 5"; String exceptSQL2 = "select * from DB2.t,DB2.tt,EDW.ttt"; @@ -90,7 +90,7 @@ public class PushDownUtilTest { " ON test_kylin_fact.lstg_site_id = test_sites.site_id\n" + " group by test_cal_dt.week_beg_dt\n" + ") t2\n" + - "on t1.week_beg_dt=t2.week_beg_dt"; + "on t1.week_beg_dt=t2.week_beg_dt limit 5"; Assert.assertEquals(exceptSQL1, PushDownUtil.schemaCompletion(sql1, "EDW")); Assert.assertEquals(exceptSQL2, PushDownUtil.schemaCompletion(sql2, "EDW")); Assert.assertEquals(exceptSQL3, PushDownUtil.schemaCompletion(sql3, "EDW"));