fixes from Maksim Tereshin
This commit is contained in:
parent
d762e3f034
commit
de196866b7
2 changed files with 26 additions and 16 deletions
|
|
@ -3,7 +3,9 @@ package org.micord.models;
|
|||
import lombok.Setter;
|
||||
|
||||
import javax.xml.bind.annotation.XmlElement;
|
||||
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||
import javax.xml.bind.annotation.XmlRootElement;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Maksim Tereshin
|
||||
|
|
@ -13,7 +15,7 @@ import javax.xml.bind.annotation.XmlRootElement;
|
|||
public class RequestArgument {
|
||||
|
||||
private String id;
|
||||
private String aqlCollectionRead;
|
||||
private List<String> aqlCollectionRead;
|
||||
private String requestURL;
|
||||
private SqlConnectionParams sqlConnectionParams;
|
||||
|
||||
|
|
@ -27,8 +29,9 @@ public class RequestArgument {
|
|||
return id;
|
||||
}
|
||||
|
||||
@XmlElementWrapper(name = "AqlCollectionReads")
|
||||
@XmlElement(name = "AqlCollectionRead")
|
||||
public String getAqlCollectionRead() {
|
||||
public List<String> getAqlCollectionRead() {
|
||||
return aqlCollectionRead;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -60,28 +60,35 @@ public class SqlAqlService {
|
|||
}
|
||||
|
||||
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()) {
|
||||
for (RequestArgument argument : request.getRequestArguments()) {
|
||||
try (Connection connection = DatabaseConnection.getConnection(argument.getSqlConnectionParams())) {
|
||||
String query = argument.getRequestURL();
|
||||
List<String> result = fetchFileListFromDatabaseSQL(connection, query);
|
||||
clauseBuilder.append(argument.getId()).append(" IN (").append(ids).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(")");
|
||||
if (argument.getSqlConnectionParams() != null) {
|
||||
try (Connection connection = DatabaseConnection.getConnection(argument.getSqlConnectionParams())) {
|
||||
String query = argument.getRequestURL();
|
||||
List<String> result = fetchFileListFromDatabaseSQL(connection, query);
|
||||
|
||||
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();
|
||||
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 {
|
||||
|
|
@ -105,14 +112,14 @@ public class SqlAqlService {
|
|||
ArangoDatabase arangoDb = ArangoDBConnection.getConnection(request.getAqlConnectionParams());
|
||||
|
||||
RequestArgument requestArgument = request.getRequestArguments().get(0);
|
||||
String aqlCollectionRead = requestArgument.getAqlCollectionRead();
|
||||
List<String> aqlCollectionRead = requestArgument.getAqlCollectionRead();
|
||||
String aqlCollectionWrite = requestArgument.getId();
|
||||
|
||||
StreamTransactionEntity tx = null;
|
||||
try {
|
||||
StreamTransactionOptions options = new StreamTransactionOptions()
|
||||
.writeCollections(aqlCollectionWrite)
|
||||
.readCollections(aqlCollectionRead);
|
||||
.readCollections(aqlCollectionRead.toArray(new String[0]));
|
||||
|
||||
tx = arangoDb.beginStreamTransaction(options);
|
||||
String transactionId = tx.getId();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue