Commit 26f30af5 authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Mise à jour du corps de package : on teste au préalable que la séquence...

Mise à jour du corps de package : on teste au préalable que la séquence correspondant à la table existe bien. Evite d'avoir une mise à jour qui échoue avec l'erreur du genre "package compilé avec erreur".
parent aca5597e
Loading
Loading
Loading
Loading
+25 −0
Original line number Diff line number Diff line
@@ -354,12 +354,37 @@ class QueryGeneratorService extends AbstractService
        $tables = $this->getTables();
        $result = [];
        foreach ($tables as $table) {
            $this->assertSequenceExists($table);
            $result[$table] = $this->makeProcBody($table);
        }

        return $result;
    }

    /**
     * Teste que la séquence correspondant à la table spécifiée existe bien.
     *
     * @param string $table
     * @throws \Doctrine\DBAL\DBALException En cas d'erreur en BDD
     * @throws Exception Si la séquence n'existe pas.
     *
     */
    protected function assertSequenceExists($table)
    {
        $sql = 'SELECT COUNT(*) SEQ_FOUND FROM USER_SEQUENCES WHERE SEQUENCE_NAME = :sequenceName';

        $sequenceName = strtoupper($table) . '_ID_SEQ';
        $stmt = $this->getEntityManager()->getConnection()->executeQuery($sql, ['sequenceName' => $sequenceName]);

        $sequenceFound = false;
        if ($r = $stmt->fetch()) {
            $sequenceFound = (bool)(int)$r['SEQ_FOUND'];
        }
        if (! $sequenceFound) {
            throw new Exception("La séquence '$sequenceName' doit être créée (ex: CREATE SEQUENCE $sequenceName)");
        }
    }



    /**