Move row limiting into SqlExecutor

master
Zoran Zaric 7 years ago
parent f46c1d230f
commit 8194709fbf

@ -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;

@ -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));
}

Loading…
Cancel
Save