Add execution modes and format

This commit is contained in:
2017-10-30 13:36:54 +01:00
parent 879187e921
commit a08c71926f

View File

@@ -17,144 +17,156 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import at.compax.tools.sql.SqlExecutionException; import at.compax.tools.sql.SqlExecutionException;
import at.compax.tools.sql.SqlExecutor; import at.compax.tools.sql.SqlExecutor;
import at.compax.tools.sql.model.QueryParameter;
import at.compax.tools.sql.model.QueryResult; import at.compax.tools.sql.model.QueryResult;
import at.compax.tools.sql.model.Result; import at.compax.tools.sql.model.Result;
import at.compax.tools.sql.model.UserError; import at.compax.tools.sql.model.UserError;
import lombok.Cleanup; import lombok.Cleanup;
import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.extern.log4j.Log4j; import lombok.extern.log4j.Log4j;
@Log4j @Log4j
public class Main { public class Main {
@Getter
@RequiredArgsConstructor
public static enum ExecutionMode {
PLUGIN_BACKEND(Level.OFF),
TERMINAL(Level.ALL);
private static Connection getConnection(String dbIp, long port, String sid, String username, String password) { private final Level loggingLevel;
log.debug("Establishing conneciton..."); }
Connection conn = null;
String jdbcConnection = String.format("jdbc:oracle:thin:@%s:%d:%s", dbIp, port, sid); private static ExecutionMode executionMode = ExecutionMode.PLUGIN_BACKEND;
try { private static Connection getConnection(String dbIp, long port, String sid, String username, String password) {
conn = DriverManager.getConnection(jdbcConnection, username, password); log.debug("Establishing conneciton...");
conn.setAutoCommit(false); Connection conn = null;
} catch (SQLException e) {
throw new RuntimeException("Couldn't connect to database", e);
}
log.debug("Established conneciton!"); String jdbcConnection = String.format("jdbc:oracle:thin:@%s:%d:%s", dbIp, port, sid);
return conn;
}
private static QueryResult executeExampleQueryWithException(Connection conn) try {
throws SQLException, JsonProcessingException { conn = DriverManager.getConnection(jdbcConnection, username, password);
String sql = "SELECT id, version, workspac FROM s_settings"; conn.setAutoCommit(false);
return SqlExecutor.executeQuery(conn, sql); } catch (SQLException e) {
} throw new RuntimeException("Couldn't connect to database", e);
}
private static QueryResult executeExampleQueryWithoutParameter(Connection conn) log.debug("Established conneciton!");
throws SQLException, JsonProcessingException { return conn;
String sql = "SELECT id, version, workspace FROM s_settings"; }
return SqlExecutor.executeQuery(conn, sql);
}
private static QueryResult executeExampleQueryWithParameter(Connection conn) private static QueryResult executeExampleQueryWithException(Connection conn) throws SQLException, JsonProcessingException {
throws SQLException, JsonProcessingException { String sql = "SELECT id, version, workspac FROM s_settings";
String sql = "select client from k_clients where id = ?"; return SqlExecutor.executeQuery(conn, sql);
return SqlExecutor.executeQuery(conn, sql, 1L); }
}
private static Result compileExampleSpec(Connection conn) throws SQLException, JsonProcessingException { private static QueryResult executeExampleQueryWithoutParameter(Connection conn) throws SQLException, JsonProcessingException {
String specSql = "CREATE OR REPLACE PACKAGE aax2_wedel\n" + "AS\n" String sql = "SELECT id, version, workspace FROM s_settings";
+ " PROCEDURE create_cli_migration_workflow(p_customer d_customers.id%type, p_migration_date date);\n" return SqlExecutor.executeQuery(conn, sql);
+ "END aax2_wedel;"; }
return SqlExecutor.execute(conn, specSql); private static QueryResult executeExampleQueryWithParameter(Connection conn) throws SQLException, JsonProcessingException {
} String sql = "select client from k_clients where id = ?";
return SqlExecutor.executeQuery(conn, sql, 1L);
}
private static Result compileExampleSpecWithErrors(Connection conn) throws SQLException, JsonProcessingException { private static Result compileExampleSpec(Connection conn) throws SQLException, JsonProcessingException {
String specSql = "CREATE OR REPLACE PACKAGE aax2_wedel\n" + "AS\n" String specSql = "CREATE OR REPLACE PACKAGE aax2_wedel\n" + "AS\n" + " PROCEDURE create_cli_migration_workflow(p_customer d_customers.id%type, p_migration_date date);\n" + "END aax2_wedel;";
+ " PROCEDURE create_cli_migration_workflow(p_customer d_customers.id%typ, p_migration_date date);\n"
+ "END aax2_wedel;";
return SqlExecutor.execute(conn, specSql); return SqlExecutor.execute(conn, specSql);
} }
private static void handleSqlExecutionException(SqlExecutionException e) throws JsonProcessingException { private static Result compileExampleSpecWithErrors(Connection conn) throws SQLException, JsonProcessingException {
for (UserError userError : e.getUserErrors()) { String specSql = "CREATE OR REPLACE PACKAGE aax2_wedel\n" + "AS\n" + " PROCEDURE create_cli_migration_workflow(p_customer d_customers.id%typ, p_migration_date date);\n" + "END aax2_wedel;";
log.debug(userError.toString());
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(userError));
}
}
private static String readFromStdIn() throws IOException { return SqlExecutor.execute(conn, specSql);
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); }
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
public static void runTests() { private static void handleSqlExecutionException(SqlExecutionException e) throws JsonProcessingException {
try { for (UserError userError : e.getUserErrors()) {
// String stdInSql = readFromStdIn(); log.debug(userError.toString());
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(userError));
}
}
@Cleanup private static String readFromStdIn() throws IOException {
Connection conn = getConnection("172.19.13.66", 1521L, "aax2qc", "aax2qc", "aax2qc"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null) {
sb.append(line);
}
return sb.toString();
}
ObjectMapper mapper = new ObjectMapper(); public static void runTests() {
try {
// String stdInSql = readFromStdIn();
System.out.println(mapper.writeValueAsString(compileExampleSpec(conn))); @Cleanup
System.out.println(mapper.writeValueAsString(compileExampleSpecWithErrors(conn))); Connection conn = getConnection("172.19.13.66", 1521L, "aax2qc", "aax2qc", "aax2qc");
System.out.println(mapper.writeValueAsString(executeExampleQueryWithException(conn)));
System.out.println(mapper.writeValueAsString(executeExampleQueryWithoutParameter(conn)));
System.out.println(mapper.writeValueAsString(executeExampleQueryWithParameter(conn)));
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) throws Exception { ObjectMapper mapper = new ObjectMapper();
BasicConfigurator.configure();
LogManager.getLogger("at.compax.tools.sql.main").setLevel(Level.OFF);
LogManager.getLogger("at.compax.tools.sql").setLevel(Level.OFF);
ObjectMapper mapper = new ObjectMapper();
if (args.length == 0) { System.out.println(mapper.writeValueAsString(compileExampleSpec(conn)));
runTests(); System.out.println(mapper.writeValueAsString(compileExampleSpecWithErrors(conn)));
} else { System.out.println(mapper.writeValueAsString(executeExampleQueryWithException(conn)));
if (args.length < 4) System.out.println(mapper.writeValueAsString(executeExampleQueryWithoutParameter(conn)));
throw new IllegalArgumentException("Arguments: Host Port sid username password"); System.out.println(mapper.writeValueAsString(executeExampleQueryWithParameter(conn)));
} catch (Exception e) {
e.printStackTrace();
}
}
String host = args[0]; public static void main(String[] args) throws Exception {
long port = Long.parseLong(args[1]); BasicConfigurator.configure();
String sid = args[2]; LogManager.getLogger("at.compax.tools.sql.main").setLevel(executionMode.getLoggingLevel());
String username = args[3]; LogManager.getLogger("at.compax.tools.sql").setLevel(executionMode.getLoggingLevel());
String password = args[4]; ObjectMapper mapper = new ObjectMapper();
@Cleanup if (args.length == 0) {
Connection conn = getConnection(host, port, sid, username, password); runTests();
log.info("Waiting for input..."); } else {
if (args.length < 4)
throw new IllegalArgumentException("Arguments: Host Port sid username password");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in, Charset.forName("UTF-8"))); String host = args[0];
String line; long port = Long.parseLong(args[1]);
StringBuffer commandBuffer = new StringBuffer(); String sid = args[2];
String username = args[3];
String password = args[4];
while ((line = br.readLine()) != null) { @Cleanup
if (!"--- END ---".equals(line)) { Connection conn = getConnection(host, port, sid, username, password);
commandBuffer.append(line); log.info("Waiting for input...");
} else {
String query = commandBuffer.toString().trim();
if (query.toLowerCase().startsWith("select")) {
System.out.println(mapper.writeValueAsString(SqlExecutor.executeQuery(conn, query.replaceAll(";$", "").trim())));
} else {
System.out.println(mapper.writeValueAsString(SqlExecutor.execute(conn, query)));
}
commandBuffer.setLength(0);
}
}
} BufferedReader br = new BufferedReader(new InputStreamReader(System.in, Charset.forName("UTF-8")));
} String line;
StringBuffer commandBuffer = new StringBuffer();
while ((line = br.readLine()) != null) {
if (!"--- END ---".equals(line)) {
commandBuffer.append(line);
} else {
String query = commandBuffer.toString().trim();
if (query.toLowerCase().startsWith("select")) {
if (executionMode == ExecutionMode.TERMINAL) {
System.out.println(mapper //
.writerWithDefaultPrettyPrinter() //
.writeValueAsString(SqlExecutor.executeQuery(conn, //
query.replaceAll(";$", "").trim())) //
);
} else {
System.out.println(mapper.writeValueAsString(SqlExecutor.executeQuery(conn, query.replaceAll(";$", "").trim())));
}
} else {
System.out.println(mapper.writeValueAsString(SqlExecutor.execute(conn, query)));
}
commandBuffer.setLength(0);
}
}
}
}
} }