diff --git a/CHANGELOG.md b/CHANGELOG.md index 457923aff1bd8d254fa9c711a5bb3f812a69d6e2..592ce78c9193a899328983c348ccae470dda04df 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +0.9.3 +-------------- +- [FIX] Réparation du système de positionnement de colonnes qui ne fonctionnait plus + + 0.9.2 -------------- diff --git a/README.md b/README.md index 0e7e7681ea946eda9b67be9a2bbc1e5aa0105b62..ea8ed91ab0e8086fd18a19144f32effd41f88817 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,8 @@ Outil d'administration de bases de données Postgresql et Oracle - Pour les opérations de migrations complexes, un système de scripts qui se lancent sur déclencheur permettant de faire les manipulations nécessaires sur les données - Système de copie / sauvegarde / restauration de base de données +[Changelog ici](CHANGELOG.md) + ## Prérequis - PHP 8.2 - Drivers Bdd installés, en fonction du SGBD visé (OCI8, PDO, etc) diff --git a/src/Bdd.php b/src/Bdd.php index 69672b20569568033c055b298ef6db73c6e67024..0ae32bf0e6e8155f244815273475a0c9c9b48240 100644 --- a/src/Bdd.php +++ b/src/Bdd.php @@ -510,6 +510,8 @@ class Bdd } $this->logEnd(); + $ddl->applyColumnPositions(); + return $ddl; } diff --git a/src/Ddl/Ddl.php b/src/Ddl/Ddl.php index 885e6ca4931691a2469d4782ef9b04a24b30b21b..f24ac82195e64354eb12d803e804905c69d56e62 100644 --- a/src/Ddl/Ddl.php +++ b/src/Ddl/Ddl.php @@ -265,17 +265,30 @@ class Ddl implements \Iterator, \ArrayAccess /** - * On passe un tableau de positions de colonnes, et cela réorganise l'ordonnancement. + * On passe un tableau de positions de colonnes ou bien on utilise le fichiers de config des positions, + * et cela réorganise l'ordonnancement. * - * @param array $positions + * @param array|null $positions * * @return array */ - public function applyColumnPositions(array $positions): array + public function applyColumnPositions(array|null $positions = null): array { + if (null === $positions) { + $colPosFile = $this->getColumnsPosFile(); + if (file_exists($colPosFile)) { + $positions = require_once $colPosFile; + } + } + + if (null === $positions) { + $positions = []; + } + $tables = $this->get(Ddl::TABLE); foreach ($tables as $tableName => $table) { $cols = []; + // on supprime les positions pour des colonnes qui n'existent pas ou plus if (isset($positions[$tableName])) { foreach ($positions[$tableName] as $idc => $col) { if (!array_key_exists($col, $table['columns'])) { @@ -283,6 +296,8 @@ class Ddl implements \Iterator, \ArrayAccess } } } + + // On récupère les colonnes qui n'ont pas de position définie explicitement foreach ($table['columns'] as $column) { $colname = $column['name']; if (!isset($positions[$tableName]) || !in_array($colname, $positions[$tableName])) { @@ -295,8 +310,10 @@ class Ddl implements \Iterator, \ArrayAccess if (!isset($positions[$tableName])) { $positions[$tableName] = []; } + // on a la liste des colonnes ordonnée $cols = array_merge($positions[$tableName], $cols); + // et on l'applique maintenant foreach ($cols as $pos => $col) { if (isset($this->data[Ddl::TABLE][$tableName]['columns'][$col])) { $this->data[Ddl::TABLE][$tableName]['columns'][$col]['position'] = $pos + 1; @@ -427,16 +444,6 @@ class Ddl implements \Iterator, \ArrayAccess } } } - - - /* Traitement des positionnements de colonnes */ - $colPosFile = $this->getColumnsPosFile(); - if (file_exists($colPosFile)) { - $positions = require_once $colPosFile; - - $positions = $this->applyColumnPositions($positions); - $this->writeArray($colPosFile, $positions); - } }