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