Fix ArangoDB
This commit is contained in:
parent
27501b82e1
commit
2ed088e415
1 changed files with 56 additions and 53 deletions
|
|
@ -145,9 +145,9 @@ public class RequestService {
|
||||||
try (Connection connection = DatabaseConnection.getConnection(
|
try (Connection connection = DatabaseConnection.getConnection(
|
||||||
request.getSqlConnectionParams())) {
|
request.getSqlConnectionParams())) {
|
||||||
String requestURL = (String) query.get("requestURL");
|
String requestURL = (String) query.get("requestURL");
|
||||||
executeSqlQuery(connection, requestURL);
|
executeSqlQuery(connection, requestURL);
|
||||||
|
|
||||||
List<String> queryIds = (List<String>) query.get("ids");
|
List<String> queryIds = (List<String>) query.get("ids");
|
||||||
if (queryIds != null && !queryIds.isEmpty()) {
|
if (queryIds != null && !queryIds.isEmpty()) {
|
||||||
ids.addAll(queryIds);
|
ids.addAll(queryIds);
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -163,64 +163,64 @@ public class RequestService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, Object> buildSqlQuery(SqlRequest request, List<String> ids) {
|
private Map<String, Object> buildSqlQuery(SqlRequest request, List<String> ids) {
|
||||||
logger.debug("Starting building SQL query for request: {}", request.getRequestURL());
|
logger.debug("Starting building SQL query for request: {}", request.getRequestURL());
|
||||||
long startExecTime = System.currentTimeMillis();
|
long startExecTime = System.currentTimeMillis();
|
||||||
Map<String, Object> resultMap = new HashMap<>();
|
Map<String, Object> resultMap = new HashMap<>();
|
||||||
String endpointArguments;
|
String endpointArguments;
|
||||||
|
|
||||||
String requestURL = request.getRequestURL();
|
String requestURL = request.getRequestURL();
|
||||||
|
|
||||||
if (requestURL.contains(":=")) {
|
if (requestURL.contains(":=")) {
|
||||||
endpointArguments = "'{" + ids.stream()
|
endpointArguments = "'{" + ids.stream()
|
||||||
.map(String::trim)
|
.map(String::trim)
|
||||||
.collect(Collectors.joining(", ")) + "}'";
|
.collect(Collectors.joining(", ")) + "}'";
|
||||||
} else {
|
} else {
|
||||||
endpointArguments = "(" + ids.stream()
|
endpointArguments = "(" + ids.stream()
|
||||||
.map(s -> "'" + s.trim() + "'")
|
.map(s -> "'" + s.trim() + "'")
|
||||||
.collect(Collectors.joining(", ")) + ")";
|
.collect(Collectors.joining(", ")) + ")";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (request.getRequestArguments() != null && !request.getRequestArguments().isEmpty()) {
|
if (request.getRequestArguments() != null && !request.getRequestArguments().isEmpty()) {
|
||||||
for (RequestArgument argument : request.getRequestArguments()) {
|
for (RequestArgument argument : request.getRequestArguments()) {
|
||||||
|
|
||||||
if (argument.getRequestArgumentConnectionParams() != null) {
|
if (argument.getRequestArgumentConnectionParams() != null) {
|
||||||
logger.debug("Opening connection for SQL RequestArgument: {}", argument.getRequestArgumentName());
|
logger.debug("Opening connection for SQL RequestArgument: {}", argument.getRequestArgumentName());
|
||||||
try (Connection connection = DatabaseConnection.getConnection(
|
try (Connection connection = DatabaseConnection.getConnection(
|
||||||
argument.getRequestArgumentConnectionParams())) {
|
argument.getRequestArgumentConnectionParams())) {
|
||||||
String query = argument.getRequestArgumentURL();
|
String query = argument.getRequestArgumentURL();
|
||||||
List<String> result = fetchFileListFromDatabaseSQL(connection, query);
|
List<String> result = fetchFileListFromDatabaseSQL(connection, query);
|
||||||
|
|
||||||
resultMap.put("ids", result);
|
resultMap.put("ids", result);
|
||||||
|
|
||||||
|
|
||||||
if (result != null && !result.isEmpty()) {
|
if (result != null && !result.isEmpty()) {
|
||||||
String resultSet = "(" + result.stream()
|
String resultSet = "(" + result.stream()
|
||||||
.map(s -> "'" + s.trim() + "'")
|
.map(s -> "'" + s.trim() + "'")
|
||||||
.collect(Collectors.joining(", ")) + ")";
|
.collect(Collectors.joining(", ")) + ")";
|
||||||
|
|
||||||
requestURL = requestURL.replace("${" + argument.getRequestArgumentName() + "}", resultSet);
|
requestURL = requestURL.replace("${" + argument.getRequestArgumentName() + "}", resultSet);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
catch (SQLException e) {
|
||||||
}
|
logger.error("Failed to execute query for RequestArgument", e);
|
||||||
catch (SQLException e) {
|
}
|
||||||
logger.error("Failed to execute query for RequestArgument", e);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resultMap.put("requestURL", requestURL
|
||||||
|
.replace("${DB}", request.getSqlConnectionParams().getJdbcDatabase())
|
||||||
|
.replace("${endpointArguments}", endpointArguments));
|
||||||
|
|
||||||
|
long endExecTime = System.currentTimeMillis();
|
||||||
|
logger.debug("SQL query built in {} ms", endExecTime - startExecTime);
|
||||||
|
|
||||||
|
return resultMap;
|
||||||
}
|
}
|
||||||
|
|
||||||
resultMap.put("requestURL", requestURL
|
|
||||||
.replace("${DB}", request.getSqlConnectionParams().getJdbcDatabase())
|
|
||||||
.replace("${endpointArguments}", endpointArguments));
|
|
||||||
|
|
||||||
long endExecTime = System.currentTimeMillis();
|
|
||||||
logger.debug("SQL query built in {} ms", endExecTime - startExecTime);
|
|
||||||
|
|
||||||
return resultMap;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private boolean executeSqlQuery(Connection connection, String query) throws SQLException {
|
private boolean executeSqlQuery(Connection connection, String query) throws SQLException {
|
||||||
try (PreparedStatement stmt = connection.prepareStatement(query)) {
|
try (PreparedStatement stmt = connection.prepareStatement(query)) {
|
||||||
|
|
@ -282,9 +282,9 @@ private Map<String, Object> buildSqlQuery(SqlRequest request, List<String> ids)
|
||||||
}
|
}
|
||||||
|
|
||||||
private Map<String, Object> executeSelectAqlRequest(ArangoDatabase arangoDb,
|
private Map<String, Object> executeSelectAqlRequest(ArangoDatabase arangoDb,
|
||||||
String aqlCollectionWrite,
|
String aqlCollectionWrite,
|
||||||
RequestArgument requestArgument,
|
RequestArgument requestArgument,
|
||||||
List<String> ids, String transactionId) {
|
List<String> ids, String transactionId) {
|
||||||
Map<String, Object> entities = new HashMap<>();
|
Map<String, Object> entities = new HashMap<>();
|
||||||
|
|
||||||
String url = requestArgument.getRequestArgumentURL();
|
String url = requestArgument.getRequestArgumentURL();
|
||||||
|
|
@ -338,14 +338,17 @@ private Map<String, Object> buildSqlQuery(SqlRequest request, List<String> ids)
|
||||||
|
|
||||||
Map<String, Object> bindVars = new HashMap<>();
|
Map<String, Object> bindVars = new HashMap<>();
|
||||||
// TODO: verify correctness of received entities and compare keys
|
// TODO: verify correctness of received entities and compare keys
|
||||||
Object writeEntity = entities.get(aqlCollectionWrite);
|
Object ids = entities.get(aqlCollectionWrite);
|
||||||
bindVars.put("ids", entities);
|
bindVars.put("ids", ids);
|
||||||
|
|
||||||
AqlQueryOptions aqlQueryOptions = new AqlQueryOptions().streamTransactionId(transactionId);
|
AqlQueryOptions aqlQueryOptions = new AqlQueryOptions().streamTransactionId(transactionId);
|
||||||
|
|
||||||
arangoDb.query(requestURL, null, bindVars, aqlQueryOptions);
|
try {
|
||||||
|
arangoDb.query(requestURL, null, bindVars, aqlQueryOptions);
|
||||||
logger.info("Successfully removed {}: {}", aqlCollectionWrite, writeEntity);
|
logger.info("Successfully removed {} for ids: {}", aqlCollectionWrite, ids);
|
||||||
|
} catch (Exception e) {
|
||||||
|
logger.error("Failed to execute AQL request: {}", e.getMessage(), e);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue