From 866b615dc19908151c2e881556e1351ba51cf6f5 Mon Sep 17 00:00:00 2001 From: "peng.jianhua" Date: Wed, 20 Dec 2017 16:57:35 +0800 Subject: [PATCH 1/1] KYLIN-3119 A few bugs in the function 'massageSql' of 'QueryUtil.java' --- .../java/org/apache/kylin/query/util/QueryUtil.java | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 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 377ca89b6..0319a7ad2 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 @@ -46,17 +46,23 @@ public class QueryUtil { sql = sql.replace("\r", " ").replace("\n", System.getProperty("line.separator")); KylinConfig kylinConfig = KylinConfig.getInstanceFromEnv(); + sql = removeCommentInSql(sql); + final String suffixPattern = "^.+?\\s(limit\\s\\d+)?\\s(offset\\s\\d+)?\\s*$"; + sql = sql.replaceAll("\\s+", " "); + Pattern pattern = Pattern.compile(suffixPattern); + Matcher matcher = pattern.matcher(sql.toLowerCase() + " "); + while (sql.endsWith(";")) sql = sql.substring(0, sql.length() - 1); - if (limit > 0 && !sql.toLowerCase().contains("limit")) { - sql += ("\nLIMIT " + limit); - } - - if (offset > 0 && !sql.toLowerCase().contains("offset")) { - sql += ("\nOFFSET " + offset); + if (matcher.find()) { + if (limit > 0 && matcher.group(1) == null) { + sql += ("\nLIMIT " + limit); + } + if (offset > 0 && matcher.group(2) == null) { + sql += ("\nOFFSET " + offset); + } } - // https://issues.apache.org/jira/browse/KYLIN-2649 if (kylinConfig.getForceLimit() > 0 && !sql.toLowerCase().contains("limit") && sql.toLowerCase().contains("*")) { -- 2.11.0.windows.1