From de196866b7a23a4bb253d87b06783ecde465054b Mon Sep 17 00:00:00 2001 From: kochetkov Date: Thu, 19 Sep 2024 12:52:53 +0300 Subject: [PATCH] fixes from Maksim Tereshin --- .../org/micord/models/RequestArgument.java | 7 ++-- .../java/org/micord/service/SqlAqlService.java | 35 +++++++++++-------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/сonfig-data-executor/src/main/java/org/micord/models/RequestArgument.java b/сonfig-data-executor/src/main/java/org/micord/models/RequestArgument.java index 3c69964..bd98782 100644 --- a/сonfig-data-executor/src/main/java/org/micord/models/RequestArgument.java +++ b/сonfig-data-executor/src/main/java/org/micord/models/RequestArgument.java @@ -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 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 getAqlCollectionRead() { return aqlCollectionRead; } diff --git a/сonfig-data-executor/src/main/java/org/micord/service/SqlAqlService.java b/сonfig-data-executor/src/main/java/org/micord/service/SqlAqlService.java index 527ba79..8d047be 100644 --- a/сonfig-data-executor/src/main/java/org/micord/service/SqlAqlService.java +++ b/сonfig-data-executor/src/main/java/org/micord/service/SqlAqlService.java @@ -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 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 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 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();