Loading src/Bdd.php +29 −19 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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', Loading Loading @@ -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; } Loading Loading @@ -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); Loading Loading @@ -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())) { Loading @@ -653,6 +654,7 @@ class Bdd } } } } $this->compilerTout(); $this->logEnd('Changements appliqués'); Loading @@ -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, []); Loading @@ -693,6 +696,7 @@ class Bdd } } } } $this->logEnd("Base de données vide"); } Loading Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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 { Loading @@ -858,6 +867,7 @@ class Bdd } } } } $this->logEnd("Fin de la compilation"); return $errors; Loading src/Driver/DriverInterface.php +1 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,6 @@ interface DriverInterface public function getDdlClass(string $name): string; public function getDdlClass(string $name): ?string; } No newline at end of file src/Driver/Mysql/Driver.php +3 −25 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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 src/Driver/Oracle/Driver.php +2 −5 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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; } Loading src/Driver/Oracle/MaterializedViewManager.php +2 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
src/Bdd.php +29 −19 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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', Loading Loading @@ -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; } Loading Loading @@ -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); Loading Loading @@ -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())) { Loading @@ -653,6 +654,7 @@ class Bdd } } } } $this->compilerTout(); $this->logEnd('Changements appliqués'); Loading @@ -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, []); Loading @@ -693,6 +696,7 @@ class Bdd } } } } $this->logEnd("Base de données vide"); } Loading Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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 { Loading @@ -858,6 +867,7 @@ class Bdd } } } } $this->logEnd("Fin de la compilation"); return $errors; Loading
src/Driver/DriverInterface.php +1 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,6 @@ interface DriverInterface public function getDdlClass(string $name): string; public function getDdlClass(string $name): ?string; } No newline at end of file
src/Driver/Mysql/Driver.php +3 −25 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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; } Loading Loading @@ -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
src/Driver/Oracle/Driver.php +2 −5 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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; } Loading
src/Driver/Oracle/MaterializedViewManager.php +2 −1 Original line number Diff line number Diff line Loading @@ -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