|
|
|
@ -16,13 +16,17 @@
|
|
|
|
|
*/ |
|
|
|
|
package org.apache.dolphinscheduler.common.utils; |
|
|
|
|
|
|
|
|
|
import org.slf4j.Logger; |
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
|
import java.io.LineNumberReader; |
|
|
|
|
import java.io.Reader; |
|
|
|
|
import java.sql.*; |
|
|
|
|
import java.sql.Connection; |
|
|
|
|
import java.sql.ResultSet; |
|
|
|
|
import java.sql.ResultSetMetaData; |
|
|
|
|
import java.sql.SQLException; |
|
|
|
|
import java.sql.Statement; |
|
|
|
|
|
|
|
|
|
import org.slf4j.Logger; |
|
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
|
|
|
|
|
|
/* |
|
|
|
|
* Slightly modified version of the com.ibatis.common.jdbc.ScriptRunner class
|
|
|
|
@ -94,9 +98,7 @@ public class ScriptRunner {
|
|
|
|
|
} finally { |
|
|
|
|
connection.setAutoCommit(originalAutoCommit); |
|
|
|
|
} |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
throw e; |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
} catch (IOException | SQLException e) { |
|
|
|
|
throw e; |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
throw new RuntimeException("Error running script. Cause: " + e, e); |
|
|
|
@ -114,9 +116,7 @@ public class ScriptRunner {
|
|
|
|
|
} finally { |
|
|
|
|
connection.setAutoCommit(originalAutoCommit); |
|
|
|
|
} |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
throw e; |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
} catch (IOException | SQLException e) { |
|
|
|
|
throw e; |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
throw new RuntimeException("Error running script. Cause: " + e, e); |
|
|
|
@ -161,44 +161,34 @@ public class ScriptRunner {
|
|
|
|
|
|| fullLineDelimiter && trimmedLine.equals(getDelimiter())) { |
|
|
|
|
command.append(line.substring(0, line.lastIndexOf(getDelimiter()))); |
|
|
|
|
command.append(" "); |
|
|
|
|
Statement statement = conn.createStatement(); |
|
|
|
|
boolean hasResults = false; |
|
|
|
|
logger.info("sql:"+command.toString()); |
|
|
|
|
if (stopOnError) { |
|
|
|
|
hasResults = statement.execute(command.toString()); |
|
|
|
|
} else { |
|
|
|
|
try { |
|
|
|
|
statement.execute(command.toString()); |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
logger.error(e.getMessage(),e); |
|
|
|
|
throw e; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ResultSet rs = statement.getResultSet(); |
|
|
|
|
if (hasResults && rs != null) { |
|
|
|
|
ResultSetMetaData md = rs.getMetaData(); |
|
|
|
|
int cols = md.getColumnCount(); |
|
|
|
|
for (int i = 0; i < cols; i++) { |
|
|
|
|
String name = md.getColumnLabel(i); |
|
|
|
|
logger.info(name + "\t"); |
|
|
|
|
} |
|
|
|
|
logger.info(""); |
|
|
|
|
while (rs.next()) { |
|
|
|
|
for (int i = 0; i < cols; i++) { |
|
|
|
|
String value = rs.getString(i); |
|
|
|
|
logger.info(value + "\t"); |
|
|
|
|
} |
|
|
|
|
logger.info(""); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
logger.info("sql: {}", command); |
|
|
|
|
|
|
|
|
|
try (Statement statement = conn.createStatement()) { |
|
|
|
|
statement.execute(command.toString()); |
|
|
|
|
try (ResultSet rs = statement.getResultSet()) { |
|
|
|
|
if (stopOnError && rs != null) { |
|
|
|
|
ResultSetMetaData md = rs.getMetaData(); |
|
|
|
|
int cols = md.getColumnCount(); |
|
|
|
|
for (int i = 0; i < cols; i++) { |
|
|
|
|
String name = md.getColumnLabel(i); |
|
|
|
|
logger.info("{} \t", name); |
|
|
|
|
} |
|
|
|
|
logger.info(""); |
|
|
|
|
while (rs.next()) { |
|
|
|
|
for (int i = 0; i < cols; i++) { |
|
|
|
|
String value = rs.getString(i); |
|
|
|
|
logger.info("{} \t", value); |
|
|
|
|
} |
|
|
|
|
logger.info(""); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
logger.error("SQLException", e); |
|
|
|
|
throw e; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
command = null; |
|
|
|
|
try { |
|
|
|
|
statement.close(); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
// Ignore to workaround a bug in Jakarta DBCP
|
|
|
|
|
} |
|
|
|
|
Thread.yield(); |
|
|
|
|
} else { |
|
|
|
|
command.append(line); |
|
|
|
@ -207,11 +197,11 @@ public class ScriptRunner {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
logger.error("Error executing: " + command.toString()); |
|
|
|
|
logger.error("Error executing: {}", command); |
|
|
|
|
throw e; |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
e.fillInStackTrace(); |
|
|
|
|
logger.error("Error executing: " + command.toString()); |
|
|
|
|
logger.error("Error executing: {}", command); |
|
|
|
|
throw e; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -243,46 +233,35 @@ public class ScriptRunner {
|
|
|
|
|
|| fullLineDelimiter && trimmedLine.equals(getDelimiter())) { |
|
|
|
|
command.append(line.substring(0, line.lastIndexOf(getDelimiter()))); |
|
|
|
|
command.append(" "); |
|
|
|
|
Statement statement = conn.createStatement(); |
|
|
|
|
|
|
|
|
|
sql = command.toString().replaceAll("\\{\\{APPDB\\}\\}", dbName); |
|
|
|
|
boolean hasResults = false; |
|
|
|
|
logger.info("sql : " + sql); |
|
|
|
|
if (stopOnError) { |
|
|
|
|
hasResults = statement.execute(sql); |
|
|
|
|
} else { |
|
|
|
|
try { |
|
|
|
|
statement.execute(sql); |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
logger.error(e.getMessage(),e); |
|
|
|
|
throw e; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
ResultSet rs = statement.getResultSet(); |
|
|
|
|
if (hasResults && rs != null) { |
|
|
|
|
ResultSetMetaData md = rs.getMetaData(); |
|
|
|
|
int cols = md.getColumnCount(); |
|
|
|
|
for (int i = 0; i < cols; i++) { |
|
|
|
|
String name = md.getColumnLabel(i); |
|
|
|
|
logger.info(name + "\t"); |
|
|
|
|
} |
|
|
|
|
logger.info(""); |
|
|
|
|
while (rs.next()) { |
|
|
|
|
for (int i = 0; i < cols; i++) { |
|
|
|
|
String value = rs.getString(i); |
|
|
|
|
logger.info(value + "\t"); |
|
|
|
|
} |
|
|
|
|
logger.info(""); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
logger.info("sql : {}", sql); |
|
|
|
|
|
|
|
|
|
try (Statement statement = conn.createStatement()) { |
|
|
|
|
statement.execute(sql); |
|
|
|
|
try (ResultSet rs = statement.getResultSet()) { |
|
|
|
|
if (stopOnError && rs != null) { |
|
|
|
|
ResultSetMetaData md = rs.getMetaData(); |
|
|
|
|
int cols = md.getColumnCount(); |
|
|
|
|
for (int i = 0; i < cols; i++) { |
|
|
|
|
String name = md.getColumnLabel(i); |
|
|
|
|
logger.info("{} \t", name); |
|
|
|
|
} |
|
|
|
|
logger.info(""); |
|
|
|
|
while (rs.next()) { |
|
|
|
|
for (int i = 0; i < cols; i++) { |
|
|
|
|
String value = rs.getString(i); |
|
|
|
|
logger.info("{} \t", value); |
|
|
|
|
} |
|
|
|
|
logger.info(""); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
logger.error("SQLException", e); |
|
|
|
|
throw e; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
command = null; |
|
|
|
|
try { |
|
|
|
|
statement.close(); |
|
|
|
|
} catch (Exception e) { |
|
|
|
|
// Ignore to workaround a bug in Jakarta DBCP
|
|
|
|
|
} |
|
|
|
|
Thread.yield(); |
|
|
|
|
} else { |
|
|
|
|
command.append(line); |
|
|
|
@ -291,11 +270,10 @@ public class ScriptRunner {
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
} catch (SQLException e) { |
|
|
|
|
logger.error("Error executing: " + sql); |
|
|
|
|
throw e; |
|
|
|
|
} catch (IOException e) { |
|
|
|
|
e.fillInStackTrace(); |
|
|
|
|
logger.error("Error executing: " + sql); |
|
|
|
|
logger.error("Error executing: {}", sql); |
|
|
|
|
throw e; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|