From 30e83a1801a637d8e141b3e313673f2c4772f312 Mon Sep 17 00:00:00 2001
From: Bertrand GAUTHIER <bertrand.gauthier@unicaen.fr>
Date: Thu, 13 Jul 2023 12:11:51 +0200
Subject: [PATCH] =?UTF-8?q?[FIX]=20D=C3=A9termination=20des=20colonnes=20d?=
 =?UTF-8?q?e=20la=20table=20source=20:=20correction=20d'un=20bug=20potenti?=
 =?UTF-8?q?el=20+=20am=C3=A9lioration=20de=20la=20remont=C3=A9e=20d'erreur?=
 =?UTF-8?q?.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 CHANGELOG.md                                                | 1 +
 src/UnicaenDbImport/Service/Database/DatabaseService.php    | 6 +++++-
 .../Service/Facade/AbstractFacadeService.php                | 3 ++-
 3 files changed, 8 insertions(+), 2 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8a6b193..a31fcd2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -11,6 +11,7 @@ Changelog
 - [FIX] Vue du différentiel d'une synchro : prise en compte du paramètre de config 'source_code_column'.
 - [FIX] Correction du SQL générant V_DIFF_* pour le cas d'une synchro depuis une source non-importable
 - [FIX] Import : correction du SQL généré en cas de valeur booléenne dans les données sources.
+- [FIX] Détermination des colonnes de la table source : correction d'un bug potentiel + amélioration de la remontée d'erreur.
 - Nouvelles commandes pour lister les imports ('list imports') et synchros ('list synchros'). 
 - Synchro : spécification dans la table SOURCE (colonnes 'synchro_*_enabled') des opérations autorisées ou non lors de la synchro (màj bdd requise).
   Exemple : ne pas autoriser le 'delete' est utile lorsque les données sources sont obtenues de façon incrémentale
diff --git a/src/UnicaenDbImport/Service/Database/DatabaseService.php b/src/UnicaenDbImport/Service/Database/DatabaseService.php
index 0b850ab..d6eee7d 100644
--- a/src/UnicaenDbImport/Service/Database/DatabaseService.php
+++ b/src/UnicaenDbImport/Service/Database/DatabaseService.php
@@ -483,10 +483,14 @@ class DatabaseService extends AbstractDatabaseService
      */
     public function fetchSourceTableColumnNames(): array
     {
-        $selectSql = $this->codeGenerator->generateSQLForSelectSourceTableColumnsInformation($this->source);
+        $sourceTableName = $this->source->getTable();
+        $selectSql = $this->codeGenerator->generateSQLForSelectSourceTableColumnsInformation($sourceTableName);
 
         try {
             $result = $this->queryExecutor->fetchAll($selectSql, $this->source->getConnection());
+            if (!$result) {
+                throw DatabaseServiceException::error("Impossible de déterminer les colonnes de la table/vue source '$sourceTableName'");
+            }
             return array_map(fn ($row) => $row['column_name'], $result);
         } catch (Exception $e) {
             throw DatabaseServiceException::error("Erreur lors du fetch", $e);
diff --git a/src/UnicaenDbImport/Service/Facade/AbstractFacadeService.php b/src/UnicaenDbImport/Service/Facade/AbstractFacadeService.php
index 18ec944..9d5328c 100644
--- a/src/UnicaenDbImport/Service/Facade/AbstractFacadeService.php
+++ b/src/UnicaenDbImport/Service/Facade/AbstractFacadeService.php
@@ -235,7 +235,8 @@ abstract class AbstractFacadeService
             try {
                 $columns = $this->databaseService->fetchSourceTableColumnNames();
             } catch (DatabaseServiceException $e) {
-                throw new Exception("Erreur rencontrée lors de l'obtention des colonnes de la table source", null, $e);
+                throw new Exception(
+                    "Erreur rencontrée lors de l'obtention des colonnes de la table source : " . $e->getMessage(), null, $e);
             }
         }
 
-- 
GitLab