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/CountQuery.java | 95 +++++++++++++++++++++++++++++++++++++++++++++++
1 files changed, 95 insertions(+), 0 deletions(-)
diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CountQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CountQuery.java
new file mode 100644
index 0000000..2067896
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/CountQuery.java
@@ -0,0 +1,95 @@
+package com.megatim.fdxcommons.tools.database.queries;
+
+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 CountQuery implements QueryMetaData<List<String[]>> {
+
+ private final String tableName;
+ private final Connection connection;
+ private final QueryCriterion queryCriterion;
+ private final List<String> groupingColumns;
+
+ public CountQuery(String tableName, Connection connection, QueryCriterion queryCriterion, List<String> groupingColumns) {
+ this.tableName = tableName;
+ this.connection = connection;
+ this.queryCriterion = queryCriterion;
+ this.groupingColumns = groupingColumns;
+ }
+
+ @Override
+ public List<String[]> execute() throws Exception {
+
+ System.out.println("<------------------------------------------------------------------------------------------------------------------------------->");
+ System.out.println(countQuery());
+ System.out.println("<------------------------------------------------------------------------------------------------------------------------------->");
+
+ try ( PreparedStatement statement = connection.prepareStatement(countQuery())) {
+
+ 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(countColumnName());
+ 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 countQuery() {
+ StringBuilder query = new StringBuilder("SELECT COUNT(*) AS " + countColumnName() + groupingColumnsSelection() + " FROM ").append(tableName);
+ query.append(new WhereQueryString(queryCriterion).query());
+
+ query.append(new GroupByQuery(groupingColumns).query());
+ return query.toString();
+ }
+
+ private String countColumnName() {
+ return tableName + "_count";
+ }
+
+ 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