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