You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by sh...@apache.org on 2018/10/24 06:47:41 UTC

[kylin] branch master updated: KYLIN-3620 resolve "--" is treated as comment marker between singe quotes

This is an automated email from the ASF dual-hosted git repository.

shaofengshi pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/kylin.git


The following commit(s) were added to refs/heads/master by this push:
     new 9c3165a  KYLIN-3620 resolve "--" is treated as comment marker between singe quotes
9c3165a is described below

commit 9c3165a1e10a830b48463a23aa26419986b5abfa
Author: Lijun Cao <64...@qq.com>
AuthorDate: Sun Oct 21 15:14:03 2018 +0800

    KYLIN-3620 resolve "--" is treated as comment marker between singe quotes
---
 .../org/apache/kylin/query/util/QueryUtil.java     |  2 +-
 .../org/apache/kylin/query/util/QueryUtilTest.java | 52 +++++++++++++++++++++-
 2 files changed, 51 insertions(+), 3 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 1e7498b..5aad5e0 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
@@ -184,7 +184,7 @@ public class QueryUtil {
 
     public static String removeCommentInSql(String sql1) {
         // match two patterns, one is "-- comment", the other is "/* comment */"
-        final String[] commentPatterns = new String[] { "--[^\r\n]*", "/\\*[\\s\\S]*?\\*/" };
+        final String[] commentPatterns = new String[]{"--(?!.*\\*/).*?[\r\n]", "/\\*(.|\r|\n)*?\\*/"};
 
         for (int i = 0; i < commentPatterns.length; i++) {
             sql1 = sql1.replaceAll(commentPatterns[i], "");
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 bf6f836..0b04e6d 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
@@ -169,10 +169,10 @@ public class QueryUtilTest extends LocalFileMetadataTestCase {
     public void testRemoveCommentInSql() {
 
         String originSql = "select count(*) from test_kylin_fact where price > 10.0";
+        String originSql2 = "select count(*) from test_kylin_fact where TEST_COLUMN != 'not--a comment'";
 
         {
             String sqlWithComment = "-- comment \n" + originSql;
-
             Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment));
         }
 
@@ -223,9 +223,57 @@ public class QueryUtilTest extends LocalFileMetadataTestCase {
         }
 
         {
-            String sqlWithComment = "/* comment1 * \ncomment2 */ -- comment 3\n" + originSql + "-- comment 5";
+            String sqlWithComment = "/* comment1 * \ncomment2 */ -- comment 3\n" + originSql + "-- comment 5\n";
             Assert.assertEquals(originSql, QueryUtil.removeCommentInSql(sqlWithComment));
         }
+
+        {
+            String sqlWithComment2 = "/* comment1 * \ncomment2 */ -- comment 5\n" + originSql2 + "/* comment3 / comment4 */";
+            Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2));
+        }
+
+        {
+            String sqlWithComment2 = "/* comment1 * comment2 */ /* comment3 / comment4 */ -- comment 5\n" + originSql2;
+            Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2));
+        }
+
+        {
+            String sqlWithComment2 = "/* comment1 * comment2 */ " + originSql2;
+            Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2));
+        }
+
+        {
+            String sqlWithComment2 = "/* comment1/comment2 */ " + originSql2;
+            Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2));
+        }
+
+        {
+            String sqlWithComment2 = "-- \n -- comment \n" + originSql2;
+            Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2));
+        }
+
+        {
+            String sqlWithComment2 = "-- comment \n" + originSql2;
+            Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2));
+        }
+
+        {
+            String sqlWithComment2 = "-- comment \n -- comment\n" + originSql2;
+            Assert.assertEquals(originSql2, QueryUtil.removeCommentInSql(sqlWithComment2));
+        }
+
+        String content = "        --  One-line comment and /**range\n" +
+                "/*\n" +
+                "Multi-line comment\r\n" +
+                "--  Multi-line comment*/\n" +
+                "select price as " +
+                "/*\n" +
+                "Multi-line comment\r\n" +
+                "--  Multi-line comment*/\n" +
+                "revenue from /*One-line comment-- One-line comment*/ v_lineitem;";
+        String expectedContent = "select price as revenue from  v_lineitem;";
+        String trimmedContent = QueryUtil.removeCommentInSql(content).replaceAll("\n", "").trim();
+        Assert.assertEquals(trimmedContent, expectedContent);
     }
 
     @Test