Skip to content
Snippets Groups Projects
Commit 2aff4028 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

[FIX] Découverte des colonnes de la source : mauvais diagnostic lorsque la...

[FIX] Découverte des colonnes de la source : mauvais diagnostic lorsque la source ne contient aucune donnée
parent 8730ba44
No related branches found
No related tags found
No related merge requests found
Pipeline #9674 passed
...@@ -60,7 +60,7 @@ class QueryExecutor ...@@ -60,7 +60,7 @@ class QueryExecutor
$statement = $this->executeQuery($sql, $connection); $statement = $this->executeQuery($sql, $connection);
$rows = []; $rows = [];
while ($row = $statement->fetch(\PDO::FETCH_ASSOC)) { while ($row = $statement->fetchAssociative()) {
$rows[] = $row; $rows[] = $row;
yield $row; yield $row;
} }
...@@ -83,12 +83,16 @@ class QueryExecutor ...@@ -83,12 +83,16 @@ class QueryExecutor
/** /**
* @param string $sql * @param string $sql
* @param Connection $connection * @param Connection $connection
* @return array * @return array|null
*/ */
public function fetch($sql, Connection $connection) public function fetch($sql, Connection $connection)
{ {
$statement = $this->executeQuery($sql, $connection); $statement = $this->executeQuery($sql, $connection);
if ($statement->rowCount() === 0) {
return null;
}
return $statement->fetch(\PDO::FETCH_ASSOC); return $statement->fetch(\PDO::FETCH_ASSOC);
} }
......
...@@ -482,7 +482,7 @@ class DatabaseService ...@@ -482,7 +482,7 @@ class DatabaseService
/** /**
* Requête la Source pour obtenir le 1er enregistrements des données sources. * Requête la Source pour obtenir le 1er enregistrements des données sources.
* *
* @return array * @return array|null
*/ */
public function fetchSourceFirstRow() public function fetchSourceFirstRow()
{ {
......
...@@ -275,12 +275,16 @@ class FacadeService ...@@ -275,12 +275,16 @@ class FacadeService
break; break;
case $connection instanceof DbConnection: case $connection instanceof DbConnection:
$data = [ $this->databaseService->fetchSourceFirstRow() ]; $firstRow = $this->databaseService->fetchSourceFirstRow();
if ($firstRow === null) {
throw new RuntimeException(
"Impossible de découvrir la liste des colonnes à partir des données sources car celles-ci sont vides");
}
$data = [ $firstRow ];
break; break;
default: default:
throw new RuntimeException("Type de connexion source inattendue"); throw new RuntimeException("Type de connexion source inattendue");
break;
} }
} }
...@@ -295,11 +299,6 @@ class FacadeService ...@@ -295,11 +299,6 @@ class FacadeService
*/ */
private function extractColumnsFromSourceFetchResults(array $rows) private function extractColumnsFromSourceFetchResults(array $rows)
{ {
if (empty($rows)) {
throw new RuntimeException(
"Impossible de déterminer la liste des colonnes à partir des données sources car celles-ci sont vides");
}
$first = current($rows); $first = current($rows);
if ($first instanceof stdClass) { if ($first instanceof stdClass) {
...@@ -311,9 +310,7 @@ class FacadeService ...@@ -311,9 +310,7 @@ class FacadeService
"Impossible de déterminer la liste des colonnes à partir des données sources car leur type est inconnu (ni array ni stdClass)"); "Impossible de déterminer la liste des colonnes à partir des données sources car leur type est inconnu (ni array ni stdClass)");
} }
$columns = array_diff($columns, ['source_id', 'SOURCE_ID']); return array_diff($columns, ['source_id', 'SOURCE_ID']);
return $columns;
} }
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment