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/SelectQuery.java |  145 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 145 insertions(+), 0 deletions(-)

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectQuery.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectQuery.java
new file mode 100644
index 0000000..313ea90
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/SelectQuery.java
@@ -0,0 +1,145 @@
+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.tables.FdxTableRow;
+import com.megatim.fdxcommons.tools.database.contrat.QueryMetaData;
+import com.megatim.fdxcommons.tools.database.queries.metadata.SelectQueryResult;
+import com.megatim.fdxcommons.tools.database.queries.metadata.WhereQueryParameters;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxApiColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.FdxTableColumnData;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationColumnDefinitions;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.IndexColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.TokenColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.ResultSetMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import javax.naming.NamingException;
+
+/**
+ *
+ * @author Gabuntu
+ */
+public class SelectQuery implements QueryMetaData<SelectQueryResult> {
+
+    private final String tableName;
+    private final Connection connection;
+    private final QueryCriterion queryCriterion;
+    private final List<String> selectColumns;
+    private final int limit;
+    private final boolean withCustomColumns;
+    private final int offset;
+
+    public SelectQuery(String tableName, Connection connection, QueryCriterion queryCriterion, List<String> selectColumns, boolean withCustomColumns) {
+        this(tableName, connection, queryCriterion, selectColumns, -1, -1, withCustomColumns);
+    }
+
+    public SelectQuery(String tableName, Connection connection, QueryCriterion queryCriterion, List<String> selectColumns, int limit, int offset, boolean withCustomColumns) {
+        this.tableName = tableName;
+        this.connection = connection;
+        this.queryCriterion = queryCriterion;
+        this.selectColumns = selectColumns;
+        this.limit = limit;
+        this.offset = offset;
+        this.withCustomColumns = withCustomColumns;
+    }
+
+    @Override
+    public SelectQueryResult execute() throws Exception {
+        return result();
+    }
+
+    private SelectQueryResult result() throws NamingException, SQLException {
+        String query = selectQuery();
+        System.out.println("------------------------------------------");
+        System.out.println(query);
+        System.out.println("------------------------------------------------");
+
+        try ( PreparedStatement statement = connection.prepareStatement(query)) {
+
+            new DefaultPreparedStatementProcessor().process(statement, new WhereQueryParameters(queryCriterion).parameters());
+
+            long rowCount = 1;
+
+            ResultSet resultSet = statement.executeQuery();
+            ResultSetMetaData metaData = resultSet.getMetaData();
+            int columnCount = metaData.getColumnCount();
+
+            List<FdxTableRow> rows = new ArrayList<>();
+
+            int lastIndexRead = 0;
+
+            FdxApiColumnDefinitions apiColumnDefinitions = new FdxApiColumnDefinitions();
+            FdxConsultationColumnDefinitions fdxConsColumnDefinitions = new FdxConsultationColumnDefinitions();
+            final String tokenColumn = new TokenColumnDefinition().name();
+
+            while (resultSet.next()) {
+
+                List<FdxTableColumnData> data = new ArrayList<>();
+
+                for (int i = 1; i <= columnCount; i++) {
+
+                    String name = metaData.getColumnName(i).trim();
+                    Object value = resultSet.getObject(i);
+//                    int sqlDataType = metaData.getColumnType(i);
+
+                    if (!name.equals(tokenColumn)) {
+                        if (withCustomColumns) {
+                            data.add(new FdxTableColumnData(value, name, i));
+                        } else {
+                            if (!apiColumnDefinitions.isAppColumnDefinition(name) && !fdxConsColumnDefinitions.isAppColumnDefinition(name)) {
+                                data.add(new FdxTableColumnData(value, name, i));
+                            }
+                        }
+                        if (apiColumnDefinitions.isIndexColumn(name)) {
+                            int currentIndex = Integer.parseInt(value.toString());
+                            if (currentIndex > lastIndexRead) {
+                                lastIndexRead = currentIndex;
+                            }
+                        }
+                    }
+                }
+
+                rows.add(new FdxTableRow(rowCount++, data));
+            }
+            return new SelectQueryResult(lastIndexRead, rows);
+        }
+    }
+
+    private String selectQuery() {
+
+        StringBuilder query = new StringBuilder("SELECT ");
+
+        if (selectColumns.isEmpty()) {
+
+            query.append(" * ");
+
+        } else {
+
+            selectColumns.forEach(c -> query.append(c.toLowerCase()).append(","));
+            query.replace(query.length() - 1, query.length(), ""); //retirer la sernière virgule
+
+        }
+
+        query
+                .append(" FROM ")
+                .append(tableName);
+
+        query.append(new WhereQueryString(queryCriterion).query());
+        query.append(" ORDER BY ").append(new IndexColumnDefinition().name());
+
+        if (limit > 0 && offset >= 0) {
+
+            query
+                    .append(" LIMIT ")
+                    .append(limit)
+                    .append(" OFFSET ")
+                    .append(offset);
+        }
+        return query.toString();
+    }
+}

--
Gitblit v1.10.0