Fix ArangoDB

This commit is contained in:
Maksim Tereshin 2024-11-21 18:46:06 +01:00
parent 27501b82e1
commit 2ed088e415
No known key found for this signature in database

View file

@ -145,9 +145,9 @@ public class RequestService {
try (Connection connection = DatabaseConnection.getConnection(
request.getSqlConnectionParams())) {
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()) {
ids.addAll(queryIds);
} else {
@ -163,64 +163,64 @@ public class RequestService {
}
}
private Map<String, Object> buildSqlQuery(SqlRequest request, List<String> ids) {
logger.debug("Starting building SQL query for request: {}", request.getRequestURL());
long startExecTime = System.currentTimeMillis();
Map<String, Object> resultMap = new HashMap<>();
String endpointArguments;
private Map<String, Object> buildSqlQuery(SqlRequest request, List<String> ids) {
logger.debug("Starting building SQL query for request: {}", request.getRequestURL());
long startExecTime = System.currentTimeMillis();
Map<String, Object> resultMap = new HashMap<>();
String endpointArguments;
String requestURL = request.getRequestURL();
String requestURL = request.getRequestURL();
if (requestURL.contains(":=")) {
endpointArguments = "'{" + ids.stream()
.map(String::trim)
.collect(Collectors.joining(", ")) + "}'";
} else {
endpointArguments = "(" + ids.stream()
.map(s -> "'" + s.trim() + "'")
.collect(Collectors.joining(", ")) + ")";
}
if (requestURL.contains(":=")) {
endpointArguments = "'{" + ids.stream()
.map(String::trim)
.collect(Collectors.joining(", ")) + "}'";
} else {
endpointArguments = "(" + ids.stream()
.map(s -> "'" + s.trim() + "'")
.collect(Collectors.joining(", ")) + ")";
}
if (request.getRequestArguments() != null && !request.getRequestArguments().isEmpty()) {
for (RequestArgument argument : request.getRequestArguments()) {
if (request.getRequestArguments() != null && !request.getRequestArguments().isEmpty()) {
for (RequestArgument argument : request.getRequestArguments()) {
if (argument.getRequestArgumentConnectionParams() != null) {
logger.debug("Opening connection for SQL RequestArgument: {}", argument.getRequestArgumentName());
try (Connection connection = DatabaseConnection.getConnection(
argument.getRequestArgumentConnectionParams())) {
String query = argument.getRequestArgumentURL();
List<String> result = fetchFileListFromDatabaseSQL(connection, query);
if (argument.getRequestArgumentConnectionParams() != null) {
logger.debug("Opening connection for SQL RequestArgument: {}", argument.getRequestArgumentName());
try (Connection connection = DatabaseConnection.getConnection(
argument.getRequestArgumentConnectionParams())) {
String query = argument.getRequestArgumentURL();
List<String> result = fetchFileListFromDatabaseSQL(connection, query);
resultMap.put("ids", result);
resultMap.put("ids", result);
if (result != null && !result.isEmpty()) {
String resultSet = "(" + result.stream()
.map(s -> "'" + s.trim() + "'")
.collect(Collectors.joining(", ")) + ")";
if (result != null && !result.isEmpty()) {
String resultSet = "(" + result.stream()
.map(s -> "'" + s.trim() + "'")
.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 {
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,
String aqlCollectionWrite,
RequestArgument requestArgument,
List<String> ids, String transactionId) {
String aqlCollectionWrite,
RequestArgument requestArgument,
List<String> ids, String transactionId) {
Map<String, Object> entities = new HashMap<>();
String url = requestArgument.getRequestArgumentURL();
@ -338,14 +338,17 @@ private Map<String, Object> buildSqlQuery(SqlRequest request, List<String> ids)
Map<String, Object> bindVars = new HashMap<>();
// TODO: verify correctness of received entities and compare keys
Object writeEntity = entities.get(aqlCollectionWrite);
bindVars.put("ids", entities);
Object ids = entities.get(aqlCollectionWrite);
bindVars.put("ids", ids);
AqlQueryOptions aqlQueryOptions = new AqlQueryOptions().streamTransactionId(transactionId);
arangoDb.query(requestURL, null, bindVars, aqlQueryOptions);
logger.info("Successfully removed {}: {}", aqlCollectionWrite, writeEntity);
try {
arangoDb.query(requestURL, null, bindVars, aqlQueryOptions);
logger.info("Successfully removed {} for ids: {}", aqlCollectionWrite, ids);
} catch (Exception e) {
logger.error("Failed to execute AQL request: {}", e.getMessage(), e);
}
}
}