Commit 5167885e authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

DatabaseService::truncateDestinationTable() : on vérifie désormais que les...

DatabaseService::truncateDestinationTable() : on vérifie désormais que les données contiennent un source_id, sinon le vidage partiel est inopérant.
parent 850a5bd7
Loading
Loading
Loading
Loading
+8 −1
Changes for src/UnicaenDbImport/Service/Database/DatabaseService.php: 8 added lines, 1 removed line.
Original line number Diff line number Diff line
@@ -345,6 +345,8 @@ class DatabaseService
     */
    public function truncateDestinationTable()
    {
        $table = $this->destination->getTable();

        // détermination de l'id de la source des données à insérer, pour n'effacer que les données de cette source
        // (si aucune donnée à insérer, basta)
        $data = $this->source->getData();
@@ -354,8 +356,13 @@ class DatabaseService
        $row1 = reset($data);
        $preparedRow1 = $this->prepareSourceData($row1);
        $sourceId = $preparedRow1['source_id'] ?? $preparedRow1['SOURCE_ID'];
        if (!$sourceId) {
            throw DatabaseServiceException::error(
                "Les données sources ont un 'source_id' absent ou vide, cela empêche le vidage partiel de la table destination '$table'"
            );
        }

        $sql = $this->codeGenerator->generateSQLForClearTable($table = $this->destination->getTable());
        $sql = $this->codeGenerator->generateSQLForClearTable($table);
        $sql .= " WHERE source_id = (SELECT id FROM source WHERE code = '$sourceId')";
        try {
            $this->queryExecutor->exec($sql, $this->destination->getConnection());