From 884113cfe9868bc2cd17fd1601cad0b67e155df8 Mon Sep 17 00:00:00 2001 From: astroshim Date: Sun, 11 Dec 2016 00:09:15 +0900 Subject: [PATCH] change output type of JDBC Interpreter. --- .../apache/zeppelin/jdbc/JDBCInterpreter.java | 99 ++++++++++--------- 1 file changed, 55 insertions(+), 44 deletions(-) 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 7e2fb115058..407e81ea2a9 100644 --- a/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java +++ b/jdbc/src/main/java/org/apache/zeppelin/jdbc/JDBCInterpreter.java @@ -389,6 +389,50 @@ public Connection run() throws Exception { return connection; } + private String getResults(ResultSet resultSet, boolean isTableType) + throws SQLException { + ResultSetMetaData md = resultSet.getMetaData(); + StringBuilder msg; + if (isTableType) { + msg = new StringBuilder(TABLE_MAGIC_TAG); + } else { + msg = new StringBuilder(); + } + + for (int i = 1; i < md.getColumnCount() + 1; i++) { + if (i > 1) { + msg.append(TAB); + } + msg.append(replaceReservedChars(md.getColumnName(i))); + } + msg.append(NEWLINE); + + int displayRowCount = 0; + while (resultSet.next() && displayRowCount < getMaxResult()) { + for (int i = 1; i < md.getColumnCount() + 1; i++) { + Object resultObject; + String resultValue; + resultObject = resultSet.getObject(i); + if (resultObject == null) { + resultValue = "null"; + } else { + resultValue = resultSet.getString(i); + } + msg.append(replaceReservedChars(resultValue)); + if (i != md.getColumnCount()) { + msg.append(TAB); + } + } + msg.append(NEWLINE); + displayRowCount++; + } + return msg.toString(); + } + + private boolean isDDLCommand(int updatedCount, int columnCount) throws SQLException { + return updatedCount < 0 && columnCount <= 0 ? true : false; + } + private InterpreterResult executeSql(String propertyKey, String sql, InterpreterContext interpreterContext) { Connection connection; @@ -398,6 +442,7 @@ private InterpreterResult executeSql(String propertyKey, String sql, String user = interpreterContext.getAuthenticationInfo().getUser(); try { + String results = null; connection = getConnection(propertyKey, interpreterContext); if (connection == null) { @@ -409,61 +454,27 @@ private InterpreterResult executeSql(String propertyKey, String sql, return new InterpreterResult(Code.ERROR, "Prefix not found."); } - StringBuilder msg = null; - boolean isTableType = false; - - if (containsIgnoreCase(sql, EXPLAIN_PREDICATE)) { - msg = new StringBuilder(); - } else { - msg = new StringBuilder(TABLE_MAGIC_TAG); - isTableType = true; - } - try { getJDBCConfiguration(user).saveStatement(paragraphId, statement); boolean isResultSetAvailable = statement.execute(sql); - if (isResultSetAvailable) { resultSet = statement.getResultSet(); - ResultSetMetaData md = resultSet.getMetaData(); - - for (int i = 1; i < md.getColumnCount() + 1; i++) { - if (i > 1) { - msg.append(TAB); - } - msg.append(replaceReservedChars(isTableType, md.getColumnName(i))); - } - msg.append(NEWLINE); - - int displayRowCount = 0; - while (resultSet.next() && displayRowCount < getMaxResult()) { - for (int i = 1; i < md.getColumnCount() + 1; i++) { - Object resultObject; - String resultValue; - resultObject = resultSet.getObject(i); - if (resultObject == null) { - resultValue = "null"; - } else { - resultValue = resultSet.getString(i); - } - msg.append(replaceReservedChars(isTableType, resultValue)); - if (i != md.getColumnCount()) { - msg.append(TAB); - } - } - msg.append(NEWLINE); - displayRowCount++; + // Regards that the command is DDL. + if (isDDLCommand(statement.getUpdateCount(), resultSet.getMetaData().getColumnCount())) { + results = "Query executed successfully."; + } else { + results = getResults(resultSet, !containsIgnoreCase(sql, EXPLAIN_PREDICATE)); } } else { // Response contains either an update count or there are no results. int updateCount = statement.getUpdateCount(); - msg.append(UPDATE_COUNT_HEADER).append(NEWLINE); - msg.append(updateCount).append(NEWLINE); + results = "Query executed successfully. Affected rows : " + updateCount; } //In case user ran an insert/update/upsert statement if (connection.getAutoCommit() != true) connection.commit(); + } finally { if (resultSet != null) { try { @@ -482,7 +493,7 @@ private InterpreterResult executeSql(String propertyKey, String sql, } getJDBCConfiguration(user).removeStatement(paragraphId); } - return new InterpreterResult(Code.SUCCESS, msg.toString()); + return new InterpreterResult(Code.SUCCESS, results); } catch (Exception e) { logger.error("Cannot run " + sql, e); @@ -504,11 +515,11 @@ private InterpreterResult executeSql(String propertyKey, String sql, /** * For %table response replace Tab and Newline characters from the content. */ - private String replaceReservedChars(boolean isTableResponseType, String str) { + private String replaceReservedChars(String str) { if (str == null) { return EMPTY_COLUMN_VALUE; } - return (!isTableResponseType) ? str : str.replace(TAB, WHITESPACE).replace(NEWLINE, WHITESPACE); + return str.replace(TAB, WHITESPACE).replace(NEWLINE, WHITESPACE); } @Override