From 23a46b4be35277e06ec89f48730eeb694e686be8 Mon Sep 17 00:00:00 2001
From: Kenmegne <stephanie.kenmegne@gmail.com>
Date: Thu, 18 Jun 2026 15:40:06 +0000
Subject: [PATCH] add fdx-commons and fdx-consultation
---
fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/AggregationQuery.java | 99 +++++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 99 insertions(+), 0 deletions(-)
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/AggregationQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/AggregationQuery.java
new file mode 100644
index 0000000..fab1510
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/AggregationQuery.java
@@ -0,0 +1,99 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.model.enumeration.FonctionAggregation;
+import com.megatim.fdxcommons.tools.database.queries.metadata.QueryCriterion;
+import com.megatim.fdxcommons.tools.database.contrat.DefaultPreparedStatementProcessor;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.IntStream;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class AggregationQuery implements QueryMetaData<List<String[]>> {
+
+ private final String tableName;
+ private final Connection connection;
+ private final QueryCriterion queryCriterion;
+ private final String targetColumn;
+ private final FonctionAggregation fonctionAggregation;
+ private final List<String> groupingColumns;
+
+ public AggregationQuery(String tableName, Connection connection, QueryCriterion queryCriterion, String targetColumn, List<String> groupingColumns, FonctionAggregation fonctionAggregation) {
+ this.tableName = tableName;
+ this.targetColumn = targetColumn;
+ this.connection = connection;
+ this.queryCriterion = queryCriterion;
+ this.groupingColumns = groupingColumns;
+ this.fonctionAggregation = fonctionAggregation;
+ }
+
+ @Override
+ public List<String[]> execute() throws Exception {
+
+ System.out.println("<------------------------------------------------------------------------------------------------------------------------------->");
+ System.out.println(aggregationQuery());
+ System.out.println("<------------------------------------------------------------------------------------------------------------------------------->");
+
+ try (PreparedStatement statement = connection.prepareStatement(aggregationQuery())) {
+
+ new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+
+ try ( ResultSet resultSet = statement.executeQuery()) {
+
+ List<String[]> results = new ArrayList<>();
+
+ while (resultSet.next()) {
+
+ String[] result = new String[groupingColumns.size() + 1];
+ result[0] = resultSet.getString(aggregationColumnName());
+ for (int i = 0; i < groupingColumns.size(); i++) {
+ String r = resultSet.getString(groupingColumns.get(i));
+ result[i + 1] = r != null ? r : "";
+ }
+
+ results.add(result);
+ }
+
+ return results;
+
+ }
+ }
+ }
+
+ private String aggregationQuery() {
+ StringBuilder query = new StringBuilder("SELECT COALESCE(" + fonctionAggregation.toString() + "(" + targetColumn + "), 0) AS " + aggregationColumnName()
+ + groupingColumnsSelection() + " FROM ").append(tableName);
+ query.append(new WhereQueryString(queryCriterion).query());
+ query.append(new GroupByQuery(groupingColumns).query());
+ return query.toString();
+ }
+
+ private String aggregationColumnName() {
+ return tableName + "_" + fonctionAggregation.toString();
+ }
+
+ private String groupingColumnsSelection() {
+ StringBuilder query = new StringBuilder();
+
+ int size = groupingColumns.size();
+ if (size > 0) {
+ query.append(", ");
+ }
+ IntStream.range(0, size).forEach(index -> {
+ String column = groupingColumns.get(index);
+ query.append(column);
+ if ((index + 1) < size) {
+ query.append(",");
+ }
+ });
+
+ return query.toString();
+ }
+}
--
Gitblit v1.10.0