Repository: incubator-zeppelin
Updated Branches:
  refs/heads/master ecc497011 -> baab124cf


ZEPPELIN-349: Resolve NPE on null cell values

When the query response contains null column values the following NPE is thrown:
java.lang.NullPointerException
at 
org.apache.zeppelin.postgresql.PostgreSqlInterpreter.replaceReservedChars(PostgreSqlInterpreter.java:278)
at 
org.apache.zeppelin.postgresql.PostgreSqlInterpreter.executeSql(PostgreSqlInterpreter.java:235)

Author: tzolov <[email protected]>

Closes #348 from tzolov/ZEPPELIN-349 and squashes the following commits:

de70c88 [tzolov] ZEPPELIN-349: Format test code
fff3448 [tzolov] ZEPPELIN-349: Resolve NPE on null cell values


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

Branch: refs/heads/master
Commit: baab124cf310545cbc6cf0b4e29b4f20b54d4f48
Parents: ecc4970
Author: tzolov <[email protected]>
Authored: Fri Oct 16 23:47:45 2015 +0200
Committer: Lee moon soo <[email protected]>
Committed: Mon Oct 19 14:23:07 2015 +0900

----------------------------------------------------------------------
 .../postgresql/PostgreSqlInterpreter.java       |  4 ++++
 .../postgresql/PostgreSqlInterpreterTest.java   | 21 ++++++++++++++++++++
 2 files changed, 25 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/baab124c/postgresql/src/main/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreter.java
----------------------------------------------------------------------
diff --git 
a/postgresql/src/main/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreter.java
 
b/postgresql/src/main/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreter.java
index 57336c4..4189a74 100644
--- 
a/postgresql/src/main/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreter.java
+++ 
b/postgresql/src/main/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreter.java
@@ -89,6 +89,7 @@ public class PostgreSqlInterpreter extends Interpreter {
   static final String POSTGRESQL_SERVER_PASSWORD = "postgresql.password";
   static final String POSTGRESQL_SERVER_DRIVER_NAME = "postgresql.driver.name";
   static final String POSTGRESQL_SERVER_MAX_RESULT = "postgresql.max.result";
+  static final String EMPTY_COLUMN_VALUE = "";
 
   static {
     Interpreter.register(
@@ -275,6 +276,9 @@ public class PostgreSqlInterpreter extends Interpreter {
    * For %table response replace Tab and Newline characters from the content.
    */
   private String replaceReservedChars(boolean isTableResponseType, String str) 
{
+    if (str == null) {
+      return EMPTY_COLUMN_VALUE;
+    }
     return (!isTableResponseType) ? str : str.replace(TAB, 
WhITESPACE).replace(NEWLINE, WhITESPACE);
   }
 

http://git-wip-us.apache.org/repos/asf/incubator-zeppelin/blob/baab124c/postgresql/src/test/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreterTest.java
----------------------------------------------------------------------
diff --git 
a/postgresql/src/test/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreterTest.java
 
b/postgresql/src/test/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreterTest.java
index d59c071..9c8eae1 100644
--- 
a/postgresql/src/test/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreterTest.java
+++ 
b/postgresql/src/test/java/org/apache/zeppelin/postgresql/PostgreSqlInterpreterTest.java
@@ -127,6 +127,27 @@ public class PostgreSqlInterpreterTest extends 
BasicJDBCTestCaseAdapter {
   }
 
   @Test
+  public void testNullColumnResult() throws SQLException {
+
+    when(psqlInterpreter.getMaxResult()).thenReturn(1000);
+
+    String sqlQuery = "select * from t";
+
+    result.addColumn("col1", new String[] {"val11", null});
+    result.addColumn("col2", new String[] {null, "val22"});
+
+    InterpreterResult interpreterResult = psqlInterpreter.interpret(sqlQuery, 
null);
+
+    assertEquals(InterpreterResult.Code.SUCCESS, interpreterResult.code());
+    assertEquals(InterpreterResult.Type.TABLE, interpreterResult.type());
+    assertEquals("col1\tcol2\nval11\t\n\tval22\n", 
interpreterResult.message());
+
+    verifySQLStatementExecuted(sqlQuery);
+    verifyAllResultSetsClosed();
+    verifyAllStatementsClosed();
+  }
+
+  @Test
   public void testSelectQuery() throws SQLException {
 
     when(psqlInterpreter.getMaxResult()).thenReturn(1000);

Reply via email to