fixes from Maksim Tereshin

This commit is contained in:
kochetkov 2024-09-19 12:52:53 +03:00
parent d762e3f034
commit de196866b7
2 changed files with 26 additions and 16 deletions

View file

@ -3,7 +3,9 @@ package org.micord.models;
import lombok.Setter; import lombok.Setter;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlRootElement;
import java.util.List;
/** /**
* @author Maksim Tereshin * @author Maksim Tereshin
@ -13,7 +15,7 @@ import javax.xml.bind.annotation.XmlRootElement;
public class RequestArgument { public class RequestArgument {
private String id; private String id;
private String aqlCollectionRead; private List<String> aqlCollectionRead;
private String requestURL; private String requestURL;
private SqlConnectionParams sqlConnectionParams; private SqlConnectionParams sqlConnectionParams;
@ -27,8 +29,9 @@ public class RequestArgument {
return id; return id;
} }
@XmlElementWrapper(name = "AqlCollectionReads")
@XmlElement(name = "AqlCollectionRead") @XmlElement(name = "AqlCollectionRead")
public String getAqlCollectionRead() { public List<String> getAqlCollectionRead() {
return aqlCollectionRead; return aqlCollectionRead;
} }

View file

@ -60,28 +60,35 @@ public class SqlAqlService {
} }
private String buildSqlQuery(SqlRequest request, String ids) { private String buildSqlQuery(SqlRequest request, String ids) {
StringBuilder clauseBuilder = new StringBuilder("id IN (" + ids + ")"); StringBuilder clauseBuilder = new StringBuilder();
if (request.getRequestArguments() != null && !request.getRequestArguments().isEmpty()) { if (request.getRequestArguments() != null && !request.getRequestArguments().isEmpty()) {
for (RequestArgument argument : request.getRequestArguments()) { for (RequestArgument argument : request.getRequestArguments()) {
try (Connection connection = DatabaseConnection.getConnection(argument.getSqlConnectionParams())) { clauseBuilder.append(argument.getId()).append(" IN (").append(ids).append(")");
String query = argument.getRequestURL();
List<String> result = fetchFileListFromDatabaseSQL(connection, query);
if (result != null && !result.isEmpty()) { if (argument.getSqlConnectionParams() != null) {
String resultSet = String.join(", ", result.stream() try (Connection connection = DatabaseConnection.getConnection(argument.getSqlConnectionParams())) {
.map(s -> "'" + s + "'") String query = argument.getRequestURL();
.toArray(String[]::new)); List<String> result = fetchFileListFromDatabaseSQL(connection, query);
clauseBuilder.append(" OR ").append(argument.getId()).append(" IN (").append(resultSet).append(")");
if (result != null && !result.isEmpty()) {
String resultSet = String.join(", ", result.stream()
.map(s -> "'" + s + "'")
.toArray(String[]::new));
clauseBuilder.append(" OR ").append(argument.getId()).append(" IN (").append(resultSet).append(")");
}
} catch (SQLException e) {
logger.error("Failed to execute query for RequestArgument", e);
} }
} catch (SQLException e) {
logger.error("Failed to execute query for RequestArgument", e);
} }
} }
} }
String clause = clauseBuilder.toString(); String clause = clauseBuilder.toString();
return request.getRequestURL().replace("${DB}", request.getSqlConnectionParams().getJdbcDatabase()).replace("${clause}", clause); return request.getRequestURL()
.replace("${DB}", request.getSqlConnectionParams().getJdbcDatabase())
.replace("${clause}", clause)
.replace("${ids}", ids);
} }
private void executeSqlQuery(Connection connection, String query) throws SQLException { private void executeSqlQuery(Connection connection, String query) throws SQLException {
@ -105,14 +112,14 @@ public class SqlAqlService {
ArangoDatabase arangoDb = ArangoDBConnection.getConnection(request.getAqlConnectionParams()); ArangoDatabase arangoDb = ArangoDBConnection.getConnection(request.getAqlConnectionParams());
RequestArgument requestArgument = request.getRequestArguments().get(0); RequestArgument requestArgument = request.getRequestArguments().get(0);
String aqlCollectionRead = requestArgument.getAqlCollectionRead(); List<String> aqlCollectionRead = requestArgument.getAqlCollectionRead();
String aqlCollectionWrite = requestArgument.getId(); String aqlCollectionWrite = requestArgument.getId();
StreamTransactionEntity tx = null; StreamTransactionEntity tx = null;
try { try {
StreamTransactionOptions options = new StreamTransactionOptions() StreamTransactionOptions options = new StreamTransactionOptions()
.writeCollections(aqlCollectionWrite) .writeCollections(aqlCollectionWrite)
.readCollections(aqlCollectionRead); .readCollections(aqlCollectionRead.toArray(new String[0]));
tx = arangoDb.beginStreamTransaction(options); tx = arangoDb.beginStreamTransaction(options);
String transactionId = tx.getId(); String transactionId = tx.getId();