fix limit

This commit is contained in:
Eduard Tihomiorv 2025-11-13 16:31:57 +03:00
parent a504cd251c
commit cbab80fac3

View file

@ -35,6 +35,7 @@ public class DownloadService {
private static final Logger logger = LoggerFactory.getLogger(DownloadService.class);
private static final String REQUEST_WITH_ADDITIONAL_ID = "requestWithAdditionalId";
private static final int limit = 600000;
public File download(BaseDownloadRequest selectedRequest, List<String> ids, RequestParameters parameters, Map<String, Boolean> validationResults) throws SQLException {
LocalDate startDate = parameters.getStartDate();
@ -72,7 +73,12 @@ public class DownloadService {
// );
// }
return writeResultsToCsv(entities, request.getAqlDownloadLimit());
int arangoLimit = limit;
if (request.getAqlDownloadLimit() != null) {
arangoLimit = request.getAqlDownloadLimit();
}
return writeResultsToCsv(entities, arangoLimit);
} catch (ArangoDBException e) {
logger.error("Error connecting to ArangoDB or executing AQL query: {}", e.getMessage(), e);
@ -115,23 +121,23 @@ public class DownloadService {
List<File> allFiles = new ArrayList<>();
int offset = 0;
int pageIndex = 1;
int limit = 600000;
int postgresLimit = limit;
if (request.getRequestArgumentLimit() != null) {
limit = request.getRequestArgumentLimit();
postgresLimit = request.getRequestArgumentLimit();
}
List<String[]> results = new ArrayList<>();
try (Connection connection = DatabaseConnection.getConnection(
request.getSqlConnectionParams())) {
Map<String, Object> query = buildSqlQuery(request, ids, startDate, endDate,
validationResults, limit, offset
validationResults, postgresLimit, offset
);
if (query.get(REQUEST_WITH_ADDITIONAL_ID) != null) {
pageIndex--;
SqlDownloadBuildQueryResponse response = (SqlDownloadBuildQueryResponse) query.get(REQUEST_WITH_ADDITIONAL_ID);
String url = response.getSql();
String paramName = response.getParamName();
Collection<List<String>> pages = partitionList(response.getParams(), limit);
url = url.replaceAll(";(?=[^;]*$)", " ") + " LIMIT " + limit + " OFFSET "
Collection<List<String>> pages = partitionList(response.getParams(), postgresLimit);
url = url.replaceAll(";(?=[^;]*$)", " ") + " LIMIT " + postgresLimit + " OFFSET "
+ offset + ";";
for (List<String> page : pages) {
pageIndex++;
@ -151,11 +157,11 @@ public class DownloadService {
}
File file = writeSingleSqlCsvFile(results, "download-part" + pageIndex + "-", ".csv");
allFiles.add(file);
if (results.size() - 1 < limit) {
if (results.size() - 1 < postgresLimit) {
break;
}
String oldPagination = " OFFSET " + newOffset + ";";
newOffset += limit;
newOffset += postgresLimit;
String newPagination = " OFFSET " + newOffset + ";";
newUrl = newUrl.replace(oldPagination, newPagination);
pageIndex++;
@ -171,11 +177,11 @@ public class DownloadService {
}
File file = writeSingleSqlCsvFile(results, "download-part" + pageIndex + "-", ".csv");
allFiles.add(file);
if (results.size() - 1 < limit) {
if (results.size() - 1 < postgresLimit) {
break;
}
String oldPagination = " OFFSET " + offset + ";";
offset += limit;
offset += postgresLimit;
String newPagination = " OFFSET " + offset + ";";
requestURL = requestURL.replace(oldPagination, newPagination);
pageIndex++;