Commit e5748110 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

vues, mviews, index OK

autres modifs générales
parent 809eeb43
Loading
Loading
Loading
Loading
Loading
+29 −19
Original line number Diff line number Diff line
@@ -11,6 +11,7 @@ use Unicaen\BddAdmin\Exception\BddCompileException;
use Unicaen\BddAdmin\Exception\BddException;
use Unicaen\BddAdmin\Exception\BddIndexExistsException;
use Unicaen\BddAdmin\Logger\LoggerAwareTrait;
use Unicaen\BddAdmin\Manager\CompilableInterface;
use Unicaen\BddAdmin\Manager\IndexManagerInterface;
use Unicaen\BddAdmin\Manager\ManagerInterface;
use Unicaen\BddAdmin\Manager\MaterializedViewManagerInteface;
@@ -59,16 +60,16 @@ class Bdd

    private array $changements = [
        Ddl::SCHEMA . '.create'             => 'Création des schémas',
        Ddl::SEQUENCE . '.rename'           => 'Renomage des séquences',
        Ddl::TABLE . '.rename'              => 'Renomage des tables',
        Ddl::VIEW . '.rename'               => 'Renomage des vues',
        Ddl::MATERIALIZED_VIEW . '.rename'  => 'Renomage des vues matérialisées',
        Ddl::PACKAGE . '.rename'            => 'Renomage des packages',
        Ddl::INDEX . '.rename'              => 'Renomage des indexes',
        Ddl::TRIGGER . '.rename'            => 'Renomage des triggers',
        Ddl::PRIMARY_CONSTRAINT . '.rename' => 'Renomage des clés primaires',
        Ddl::REF_CONSTRAINT . '.rename'     => 'Renomage des clés étrangères',
        Ddl::UNIQUE_CONSTRAINT . '.rename'  => 'Renomage des contraintes d\'unicité',
        Ddl::SEQUENCE . '.rename'           => 'Renommage des séquences',
        Ddl::TABLE . '.rename'              => 'Renommage des tables',
        Ddl::VIEW . '.rename'               => 'Renommage des vues',
        Ddl::MATERIALIZED_VIEW . '.rename'  => 'Renommage des vues matérialisées',
        Ddl::PACKAGE . '.rename'            => 'Renommage des packages',
        Ddl::INDEX . '.rename'              => 'Renommage des indexes',
        Ddl::TRIGGER . '.rename'            => 'Renommage des triggers',
        Ddl::PRIMARY_CONSTRAINT . '.rename' => 'Renommage des clés primaires',
        Ddl::REF_CONSTRAINT . '.rename'     => 'Renommage des clés étrangères',
        Ddl::UNIQUE_CONSTRAINT . '.rename'  => 'Renommage des contraintes d\'unicité',
        Ddl::TRIGGER . '.drop'              => 'Suppression des triggers',
        Ddl::SEQUENCE . '.drop'             => 'Suppression des séquences',
        Ddl::VIEW . '.drop'                 => 'Suppression des vues',
@@ -324,9 +325,8 @@ class Bdd

    public function manager(string $name): ManagerInterface
    {
        try {
        $ddlClass = $this->driver->getDdlClass($name);
        }catch(\Exception $e){
        if (!$ddlClass){
            $ddlClass = VoidManager::class;
        }

@@ -585,7 +585,7 @@ class Bdd
            [$ddlName, $action] = explode('.', $changement);
            if ($action == 'create') {
                $manager = $this->manager($ddlName);
                if (isset($ddl[$ddlName])) {
                if ((!$manager instanceof VoidManager) && isset($ddl[$ddlName])) {
                    $queries = $this->alterDdlObject($manager, $action, [], $ddl[$ddlName]);
                    if ($queries) {
                        $this->logBegin($label);
@@ -631,6 +631,7 @@ class Bdd
            [$ddlName, $action] = explode('.', $changement);

            $manager = $this->manager($ddlName);
            if (!$manager instanceof VoidManager) {
                $objectFilter = $filters->get($ddlName);

                if (!($filters->isExplicit() && $objectFilter->isEmpty())) {
@@ -653,6 +654,7 @@ class Bdd
                    }
                }
            }
        }

        $this->compilerTout();
        $this->logEnd('Changements appliqués');
@@ -675,6 +677,7 @@ class Bdd

            if ($action == 'drop' && !($filters->isExplicit() && $filters->get($ddlName)->isEmpty())) {
                $manager = $this->manager($ddlName);
                if (!$manager instanceof VoidManager) {
                    $ddl = $manager->get($filters->get($ddlName));
                    if (!empty($ddl)) {
                        $queries = $this->alterDdlObject($manager, 'drop', $ddl, []);
@@ -693,6 +696,7 @@ class Bdd
                    }
                }
            }
        }
        $this->logEnd("Base de données vide");
    }

@@ -728,15 +732,17 @@ class Bdd
        $cc = count($this->changements);
        $c = 0;
        foreach ($this->changements as $changement => $label) {
            $c++;
            [$ddlName, $action] = explode('.', $changement);
            $manager = $this->manager($ddlName);
            if (!$manager instanceof VoidManager) {
                $c++;
                $this->logMsg($label . " (opération $c/$cc) ...", true);
            $object = $this->manager($ddlName);
            $queries = $this->alterDdlObject($object, $action, $old[$ddlName] ?: [], $new[$ddlName] ?: []);
                $queries = $this->alterDdlObject($manager, $action, $old[$ddlName] ?: [], $new[$ddlName] ?: []);
                if (!empty($queries)) {
                    $diff->set($changement, $queries);
                }
            }
        }
        $this->logEnd();

        return $diff;
@@ -770,14 +776,16 @@ class Bdd
        $cc = count($this->changements);
        $c = 0;
        foreach ($this->changements as $changement => $label) {
            $c++;
            $manager = $this->manager($ddlName);
            [$ddlName, $action] = explode('.', $changement);
            $object = $this->manager($ddlName);
            $queries = $this->alterDdlObject($object, $action, $src[$ddlName] ?: [], $dest[$ddlName] ?: []);
            if (!$manager instanceof VoidManager) {
                $c++;
                $queries = $this->alterDdlObject($manager, $action, $src[$ddlName] ?: [], $dest[$ddlName] ?: []);
                if (!empty($queries)) {
                    $diff->set($changement, $queries);
                }
            }
        }

        return $diff;
    }
@@ -847,6 +855,7 @@ class Bdd
        $compileTypes = [Ddl::PACKAGE, Ddl::VIEW, Ddl::TRIGGER];
        foreach ($compileTypes as $compileType) {
            $manager = $this->manager($compileType);
            if ($manager instanceof CompilableInterface) {
                $list = $manager->getList();
                foreach ($list as $name) {
                    try {
@@ -858,6 +867,7 @@ class Bdd
                    }
                }
            }
        }
        $this->logEnd("Fin de la compilation");

        return $errors;
+1 −1
Original line number Diff line number Diff line
@@ -36,6 +36,6 @@ interface DriverInterface



    public function getDdlClass(string $name): string;
    public function getDdlClass(string $name): ?string;

}
 No newline at end of file
+3 −25
Original line number Diff line number Diff line
@@ -3,7 +3,6 @@
namespace Unicaen\BddAdmin\Driver\Mysql;

use Unicaen\BddAdmin\Bdd;
use Unicaen\BddAdmin\Ddl\Ddl;
use Unicaen\BddAdmin\Driver\DriverInterface;
use Unicaen\BddAdmin\Exception\BddCompileException;
use Unicaen\BddAdmin\Exception\BddException;
@@ -252,31 +251,9 @@ class Driver implements DriverInterface



    /**
     * @param string $name
     *
     * @return string
     * @throws \Exception
     */
    public function getDdlClass(string $name): string
    public function getDdlClass(string $name): ?string
    {
        $mapping = [
            /*    Ddl::SEQUENCE           => SequenceManager::class,
                Ddl::TABLE              => TableManager::class,
                Ddl::PRIMARY_CONSTRAINT => PrimaryConstraintManager::class,
                Ddl::PACKAGE            => PackageManager::class,
                Ddl::VIEW               => ViewManager::class,
                Ddl::MATERIALIZED_VIEW  => MaterializedViewManager::class,
                Ddl::REF_CONSTRAINT     => RefConstraintManager::class,
                Ddl::UNIQUE_CONSTRAINT  => UniqueConstraintManager::class,
                Ddl::TRIGGER            => TriggerManager::class,
                Ddl::INDEX              => IndexManager::class,*/
        ];
        if (!array_key_exists($name, $mapping)) {
            throw new \Exception('La Classe Ddl ' . $name . ' n\'existe pas.');
        }

        return $mapping[$name];
        return null;
    }


@@ -321,4 +298,5 @@ class Driver implements DriverInterface
                throw new \Exception("Type de donnée " . $type . " non géré.");
        }
    }

}
 No newline at end of file
