diff --git a/CHANGELOG.md b/CHANGELOG.md index dd7ac080d8e7d7061bf57da0ba972fffe84248d6..aee518eab2c722aec9921360974e9d77392a21fd 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Nouveautés * Les modèles de pièces justificatives peuvent être téléchargés en fonction de l'année courante (paramètre :annee à ajouter dans l'URL qui sera remplacé dynamiquement par l'année en cours) +* Les vues matérialisées sont recalculées à chaque mise à jour ## Notes de mise à jour diff --git a/admin/actions/update-bdd.php b/admin/actions/update-bdd.php index c4d670ce0394783e9377a8c4d4aee16253744d0e..c7b07396248efdf8e00bc65d449a54e4e5f785e9 100644 --- a/admin/actions/update-bdd.php +++ b/admin/actions/update-bdd.php @@ -63,6 +63,8 @@ $dataGen->update(); $c->println(''); $mm->migration('post'); +// Recalcul des vues matérialisées +$bdd->refreshMaterializedViews(); // Néttoyage des caches $oa->run('clear-cache'); \ No newline at end of file diff --git a/admin/src/BddAdmin/Bdd.php b/admin/src/BddAdmin/Bdd.php index cd3cd157423ef8c45aabd82b4b05b57efef18753..b3d720f1023b3135190ca9fb38f6ca6024ed3516 100644 --- a/admin/src/BddAdmin/Bdd.php +++ b/admin/src/BddAdmin/Bdd.php @@ -680,6 +680,29 @@ class Bdd + public function refreshMaterializedViews($ddl = null) + { + if (!$ddl) { + $ddl = $this->materializedView()->get(); + } else { + $ddl = Ddl::normalize($ddl)->get(Ddl::MATERIALIZED_VIEW); + if (!$ddl) $ddl = []; + } + + $this->logBegin("Recalcul de toutes les vues matérialisées"); + foreach ($ddl as $mv) { + try { + $this->logMsg("Vue matérialisée " . $mv['name'] . " ...", true); + $this->materializedView()->refresh($mv); + } catch (\Throwable $e) { + $this->logError($e); + } + } + $this->logEnd(); + } + + + /** * @return array * @throws BddCompileException diff --git a/admin/src/BddAdmin/Driver/Oracle/MaterializedViewManager.php b/admin/src/BddAdmin/Driver/Oracle/MaterializedViewManager.php index 0e9e9d9271edafb012fe405c24fd0da5d2f31c0d..68805800578af0b4ed3f8eda6e5a9d1422fc6899 100644 --- a/admin/src/BddAdmin/Driver/Oracle/MaterializedViewManager.php +++ b/admin/src/BddAdmin/Driver/Oracle/MaterializedViewManager.php @@ -100,4 +100,18 @@ class MaterializedViewManager extends AbstractManager implements MaterializedVie $this->drop($oldName); $this->create($new); } + + + + /** + * @param string|array $name + */ + public function refresh($name) + { + if (is_array($name)) { + $name = $name['name']; + } + + $this->addQuery("BEGIN DBMS_SNAPSHOT.REFRESH( '$name','C'); END;", 'Mise à jour de la vue matérialisée ' . $name); + } } \ No newline at end of file diff --git a/admin/src/BddAdmin/Manager/MaterializedViewManagerInteface.php b/admin/src/BddAdmin/Manager/MaterializedViewManagerInteface.php index 1ee33bbdca19d7ebb1b599dca47ddbec77546c18..5fe6afbe45d507c1a490b813899b8d85e7ed9ef5 100644 --- a/admin/src/BddAdmin/Manager/MaterializedViewManagerInteface.php +++ b/admin/src/BddAdmin/Manager/MaterializedViewManagerInteface.php @@ -4,5 +4,8 @@ namespace BddAdmin\Manager; interface MaterializedViewManagerInteface extends ManagerInterface { - + /** + * @param string|array $name + */ + public function refresh($name); }