Repository: zeppelin
Updated Branches:
  refs/heads/branch-0.8 da277b9fb -> bbfae7c72


ZEPPELIN-3344. Revert comments in queries in JDBC interpreter

### What is this PR for?
The original purpose of https://github.com/apache/zeppelin/pull/2158 was 
correct processing of ';'. This was done via full removing comments from code.
Unfortunately Apache Phoenix uses hooks in comments 
https://forcedotcom.github.io/phoenix/#hintml.
Thus we should not delete comments in scripts.
There was discussion about comment rules for different databases (solr). The 
right way is keep style. Thus analysts can copy queries to another tool and can 
get same results and errors.

### What type of PR is it?
[Bug Fix]

### What is the Jira issue?
* https://issues.apache.org/jira/browse/ZEPPELIN-3344

### How should this be tested?
* Unit tests pass: testSplitSqlQueryWithComments and testSplitSqlQuery

### Questions:
* Does the licenses files need update? No
* Is there breaking changes for older versions? No
* Does this needs documentation? No

Author: mebelousov <mebelou...@ya.ru>

Closes #2876 from mebelousov/ZEPPELIN-3344 and squashes the following commits:

6980400 [mebelousov] ZEPPELIN-3344 Fix checkstyle, add tests for comments
83c8e8f [mebelousov] ZEPPELIN-3344 Rename test
eed54c8 [mebelousov] ZEPPELIN-3344 Revert comments in JDBC interpreter

(cherry picked from commit 8238b711c7f6ff2c71ff807c6ee4ad52a29728a0)
Signed-off-by: Jeff Zhang <zjf...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/zeppelin/repo
Commit: http://git-wip-us.apache.org/repos/asf/zeppelin/commit/bbfae7c7
Tree: http://git-wip-us.apache.org/repos/asf/zeppelin/tree/bbfae7c7
Diff: http://git-wip-us.apache.org/repos/asf/zeppelin/diff/bbfae7c7

Branch: refs/heads/branch-0.8
Commit: bbfae7c725586e25eb1e71d60047b8804412208a
Parents: da277b9
Author: mebelousov <mebelou...@ya.ru>
Authored: Tue Mar 20 08:57:02 2018 +0300
Committer: Jeff Zhang <zjf...@apache.org>
Committed: Sun Apr 1 11:29:13 2018 +0800

----------------------------------------------------------------------
 .../apache/zeppelin/jdbc/JDBCInterpreter.java   | 21 ++++++--------------
 .../zeppelin/jdbc/JDBCInterpreterTest.java      | 11 +++++++---
 2 files changed, 14 insertions(+), 18 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/zeppelin/blob/bbfae7c7/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java
----------------------------------------------------------------------
diff --git a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java 
b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java
index 0265e2d..fa69165 100644
--- a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java
+++ b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java
@@ -588,18 +588,12 @@ public class JDBCInterpreter extends KerberosInterpreter {
     for (int item = 0; item < sql.length(); item++) {
       character = sql.charAt(item);
 
-      if ((singleLineComment && (character == '\n' || item == sql.length() - 
1))
-          || (multiLineComment && character == '/' && sql.charAt(item - 1) == 
'*')) {
+      if (singleLineComment && (character == '\n' || item == sql.length() - 
1)) {
         singleLineComment = false;
-        multiLineComment = false;
-        if (item == sql.length() - 1 && query.length() > 0) {
-          queries.add(StringUtils.trim(query.toString()));
-        }
-        continue;
       }
 
-      if (singleLineComment || multiLineComment) {
-        continue;
+      if (multiLineComment && character == '/' && sql.charAt(item - 1) == '*') 
{
+        multiLineComment = false;
       }
 
       if (character == '\'') {
@@ -622,16 +616,13 @@ public class JDBCInterpreter extends KerberosInterpreter {
           && sql.length() > item + 1) {
         if (character == '-' && sql.charAt(item + 1) == '-') {
           singleLineComment = true;
-          continue;
-        }
-
-        if (character == '/' && sql.charAt(item + 1) == '*') {
+        } else if (character == '/' && sql.charAt(item + 1) == '*') {
           multiLineComment = true;
-          continue;
         }
       }
 
-      if (character == ';' && !quoteString && !doubleQuoteString) {
+      if (character == ';' && !quoteString && !doubleQuoteString && 
!multiLineComment
+          && !singleLineComment) {
         queries.add(StringUtils.trim(query.toString()));
         query = new StringBuilder();
       } else if (item == sql.length() - 1) {

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/bbfae7c7/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java
----------------------------------------------------------------------
diff --git 
a/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java 
b/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java
index 6441267..f1587d5 100644
--- a/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java
+++ b/jdbc/src/test/java/org/apache/zeppelin/jdbc/JDBCInterpreterTest.java
@@ -183,13 +183,16 @@ public class JDBCInterpreterTest extends 
BasicJDBCTestCaseAdapter {
         "select '\n', ';';" +
         "select replace('A\\;B', '\\', 'text');" +
         "select '\\', ';';" +
-        "select '''', ';'";
+        "select '''', ';';" +
+        "select /*+ scan */ * from test_table;" +
+        "--singleLineComment\nselect * from test_table";
+
 
     Properties properties = new Properties();
     JDBCInterpreter t = new JDBCInterpreter(properties);
     t.open();
     List<String> multipleSqlArray = t.splitSqlQueries(sqlQuery);
-    assertEquals(8, multipleSqlArray.size());
+    assertEquals(10, multipleSqlArray.size());
     assertEquals("insert into test_table(id, name) values ('a', ';\"')", 
multipleSqlArray.get(0));
     assertEquals("select * from test_table", multipleSqlArray.get(1));
     assertEquals("select * from test_table WHERE ID = \";'\"", 
multipleSqlArray.get(2));
@@ -198,6 +201,8 @@ public class JDBCInterpreterTest extends 
BasicJDBCTestCaseAdapter {
     assertEquals("select replace('A\\;B', '\\', 'text')", 
multipleSqlArray.get(5));
     assertEquals("select '\\', ';'", multipleSqlArray.get(6));
     assertEquals("select '''', ';'", multipleSqlArray.get(7));
+    assertEquals("select /*+ scan */ * from test_table", 
multipleSqlArray.get(8));
+    assertEquals("--singleLineComment\nselect * from test_table", 
multipleSqlArray.get(9));
   }
 
   @Test
@@ -524,7 +529,7 @@ public class JDBCInterpreterTest extends 
BasicJDBCTestCaseAdapter {
   }
 
   @Test
-  public void testExcludingComments() throws SQLException, IOException {
+  public void testSplitSqlQueryWithComments() throws SQLException, IOException 
{
     Properties properties = new Properties();
     properties.setProperty("common.max_count", "1000");
     properties.setProperty("common.max_retry", "3");

Reply via email to