+2 −5
Original line number Diff line number Diff line
@@ -295,7 +295,7 @@ class Driver implements DriverInterface
     * @return string
     * @throws \Exception
     */
    public function getDdlClass(string $name): string
    public function getDdlClass(string $name): ?string
    {
        $mapping = [
            Ddl::SEQUENCE           => SequenceManager::class,
@@ -309,11 +309,8 @@ class Driver implements DriverInterface
            Ddl::TRIGGER            => TriggerManager::class,
            Ddl::INDEX              => IndexManager::class,
        ];
        if (!array_key_exists($name, $mapping)) {
            throw new \Exception('La Classe Ddl ' . $name . ' n\'existe pas.');
        }

        return $mapping[$name];
        return $mapping[$name] ?? null;
    }


+2 −1
Original line number Diff line number Diff line
@@ -4,10 +4,11 @@ namespace Unicaen\BddAdmin\Driver\Oracle;

use Unicaen\BddAdmin\Bdd;
use Unicaen\BddAdmin\Manager\AbstractManager;
use Unicaen\BddAdmin\Manager\CompilableInterface;
use Unicaen\BddAdmin\Manager\MaterializedViewManagerInteface;
use Unicaen\BddAdmin\Ddl\DdlFilter;

class MaterializedViewManager extends AbstractManager implements MaterializedViewManagerInteface
class MaterializedViewManager extends AbstractManager implements MaterializedViewManagerInteface, CompilableInterface
{
    public function getList(): array
    {
Loading