diff --git a/CHANGELOG.md b/CHANGELOG.md index 5396ab66e672be1991be385eb072c78d33f6dc90..9a6f64b24f896c6611c66fa2068e8f33cd2bedee 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +1.0.2 (21/11/2024) +------------------ + +- [Optimisation] Table récupère maintenant la DDL depuis le fichier de ddl, et à défaut la recalcule depuis le BDD + 1.0.1 (19/11/2024) ------------------ diff --git a/src/Table.php b/src/Table.php index 12861054297f88e70a2d6129f7d5af7f9e05fda5..570835d3504d7f17042371c6929f72239162dc9a 100644 --- a/src/Table.php +++ b/src/Table.php @@ -3,6 +3,8 @@ namespace Unicaen\BddAdmin; +use Unicaen\BddAdmin\Ddl\Ddl; + class Table { @@ -39,8 +41,13 @@ class Table public function getDdl(): array { if (empty($this->ddl)) { - $sTable = $this->getBdd()->table(); - $this->ddl = $sTable->get($this->name)[$this->name]; + $ddlFromFile = $this->getDdlFromFile(); + if (!empty($ddlFromFile)) { + $this->ddl = $ddlFromFile; + } else { + $sTable = $this->getBdd()->table(); + $this->ddl = $sTable->get($this->name)[$this->name]; + } } if (!$this->ddl) { throw new \Exception('La DDL de la table ' . $this->name . ' n\'a pas pu être calculée'); @@ -51,6 +58,23 @@ class Table + public function getDdlFromFile(): array + { + [$schema,$name] = Util::explodedFullObjectName($this->getName()); + + $ddlDir = $this->getBdd()->getOption(Bdd::OPTION_DDL . '/' . Ddl::OPTION_DIR); + $filename = $ddlDir . '/' . Ddl::TABLE . '/' . Util::fullObjectName($schema, $name) . '.php'; + if (file_exists($filename)) { + $ddl = require $filename; + if (is_array($ddl) && $ddl['name'] == $name) { + return $ddl; + } + } + return []; + } + + + public function setDdl(array $ddl): self { $this->ddl = $ddl; @@ -518,7 +542,7 @@ class Table foreach ($data as $i => $d) { foreach ($d as $c => $v) { if (isset($ddl['columns'][$c])) { - if (null == $v){ + if (null == $v) { continue; } if (isset($options['columns'][$c]['transformer'])) {