diff --git a/CHANGELOG.md b/CHANGELOG.md index 8a6b1934f99d477fe3a2b1cd481e81eb30856eab..a31fcd2e2cd656e52e175ed453557ca5c75ab549 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 0b850ab07f18bd8cf30643f5315b7c06bbadd92a..d6eee7dd47bd462d6436b31663cd386c0d76f09a 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 18ec944d8c945f2f7ffb24626d9e299bf965f8d5..9d5328c65e2f797cdb80cf778998da7ad9356c21 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); } }