You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by li...@apache.org on 2017/09/01 02:54:39 UTC
[03/50] [abbrv] kylin git commit: minor,
fix getFromNode when SQL has limit/order by clause
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/2eca43c4
Tree: http://git-wip-us.apache.org/repos/asf/kylin/tree/2eca43c4
Diff: http://git-wip-us.apache.org/repos/asf/kylin/diff/2eca43c4
Branch: refs/heads/master
Commit: 2eca43c40723cce0f12a56a1299894bbf5803d03
Parents: c8bab3d
Author: Jiatao Tao <24...@qq.com>
Authored: Mon Aug 14 05:05:31 2017 -0500
Committer: GitHub <no...@github.com>
Committed: Mon Aug 14 05:05:31 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/2eca43c4/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/2eca43c4/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 b2248f8..51352d2 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
@@ -112,6 +112,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/2eca43c4/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"));