diff --git a/src/main/java/at/compax/tools/sql/SqlExecutor.java b/src/main/java/at/compax/tools/sql/SqlExecutor.java index f8e1f6e..0b0c8d5 100644 --- a/src/main/java/at/compax/tools/sql/SqlExecutor.java +++ b/src/main/java/at/compax/tools/sql/SqlExecutor.java @@ -35,6 +35,8 @@ import lombok.extern.log4j.Log4j; @Log4j public class SqlExecutor { + private static final long MAX_ROWS = 10L; + public static Result execute(Connection conn, String sql) throws SQLException, JsonProcessingException { log.trace("SQL: " + sql.trim()); @@ -63,29 +65,33 @@ public class SqlExecutor { return resultBuilder.build(); } - public static QueryResult executeJsonQuery(Connection conn, String json) throws SQLException, JsonParseException, JsonMappingException, IOException { + public static QueryResult executeJsonQuery(Connection conn, Long maxRows, String json) throws SQLException, JsonParseException, JsonMappingException, IOException { log.debug("Parsing JSON: " + json); ObjectMapper mapper = new ObjectMapper(); QueryParameter queryParameter = mapper.readValue(json, QueryParameter.class); log.debug("Parsed QueryParamter: " + queryParameter.toString()); - return executeQuery(conn, queryParameter); + return executeQuery(conn, maxRows, queryParameter); } - public static QueryResult executeQuery(Connection conn, QueryParameter parameters) throws SQLException { + public static QueryResult executeQuery(Connection conn, Long maxRows, QueryParameter parameters) throws SQLException { if (parameters == null || parameters.getParameters() == null) { - return executeQuery(conn, parameters.getSql()); + return executeQuery(conn, parameters.getSql(), maxRows); } else { - return executeQuery(conn, parameters.getSql(), parameters.getParameters().toArray()); + return executeQuery(conn, parameters.getSql(), maxRows, parameters.getParameters().toArray()); } } - public static QueryResult executeQuery(Connection conn, String sql, Object... parameters) throws SQLException { + public static QueryResult executeQuery(Connection conn, String sql, Long maxRows, Object... parameters) throws SQLException { log.trace("SQL: " + sql.trim()); + if (maxRows == null) { + maxRows = MAX_ROWS; + } + String selectQuery = String.format("SELECT * FROM (%s) WHERE rownum <= %d", sql.replaceAll(";$", "").trim(), maxRows); @Cleanup - PreparedStatement stmt = conn.prepareStatement(sql); + PreparedStatement stmt = conn.prepareStatement(selectQuery); if (parameters != null) { int parameterIndex = 1; diff --git a/src/main/java/at/compax/tools/sql/main/Main.java b/src/main/java/at/compax/tools/sql/main/Main.java index b38dd1f..29d6c45 100644 --- a/src/main/java/at/compax/tools/sql/main/Main.java +++ b/src/main/java/at/compax/tools/sql/main/Main.java @@ -27,8 +27,6 @@ import lombok.extern.log4j.Log4j; @Log4j public class Main { - private static final long MAX_ROWNUMS = 10L; - @Getter @RequiredArgsConstructor public static enum ExecutionMode { @@ -59,12 +57,12 @@ public class Main { private static QueryResult executeExampleQueryWithException(Connection conn) throws SQLException, JsonProcessingException { String sql = "SELECT id, version, workspac FROM s_settings"; - return SqlExecutor.executeQuery(conn, sql); + return SqlExecutor.executeQuery(conn, sql, 10L); } private static QueryResult executeExampleQueryWithoutParameter(Connection conn) throws SQLException, JsonProcessingException { String sql = "SELECT id, version, workspace FROM s_settings"; - return SqlExecutor.executeQuery(conn, sql); + return SqlExecutor.executeQuery(conn, sql, 10L); } private static QueryResult executeExampleQueryWithParameter(Connection conn) throws SQLException, JsonProcessingException { @@ -109,7 +107,7 @@ public class Main { @Cleanup Connection conn = getConnection("172.19.13.66", 1521L, "aax2qc", "aax2qc", "aax2qc"); - System.out.println(formatJsonObject(SqlExecutor.executeJsonQuery(conn, "{ \"sql\": \"select customer_id from d_customers\"}"))); + System.out.println(formatJsonObject(SqlExecutor.executeJsonQuery(conn, 10L, "{ \"sql\": \"select customer_id from d_customers\"}"))); System.out.println(formatJsonObject(compileExampleSpec(conn))); System.out.println(formatJsonObject(compileExampleSpecWithErrors(conn))); System.out.println(formatJsonObject(executeExampleQueryWithException(conn))); @@ -137,7 +135,6 @@ public class Main { String sid = args[2]; String username = args[3]; String password = args[4]; - long maxRownums = (args.length >= 6) ? Long.parseLong(args[5]) : MAX_ROWNUMS; @Cleanup Connection conn = getConnection(host, port, sid, username, password); @@ -154,9 +151,7 @@ public class Main { String query = commandBuffer.toString().trim(); String result; if (query.toLowerCase().startsWith("select")) { - String selectQuery = String.format("SELECT * FROM (%s) WHERE rownum <= %d", query.replaceAll(";$", "").trim(), maxRownums); - - result = formatJsonObject(SqlExecutor.executeQuery(conn, selectQuery)); + result = formatJsonObject(SqlExecutor.executeQuery(conn, query, null)); } else { result = formatJsonObject(SqlExecutor.execute(conn, query)); }