Commit 790e2ffe authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

- Nouveau mécanisme du DataManager (`$bdd->data()->make(...)` permettant de...

- Nouveau mécanisme du DataManager (`$bdd->data()->make(...)` permettant de générer un jeu de données à partir de la base de données
- Nouvelles options de config `unicaen-bddadmin/data/make-*`, cf. [config/unicaen-bddadmin.global.php.dist](config/unicaen-bddadmin.global.php.dist)
- Nouvelle commande console `bddadmin:make-data`
- Nouvelle méthode `$bdd->selectSingle()` pour retourner une unique valeur issue d'une requête
- [Fix] `Util::writeToFile` ne retourne rien (régression 1.5.2)
parent 8011829e
Loading
Loading
Loading
Loading
Loading
+11 −1
Original line number Diff line number Diff line
1.6.0 (23/09/2025)
------------------

- Nouveau mécanisme du DataManager (`$bdd->data()->make(...)` permettant de générer un jeu de données à partir de la base de données
- Nouvelles options de config `unicaen-bddadmin/data/make-*`, cf. [config/unicaen-bddadmin.global.php.dist](config/unicaen-bddadmin.global.php.dist)
- Nouvelle commande console `bddadmin:make-data` 
- Nouvelle méthode `$bdd->selectSingle()` pour retourner une unique valeur issue d'une requête
- [Fix] `Util::writeToFile` ne retourne rien (régression 1.5.2)


1.5.2 (23/09/2025)
------------------

- Nouvelles fonctions Util::writeToString & Util::writeToFile
- Nouvelles fonctions `Util::writeToString` & `Util::writeToFile`
- Refactoring DDL pour utiliser ces fonctions (aucun changement API)


+2 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ return [
            Command\UpdateDdlCommand::class       => Command\CommandFactory::class,
            Command\UpdateDataCommand::class      => Command\CommandFactory::class,
            Command\UpdateSequencesCommand::class => Command\CommandFactory::class,
            Command\MakeDataCommand::class        => Command\CommandFactory::class,
            Command\ClearCommand::class           => Command\CommandFactory::class,
            Command\CopyToCommand::class          => Command\CommandFactory::class,
            Command\CopyFromCommand::class        => Command\CommandFactory::class,
@@ -79,6 +80,7 @@ return [
            'bddadmin:clear'            => Command\ClearCommand::class,
            'bddadmin:update-ddl'       => Command\UpdateDdlCommand::class,
            'bddadmin:update-data'      => Command\UpdateDataCommand::class,
            'bddadmin:make-data'        => Command\MakeDataCommand::class,
            'bddadmin:update-sequences' => Command\UpdateSequencesCommand::class,
            'bddadmin:copy-to'          => Command\CopyToCommand::class,
            'bddadmin:copy-from'        => Command\CopyFromCommand::class,
+41 −6
Original line number Diff line number Diff line
@@ -46,10 +46,37 @@ return [
        ],

        'data' => [
            /* Répertoire où est stocké votre jeu de données par défaut */
            'make-dir' => 'data/default',

            'make-config' => [
                /* array dont le format est le suivant :
                 *
                 * 'nom_de_ma_table' => [
                 *     // Facultatif : Filtre pour éviter, par exemple, d'avoir des données historisées dans le jeu
                 *     'where'       => ['HISTO_DESTRUCTION' => null],
                 *
                 *     // Facultatif : Liste des colonnes qui n'ont rien à faire dans le jeu de données (à adapter à vos besoins) 
                 *     'ignore-cols' => ['ID', 'HISTO_CREATION', 'HISTO_CREATEUR_ID', 'HISTO_MODIFICATION', 'HISTO_MODIFICATEUR_ID', 'HISTO_DESTRUCTION', 'HISTO_DESTRUCTEUR_ID'],
                 *
                 *     // Facultatif : Ordre de tri
                 *     'order-by'     => 'libelle',
                 * 
                 *     // Facultatif : callback de transformation, utile pour des opérations avancées
                 *     // $data = 1 ligne de la table 
                 *     'transfo'     => function (Bdd $bdd, &$data) {
                 *          // exemple de remplacement d'un id par un code pour une colonne liée à une clé étrangère
                 *          $data['ma_table_id'] = $bdd->selectSingle('SELECT code from ma_table WHERE id = :id', ['id' => $data['ma_table_id']]);
                 *     },
                 * ],
                 * ...
                 */
            ],

            'config'  => [
                /* array dont le format est le suivant :
                 *
                 * 'nom_de_ma_table => [
                 * 'nom_de_ma_table' => [
                 *     // à adapter, 'install' par exemple pour un jeu de données servant à installer l'appli qui sera paramétré ensuite 
                 *     'actions' => ['install', 'update'],
                 *
@@ -73,10 +100,18 @@ return [
            ],
            'sources' => [
                /* Liste des sources sous forme de tableau
                 * Les valeurs correspondant à des noms de classes PHP qui seront instanciées par le DataManager
                 * Les valeurs correspondant à
                 *  - des noms de classes PHP qui seront instanciées par le DataManager
                 *  - ou des fichiers où sont stockées les données par nom de table
                 *  - ou des répertoires ou sont stockée des fichiers contenant les données (1 par table)
                 *
                 * Vous pouvez également passer des noms ou alias de services déclarés auprès du serviceManager de Laminas
                 * pour profiter de l'injection de dépendance
                 *
                 */

                // pour utiliser le jeu de données par défaut (99 = est utilisé en dernier recours) :
                // 99 => 'data/default',
            ],
        ],

+29 −6
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ class Bdd
    const FETCH_ALL    = 32;
    const FETCH_EACH   = 16;
    const FETCH_ONE    = 8;
    const FETCH_SINGLE = 4;

    const TYPE_INT    = 'int';
    const TYPE_BOOL   = 'bool';
@@ -86,7 +87,6 @@ class Bdd
        Ddl::REF_CONSTRAINT . '.rename'     => 'Renommage des clés étrangères',
        Ddl::UNIQUE_CONSTRAINT . '.rename'  => 'Renommage des contraintes d\'unicité',
        Ddl::TRIGGER . '.drop'              => 'Suppression des triggers',
//        Ddl::SEQUENCE . '.drop'             => 'Suppression des séquences',
        Ddl::VIEW . '.drop'                 => 'Suppression des vues',
        Ddl::MATERIALIZED_VIEW . '.drop'    => 'Suppression des vues matérialisées',
        Ddl::PROCEDURE . '.drop'            => 'Suppression des procédures',
@@ -405,6 +405,15 @@ class Bdd



    public function selectSingle(string $sql, array $params = [], array $options = []): mixed
    {
        $result = $this->selectOne($sql, $params, null, $options);

        return current($result);
    }



    public function selectOne(string $sql, array $params = [], ?string $column = null, array $options = []): mixed
    {
        $options['fetch'] = self::FETCH_ONE;
@@ -992,6 +1001,20 @@ class Bdd



    public function makeData(): self
    {
        $this->logTitle('Génération & enregistrement du jeu de données');
        try {
            $this->data()->make();
            $this->logSuccess('Jeu de données généré');
        } catch (\Throwable $e) {
            $this->logError($e);
        }
        return $this;
    }



    public function updateDdl(): self
    {
        $this->logTitle('Génération de la DDL à partir de la base de données');
+37 −0
Original line number Diff line number Diff line
<?php

namespace Unicaen\BddAdmin\Command;

use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;
use Symfony\Component\Console\Output\OutputInterface;
use Symfony\Component\Console\Style\SymfonyStyle;
use Unicaen\BddAdmin\BddAwareTrait;
use Unicaen\BddAdmin\Ddl\Ddl;

/**
 * Description of MakeDataCommand
 *
 * @author Laurent Lécluse <laurent.lecluse at unicaen.fr>
 */
class MakeDataCommand extends Command
{
    use BddAwareTrait;

    protected function configure(): void
    {
        $this->setDescription('Crée ou met à jour le jeu de données');
    }



    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        $io  = new SymfonyStyle($input, $output);
        $bdd = $this->getBdd()->setLogger($io);

        $bdd->makeData();

        return Command::SUCCESS;
    }
}
 No newline at end of file
Loading