Commit 3f75e5e3 authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

- Oracle : Build des indexs à l'update-bdd

- Meilleure gestion des managers compilables
- Refactorisation de l'exécution des requêtes collectées (interne)
parent 26c0b492
Loading
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
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)
------------------

+45 −56
Original line number Diff line number Diff line
@@ -789,6 +789,18 @@ class Bdd
                    $queries = $this->alterDdlObject($manager, $action, [], $ddl[$ddlName]);
                    if ($queries) {
                        $this->logBegin($label);
                        $this->execQueries($queries);
                        $this->logEnd();
                    }
                }
            }
        }
    }



    public function execQueries(array $queries): void
    {
        foreach ($queries as $query => $desc) {
            $this->logMsg($desc);
            try {
@@ -799,11 +811,6 @@ class Bdd
                $this->logError($e);
            }
        }
                        $this->logEnd();
                    }
                }
            }
        }
    }


@@ -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) {
        // S'il n'y en a pas on ne fait rien
        if (empty($compilables)) {
            return;
        }

        $this->logBegin("Compilation de tous les objets de la BDD");
        $this->queryCollect = true;

            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->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");
    }


+22 −1
Original line number Diff line number Diff line
@@ -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