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

diff --git a/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/TableDefinitionQueries.java b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/TableDefinitionQueries.java
new file mode 100644
index 0000000..60c4dd4
--- /dev/null
+++ b/fdx-commons/fdxcommons-tools/src/main/java/com/megatim/fdxcommons/tools/database/queries/TableDefinitionQueries.java
@@ -0,0 +1,169 @@
+/*
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Licenses/license-default.txt to change this license
+ * Click nbfs://nbhost/SystemFileSystem/Templates/Classes/Class.java to edit this template
+ */
+package com.megatim.fdxcommons.tools.database.queries;
+
+import com.megatim.fdxcommons.tools.database.contrat.AppColumnDefinition;
+import com.megatim.fdxcommons.tools.database.tables.appcolumns.FdxConsultationIndexColumnDefinition;
+import java.sql.Connection;
+import java.sql.PreparedStatement;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.sql.Statement;
+
+/**
+ *
+ * @author ASUS
+ */
+public class TableDefinitionQueries {
+
+    private final String tableName;
+    private final Connection connection;
+
+    public TableDefinitionQueries(String tableName, Connection connection) {
+        this.tableName = tableName;
+        this.connection = connection;
+    }
+
+    public boolean tableExists() throws SQLException {
+        Long nb = 0L;
+
+        try ( PreparedStatement statement = connection.prepareStatement(tableExistsQuery())) {
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                nb = resultSet.getLong(1);
+            }
+        }
+        return nb == 1;
+    }
+    
+    public boolean constraintExists(String constraintName) throws SQLException {
+        Long nb = 0L;
+
+        try ( PreparedStatement statement = connection.prepareStatement(constraintExistsQuery(constraintName))) {
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                nb = resultSet.getLong(1);
+            }
+        }
+        return nb == 1;
+    }
+
+    public boolean columnExists(String columnName) throws SQLException {
+        Long nb = 0L;
+
+        try ( PreparedStatement statement = connection.prepareStatement(columnExistsQuery(columnName))) {
+            ResultSet resultSet = statement.executeQuery();
+
+            if (resultSet.next()) {
+                nb = resultSet.getLong(1);
+            }
+        }
+        return nb == 1;
+    }
+
+    private String columnExistsQuery(String columnName) {
+        return "SELECT COUNT(column_name)"
+                + " FROM information_schema.columns"
+                + " WHERE table_name = '" + tableName + "' AND column_name = '" + columnName + "'";
+    }
+
+    private String constraintExistsQuery(String constraintName) {
+        return "SELECT COUNT(*) FROM  pg_constraint WHERE conname =  '" + constraintName + "'";
+    }
+
+    private String tableExistsQuery() {
+        return "SELECT  COUNT(table_name)"
+                + " FROM  information_schema.tables"
+                + " WHERE  table_schema LIKE 'public' AND  table_type LIKE 'BASE TABLE' AND table_name = '" + tableName + "'";
+    }
+
+    public void addAppColumn(AppColumnDefinition appColumn) throws SQLException {
+
+        try ( Statement stmt = connection.createStatement()) {
+            String query = addAppColumnQuery(appColumn).toString();
+            stmt.execute(query);
+        }
+    }
+
+    public void dropAppColumn(AppColumnDefinition appColumn) throws SQLException {
+        String query = dropColumnQuery(appColumn);
+        
+        try ( Statement stmt = connection.createStatement()) {
+            stmt.execute(query);
+        }
+    }
+
+    public void dropConstraint(String constraintName) throws SQLException {
+        String query = dropConstraintQuery(constraintName);
+        
+        try ( Statement stmt = connection.createStatement()) {
+            stmt.execute(query);
+        }
+    }
+
+    public void addPkConstraint(String constraintName) throws SQLException {
+        String query = addPkConstraintQuery(constraintName);
+        
+        try ( Statement stmt = connection.createStatement()) {
+            stmt.execute(query);
+        }
+    }
+
+    private String dropColumnQuery(AppColumnDefinition column) {
+        StringBuilder query = new StringBuilder("ALTER TABLE ");
+
+        query
+                .append(tableName)
+                .append(" DROP COLUMN IF EXISTS ")
+                .append(column.name())
+                .append(";");
+
+        return query.toString();
+    }
+
+    private String dropConstraintQuery(String constraintName) {
+        StringBuilder query = new StringBuilder();
+
+        query.append("ALTER TABLE ")
+                .append(tableName)
+                .append(" DROP CONSTRAINT IF EXISTS ")
+                .append(constraintName)
+                .append(";");
+
+        return query.toString();
+    }
+
+    private String addPkConstraintQuery(String constraintName) {
+        StringBuilder query = new StringBuilder();
+
+        query.append("ALTER TABLE ")
+                .append(tableName)
+                .append(" ADD CONSTRAINT ")
+                .append(constraintName)
+                .append(" PRIMARY KEY(")
+                .append(new FdxConsultationIndexColumnDefinition().name())
+                .append(");");
+
+        return query.toString();
+    }
+
+    private StringBuilder addAppColumnQuery(AppColumnDefinition column) {
+        StringBuilder query = new StringBuilder("ALTER TABLE ");
+        query
+                .append(tableName)
+                .append(" ADD COLUMN IF NOT EXISTS ")
+                .append(column.name())
+                .append(" ")
+                .append(column.type())
+                .append(column.isNull() ? " NULL " : " NOT NULL ");
+
+        if (column.defaultValue() != null) {
+            query.append("DEFAULT ").append(column.defaultValue());
+        }
+        return query;
+    }
+}

--
Gitblit v1.10.0