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 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue