Commit 267b7ccf authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Ajout du test de présence de la colonne de référence et du nombre de colonnes...

Ajout du test de présence de la colonne de référence et du nombre de colonnes dans les données source
parent 9d9455ac
Loading
Loading
Loading
Loading
+19 −5
Changes for src/UnicaenDbImport/DatabaseFacade.php: 19 added lines, 5 removed lines.
Original line number Diff line number Diff line
@@ -230,14 +230,18 @@ class DatabaseFacade
    }

    /**
     * Réalise la requête associée à la source si non déjà fait et fixe les colonnes présentes dans source.
     * Requête la Source pour déterminer la liste des colonnes et les données sources elles-mêmes.
     * Ces informations sont ensuite disponibles dans la Source en question.
     *
     * @param SourceInterface $source
     * @return array Le résultat de la requête associée à la source
     * @return array Les données sources
     *
     * @see SourceInterface::getColumns()
     * @see SourceInterface::getData()
     */
    public function executeSelectSource(SourceInterface $source)
    {
        if (!$source->getData()) {
        if (empty($source->getData())) {
            $selectSql = $this->codeGenerator->generateSQLForSelectFromSource($source);
            $result = $this->queryExecutor->fetchAll($selectSql, $source->getConnection());

@@ -248,8 +252,18 @@ class DatabaseFacade

            $columns = array_keys($result[0]);

            // retrait de la colonne $source->getSourceCodeColumn()
            unset($columns[array_search($source->getSourceCodeColumn(), $columns)]);
            // recherche puis retrait de la colonne $source->getSourceCodeColumn()
            $key = array_search($sourceCodeCol = $source->getSourceCodeColumn(), $columns);
            if ($key === FALSE) {
                throw new RuntimeException(
                    "La colonne de référence '$sourceCodeCol' est introuvable dans les données sources");
            }
            unset($columns[$key]);

            if (empty($columns)) {
                throw new RuntimeException(
                    "Les données sources doivent comporter au moins une colonne en plus de la colonne de référence '$sourceCodeCol'");
            }

            $source->setData($result);
            $source->setColumns($columns);