diff --git a/CHANGELOG.md b/CHANGELOG.md index fd320e6aac10130d94449223498daa6d3331f450..8cf512b1e47d8dfc4b198d350eb3794aaab74e87 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +1.2.0 (20/02/2025) +------------------ + +- Oracle : Build des indexs à l'update-bdd +- Meilleure gestion des managers compilables +- Refactorisation de l'exécution des requêtes collectées (interne) + + 1.1.2 (07/02/2025) ------------------ diff --git a/src/Bdd.php b/src/Bdd.php index 4707b45276100592bb38efc5021a35831605e441..7779988982103ab106919a30e24bb5b1b0a6bebb 100644 --- a/src/Bdd.php +++ b/src/Bdd.php @@ -503,12 +503,12 @@ class Bdd { if (is_string($object)) { [$schema, $name] = Util::explodedFullObjectName($object); - }else{ - if (isset($object['name'])){ + } else { + if (isset($object['name'])) { throw new BddException('Propriété d\'objet "name" non fournie'); } $schema = $object['schema'] ?? null; - $name = $object['name']; + $name = $object['name']; } return Util::fullObjectName($schema, $name); @@ -789,16 +789,7 @@ class Bdd $queries = $this->alterDdlObject($manager, $action, [], $ddl[$ddlName]); if ($queries) { $this->logBegin($label); - foreach ($queries as $query => $desc) { - $this->logMsg($desc); - try { - $this->exec($query); - } catch (BddCompileException $e) { - // ne rien faire => trité après - } catch (\Throwable $e) { - $this->logError($e); - } - } + $this->execQueries($queries); $this->logEnd(); } } @@ -808,6 +799,22 @@ class Bdd + public function execQueries(array $queries): void + { + foreach ($queries as $query => $desc) { + $this->logMsg($desc); + try { + $this->exec($query); + } catch (BddCompileException $e) { + // ne rien faire => trité après + } catch (\Throwable $e) { + $this->logError($e); + } + } + } + + + public function alter(Bdd|Ddl|array $ddl, DdlFilters|array $filters = []): void { $filters = DdlFilters::normalize($filters); @@ -834,16 +841,7 @@ class Bdd $queries = $this->alterDdlObject($manager, $action, $manager->get($objectFilter), $objectDdl); if ($queries) { $this->logBegin($label); - foreach ($queries as $query => $desc) { - $this->logMsg($desc); - try { - $this->exec($query); - } catch (BddCompileException $e) { - // ne rien faire => traité après - } catch (\Throwable $e) { - $this->logError($e); - } - } + $this->execQueries($queries); $this->logEnd(); } } @@ -870,14 +868,7 @@ class Bdd $queries = $this->alterDdlObject($manager, 'drop', $ddl, []); if ($queries) { $this->logBegin($label); - foreach ($queries as $query => $desc) { - $this->logMsg($desc); - try { - $this->exec($query); - } catch (\Throwable $e) { - $this->logError($e); - } - } + $this->execQueries($queries); $this->logEnd(); } } @@ -1132,40 +1123,38 @@ class Bdd - public function compilerTout(): array + public function compilerTout(): void { - $compileTypes = [Ddl::PACKAGE, Ddl::VIEW, Ddl::TRIGGER]; - $managers = []; - foreach ($compileTypes as $compileType) { - $manager = $this->manager($compileType); + /** @var CompilableInterface[] $compilables */ + $compilables = []; + + // Récupération de la liste des managers compilables + $managers = $this->managerList(); + foreach ($managers as $name => $null) { + $manager = $this->manager($name); if ($manager instanceof CompilableInterface) { - $managers[$compileType] = $manager; + $compilables[$name] = $manager; } } - $errors = []; - - if ($managers) { - - $this->logBegin("Compilation de tous les objets de la BDD"); + // S'il n'y en a pas on ne fait rien + if (empty($compilables)) { + return; + } - foreach ($managers as $compileType => $manager) { - $list = $manager->getList(); - foreach ($list as $name) { - try { - $this->logMsg("Compilation de $name ...", true); - $manager->compiler($name); - } catch (BddCompileException $e) { - $errors[$compileType][$name] = $e->getMessage(); - $this->logError($compileType . ' ' . $name . ' : Erreur de compilation'); - } - } - } - $this->logEnd("Fin de la compilation"); + $this->logBegin("Compilation de tous les objets de la BDD"); + $this->queryCollect = true; + $this->queries = []; + foreach ($compilables as $managerName => $manager) { + $manager->compilerTout(); + $this->execQueries($this->queries); + $this->queries = []; + $this->logMsg(" "); } - return $errors; + $this->queryCollect = false; + $this->logEnd("Fin de la compilation"); } diff --git a/src/Driver/Oracle/IndexManager.php b/src/Driver/Oracle/IndexManager.php index 966b7eb033b321dedbf76fa998d4b53d4c376cc2..cd6b0d82894b4ffe27b0f0f49718806f937688fc 100644 --- a/src/Driver/Oracle/IndexManager.php +++ b/src/Driver/Oracle/IndexManager.php @@ -3,10 +3,11 @@ namespace Unicaen\BddAdmin\Driver\Oracle; use Unicaen\BddAdmin\Manager\AbstractManager; +use Unicaen\BddAdmin\Manager\CompilableInterface; use Unicaen\BddAdmin\Manager\IndexManagerInterface; use Unicaen\BddAdmin\Ddl\DdlFilter; -class IndexManager extends AbstractManager implements IndexManagerInterface +class IndexManager extends AbstractManager implements IndexManagerInterface, CompilableInterface { public function getList(?string $name = null): array { @@ -146,4 +147,24 @@ class IndexManager extends AbstractManager implements IndexManagerInterface $this->addQuery($sql, 'Renommage de l\'index ' . $oldName . ' en ' . $newName); } + + + public function compiler(string|array $name): void + { + if ($this->sendEvent()->getReturn('no-exec')) return; + + if (is_array($name)) $name = $name['name']; + + $this->addQuery("ALTER INDEX $name REBUILD", 'Reconstruction de l\'index ' . $name); + } + + + + public function compilerTout(): void + { + $objects = $this->getList(); + foreach ($objects as $object) { + $this->compiler($object); + } + } } \ No newline at end of file