You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by ni...@apache.org on 2020/02/07 14:26:07 UTC
[kylin] 12/44: KYLIN-4237 Return error when execute "explain plan
for SQL" to get the execution plan of SQL
This is an automated email from the ASF dual-hosted git repository.
nic pushed a commit to branch 3.0.x
in repository https://gitbox.apache.org/repos/asf/kylin.git
commit a9945ca8d11ab0960c30ba9757425f006567db0a
Author: yaqian.zhang <59...@qq.com>
AuthorDate: Mon Nov 4 19:50:20 2019 +0800
KYLIN-4237 Return error when execute "explain plan for SQL" to get the execution plan of SQL
---
.../org/apache/kylin/query/util/QueryUtil.java | 16 ++++++----
.../org/apache/kylin/query/util/QueryUtilTest.java | 35 ++++++++++++++++++++++
2 files changed, 46 insertions(+), 5 deletions(-)
diff --git a/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java b/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
index 30db7e1..a17c578 100644
--- a/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
+++ b/query/src/main/java/org/apache/kylin/query/util/QueryUtil.java
@@ -52,15 +52,21 @@ public class QueryUtil {
static final String KEYWORD_WITH = "with";
static final String KEYWORD_EXPLAIN = "explain";
- private static String appendLimitOffsetToSql(String sql, int limit, int offset) {
+ public static String appendLimitOffsetToSql(String sql, int limit, int offset) {
String retSql = sql;
+ String prefixSql = "select * from (";
+ String suffixSql = ")";
+ if (sql.startsWith(KEYWORD_EXPLAIN)) {
+ prefixSql = "";
+ suffixSql = "";
+ }
if (0 != limit && 0 != offset) {
- retSql = "select * from (" + sql + ") limit " + String.valueOf(limit) +
- " offset " + String.valueOf(offset);
+ retSql = prefixSql + sql + suffixSql + " limit " + String.valueOf(limit) + " offset "
+ + String.valueOf(offset);
} else if (0 == limit && 0 != offset) {
- retSql = "select * from (" + sql + ") offset " + String.valueOf(offset);
+ retSql = prefixSql + sql + suffixSql + " offset " + String.valueOf(offset);
} else if (0 != limit && 0 == offset) {
- retSql = "select * from (" + sql + ") limit " + String.valueOf(limit);
+ retSql = prefixSql + sql + suffixSql + " limit " + String.valueOf(limit);
} else {
// do nothing
}
diff --git a/query/src/test/java/org/apache/kylin/query/util/QueryUtilTest.java b/query/src/test/java/org/apache/kylin/query/util/QueryUtilTest.java
index ffd169d..9b769b8 100644
--- a/query/src/test/java/org/apache/kylin/query/util/QueryUtilTest.java
+++ b/query/src/test/java/org/apache/kylin/query/util/QueryUtilTest.java
@@ -40,6 +40,41 @@ public class QueryUtilTest extends LocalFileMetadataTestCase {
}
@Test
+ public void testappendLimitOffsetToSql() {
+ {
+ String sql = "select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact";
+ String newsql = QueryUtil.appendLimitOffsetToSql(sql, 100, 100);
+ Assert.assertEquals(
+ "select * from (select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact) limit 100 offset 100",
+ newsql);
+ }
+
+ {
+ String sql = "select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact";
+ String newsql = QueryUtil.appendLimitOffsetToSql(sql, 0, 0);
+ Assert.assertEquals(
+ "select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact",
+ newsql);
+ }
+
+ {
+ String sql = "explain plan for select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact";
+ String newsql = QueryUtil.appendLimitOffsetToSql(sql, 100, 100);
+ Assert.assertEquals(
+ "explain plan for select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact limit 100 offset 100",
+ newsql);
+ }
+
+ {
+ String sql = "explain plan for select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact";
+ String newsql = QueryUtil.appendLimitOffsetToSql(sql, 0, 0);
+ Assert.assertEquals(
+ "explain plan for select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact",
+ newsql);
+ }
+ }
+
+ @Test
public void testMassageSql() {
{
String sql = "select ( date '2001-09-28' + interval floor(1.2) day) from test_kylin_fact";