Loading Module.php +5 −2 Original line number Diff line number Diff line Loading @@ -2,11 +2,12 @@ namespace UnicaenDbImport; use Zend\Config\Factory as ConfigFactory; use Zend\Console\Adapter\AdapterInterface; use Zend\Console\Console; use Zend\ModuleManager\Feature\ConsoleUsageProviderInterface; use Zend\Mvc\Application; use Zend\Mvc\MvcEvent; use Zend\Stdlib\Glob; class Module implements ConsoleUsageProviderInterface { Loading @@ -19,7 +20,9 @@ class Module implements ConsoleUsageProviderInterface public function getConfig() { return include __DIR__ . '/config/module.config.php'; $paths = Glob::glob(__DIR__ . '/config/{,*.}{config}.php', Glob::GLOB_BRACE); return ConfigFactory::fromFiles($paths); } public function getAutoloaderConfig() Loading README.md +23 −39 Original line number Diff line number Diff line Loading @@ -602,31 +602,37 @@ synchronisation. De nouvelles fonctionnalités à venir devraient pouvoir automa Développement ------------- ### Supporter une autre plateforme de base de données ### Supporter une plateforme de base de données supplémentaire Imaginons que l'on veuille ajouter la possibilité d'importer/synchroniser vers la plateforme de base de données destination MySQL. Voici ce qu'il faudra faire : - Ajouter dans le fichier `config/module.config.php` la config permettant d'associer la bonne classe de "code generator" (à créer) à chaque classe de plateforme de base de données MySQL connue de Doctrine : - Ajouter un fichier de config `config/mysql.config.php` dans lequel sera spécifié : - la classe de "code generator" à utiliser en fonction de la plateforme de base de données MySQL ; - la factory à utiliser pour instancier le "code generator" en question. Exemple : ```php return [ 'import' => [ 'code_generators' => [ 'code_generators_mapping' => [ \Doctrine\DBAL\Platforms\MySqlPlatform::class => \UnicaenDbImport\CodeGenerator\MySQL\CodeGenerator::class, \Doctrine\DBAL\Platforms\MySQL57Platform::class => \UnicaenDbImport\CodeGenerator\MySQL\CodeGenerator::class, \Doctrine\DBAL\Platforms\MySQL80Platform::class => \UnicaenDbImport\CodeGenerator\MySQL\CodeGenerator::class, ], 'code_generators_factories' => [ \UnicaenDbImport\CodeGenerator\MySQL\CodeGenerator::class => \UnicaenDbImport\CodeGenerator\MySQL\CodeGeneratorFactory::class, ], //... ], ]; ``` - Créer un répertoire `src/UnicaenDbImport/CodeGenerator/MySQL` dans lequel on va créer les fichiers/classes suivants : - Créer un sous-répertoire `MySQL` dans le répertoire `src/UnicaenDbImport/CodeGenerator` dans lequel il faudra créer les fichiers/classes suivants : ``` . Loading @@ -640,9 +646,10 @@ return [ └── MySQLCommonsTrait.php ``` - La classe `CodeGenerator` doit *obligatoirement* : - Respecter les contraintes suivantes dans la classe `CodeGenerator` : - hériter de la classe abstraite `\UnicaenDbImport\CodeGenerator\CodeGenerator` ; - instancier dans le constructeur ses propres versions MySQL des "helpers" de génération de code (`MySQLTableHelper`, etc.) - instancier dans le constructeur ses propres versions MySQL des "helpers" de génération de code (`MySQLTableHelper`, etc.) Exemple : Loading Loading @@ -706,12 +713,12 @@ class CodeGenerator extends \UnicaenDbImport\CodeGenerator\CodeGenerator } ``` - Sa factory `CodeGeneratorFactory` doit *obligatoirement* : - Respecter les contraintes suivantes dans la factory `CodeGeneratorFactory` : - injecter dans le "code generator" une instance de la plateforme correspondant à la base de données destination. *NB: l'instance de la plateforme de base de données injectée ici est utilisée pour générer du SQL compris par la base de données destination. Si aucune classe de platforme ne correspond exactement à la version de la base de données destination, prenez la générique (`MySqlPlatform` dans notre exemple)* de données destination, prenez la plus générique (`MySqlPlatform` dans notre exemple)* Exemple : Loading @@ -735,11 +742,10 @@ class CodeGeneratorFactory } ``` - La classe de "helper" de génération de code `Helper\DiffViewHelper` doit : - *obligatoirement* hériter de la classe abstraite `\UnicaenDbImport\CodeGenerator\Helper\DiffViewHelper` ; - *obligatoirement* définir les méthodes non implémentées par la classe mère ; - *si besoin* redéfinir les méthodes de la classe mère qui ne génèreraient pas du code SQL valide pour la - Respecter les contraintes suivantes dans la classe de "helper" de génération de code `Helper\DiffViewHelper` : - hériter *obligatoirement* de la classe abstraite `\UnicaenDbImport\CodeGenerator\Helper\DiffViewHelper` ; - définir *obligatoirement* les méthodes non implémentées par la classe mère ; - redéfinir *si besoin* les méthodes de la classe mère qui ne génèreraient pas du code SQL valide pour la plateforme de base de données (ici, MySQL). ```php Loading Loading @@ -792,27 +798,5 @@ class DiffViewHelper extends \UnicaenDbImport\CodeGenerator\Helper\DiffViewHelpe } ``` - Mêmes principes pour les autres classes `Helper\LogTableHelper`, `Helper\TableHelper`, `Helper\TableValidationHelper`. - Du fait que les classes `CodeGenerator` et `*Helper` héritent déjà chacune d'une classe, un trait `MySQLCommonsTrait` peut être utile pour partager des éléments identiques nécessaires dans toutes ces classes. Exemple pour la plateforme PostgreSQL : ```php namespace UnicaenDbImport\CodeGenerator\PostgreSQL; trait PostgreSQLCommonsTrait { /** * @param string $argument * @return string */ protected function getQuoteLiteralFunctionCallSQLSnippet($argument) { return 'quote_literal(' . $argument . ')'; } } ``` - Respecter les mêmes contraintes dans les autres classes `Helper\LogTableHelper`, `Helper\TableHelper`, `Helper\TableValidationHelper`. config/module.config.php +2 −13 Original line number Diff line number Diff line Loading @@ -2,12 +2,6 @@ namespace UnicaenDbImport; use Doctrine\DBAL\Platforms\PostgreSQL100Platform; use Doctrine\DBAL\Platforms\PostgreSQL91Platform; use Doctrine\DBAL\Platforms\PostgreSQL92Platform; use Doctrine\DBAL\Platforms\PostgreSQL94Platform; use Doctrine\DBAL\Platforms\PostgreSqlPlatform; use UnicaenDbImport\CodeGenerator\PostgreSQL\CodeGenerator as PostgreSQLCodeGenerator; use UnicaenDbImport\Config\Config; use UnicaenDbImport\Config\ConfigFactory; use UnicaenDbImport\Controller\ConsoleControllerFactory; Loading @@ -27,13 +21,8 @@ use UnicaenDbImport\Service\SynchroServiceFactory; return [ 'import' => [ 'connections' => [], 'code_generators' => [ PostgreSqlPlatform::class => PostgreSQLCodeGenerator::class, PostgreSQL91Platform::class => PostgreSQLCodeGenerator::class, PostgreSQL92Platform::class => PostgreSQLCodeGenerator::class, PostgreSQL94Platform::class => PostgreSQLCodeGenerator::class, PostgreSQL100Platform::class => PostgreSQLCodeGenerator::class, ], 'code_generators_mapping' => [], 'code_generators_factories' => [], 'imports' => [], 'synchros' => [], ], Loading config/postgresql.config.php 0 → 100644 +33 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport; use Doctrine\DBAL\Platforms\PostgreSQL100Platform; use Doctrine\DBAL\Platforms\PostgreSQL91Platform; use Doctrine\DBAL\Platforms\PostgreSQL92Platform; use Doctrine\DBAL\Platforms\PostgreSQL94Platform; use Doctrine\DBAL\Platforms\PostgreSqlPlatform; use UnicaenDbImport\CodeGenerator\PostgreSQL\CodeGenerator; use UnicaenDbImport\CodeGenerator\PostgreSQL\CodeGeneratorFactory; use UnicaenDbImport\Config\Config; return [ 'import' => [ /** * @see Config::getCodeGeneratorsMappingConfig() */ 'code_generators_mapping' => [ PostgreSqlPlatform::class => CodeGenerator::class, PostgreSQL91Platform::class => CodeGenerator::class, PostgreSQL92Platform::class => CodeGenerator::class, PostgreSQL94Platform::class => CodeGenerator::class, PostgreSQL100Platform::class => CodeGenerator::class, ], /** * @see Config::getCodeGeneratorsFactoriesConfig() */ 'code_generators_factories' => [ CodeGenerator::class => CodeGeneratorFactory::class, ], ], ]; src/UnicaenDbImport/Config/Config.php +31 −6 Original line number Diff line number Diff line Loading @@ -16,7 +16,13 @@ class Config * platform's class => code generator's class * @var array */ protected $codeGeneratorsConfig = []; protected $codeGeneratorsMappingConfig = []; /** * code generator's class => factory's class * @var array */ protected $codeGeneratorsFactoriesConfig = []; /** * @var ImportInterface[] Loading @@ -29,12 +35,12 @@ class Config protected $synchros = []; /** * @param array $codeGeneratorsConfig * @param array $codeGeneratorsMappingConfig * @return Config */ public function setCodeGeneratorsConfig(array $codeGeneratorsConfig): Config public function setCodeGeneratorsMappingConfig(array $codeGeneratorsMappingConfig): Config { $this->codeGeneratorsConfig = $codeGeneratorsConfig; $this->codeGeneratorsMappingConfig = $codeGeneratorsMappingConfig; return $this; } Loading @@ -42,9 +48,28 @@ class Config /** * @return array */ public function getCodeGeneratorsConfig(): array public function getCodeGeneratorsMappingConfig(): array { return $this->codeGeneratorsMappingConfig; } /** * @return array */ public function getCodeGeneratorsFactoriesConfig(): array { return $this->codeGeneratorsConfig; return $this->codeGeneratorsFactoriesConfig; } /** * @param array $codeGeneratorsFactoriesConfig * @return static */ public function setCodeGeneratorsFactoriesConfig(array $codeGeneratorsFactoriesConfig): Config { $this->codeGeneratorsFactoriesConfig = $codeGeneratorsFactoriesConfig; return $this; } /** Loading Loading
Module.php +5 −2 Original line number Diff line number Diff line Loading @@ -2,11 +2,12 @@ namespace UnicaenDbImport; use Zend\Config\Factory as ConfigFactory; use Zend\Console\Adapter\AdapterInterface; use Zend\Console\Console; use Zend\ModuleManager\Feature\ConsoleUsageProviderInterface; use Zend\Mvc\Application; use Zend\Mvc\MvcEvent; use Zend\Stdlib\Glob; class Module implements ConsoleUsageProviderInterface { Loading @@ -19,7 +20,9 @@ class Module implements ConsoleUsageProviderInterface public function getConfig() { return include __DIR__ . '/config/module.config.php'; $paths = Glob::glob(__DIR__ . '/config/{,*.}{config}.php', Glob::GLOB_BRACE); return ConfigFactory::fromFiles($paths); } public function getAutoloaderConfig() Loading
README.md +23 −39 Original line number Diff line number Diff line Loading @@ -602,31 +602,37 @@ synchronisation. De nouvelles fonctionnalités à venir devraient pouvoir automa Développement ------------- ### Supporter une autre plateforme de base de données ### Supporter une plateforme de base de données supplémentaire Imaginons que l'on veuille ajouter la possibilité d'importer/synchroniser vers la plateforme de base de données destination MySQL. Voici ce qu'il faudra faire : - Ajouter dans le fichier `config/module.config.php` la config permettant d'associer la bonne classe de "code generator" (à créer) à chaque classe de plateforme de base de données MySQL connue de Doctrine : - Ajouter un fichier de config `config/mysql.config.php` dans lequel sera spécifié : - la classe de "code generator" à utiliser en fonction de la plateforme de base de données MySQL ; - la factory à utiliser pour instancier le "code generator" en question. Exemple : ```php return [ 'import' => [ 'code_generators' => [ 'code_generators_mapping' => [ \Doctrine\DBAL\Platforms\MySqlPlatform::class => \UnicaenDbImport\CodeGenerator\MySQL\CodeGenerator::class, \Doctrine\DBAL\Platforms\MySQL57Platform::class => \UnicaenDbImport\CodeGenerator\MySQL\CodeGenerator::class, \Doctrine\DBAL\Platforms\MySQL80Platform::class => \UnicaenDbImport\CodeGenerator\MySQL\CodeGenerator::class, ], 'code_generators_factories' => [ \UnicaenDbImport\CodeGenerator\MySQL\CodeGenerator::class => \UnicaenDbImport\CodeGenerator\MySQL\CodeGeneratorFactory::class, ], //... ], ]; ``` - Créer un répertoire `src/UnicaenDbImport/CodeGenerator/MySQL` dans lequel on va créer les fichiers/classes suivants : - Créer un sous-répertoire `MySQL` dans le répertoire `src/UnicaenDbImport/CodeGenerator` dans lequel il faudra créer les fichiers/classes suivants : ``` . Loading @@ -640,9 +646,10 @@ return [ └── MySQLCommonsTrait.php ``` - La classe `CodeGenerator` doit *obligatoirement* : - Respecter les contraintes suivantes dans la classe `CodeGenerator` : - hériter de la classe abstraite `\UnicaenDbImport\CodeGenerator\CodeGenerator` ; - instancier dans le constructeur ses propres versions MySQL des "helpers" de génération de code (`MySQLTableHelper`, etc.) - instancier dans le constructeur ses propres versions MySQL des "helpers" de génération de code (`MySQLTableHelper`, etc.) Exemple : Loading Loading @@ -706,12 +713,12 @@ class CodeGenerator extends \UnicaenDbImport\CodeGenerator\CodeGenerator } ``` - Sa factory `CodeGeneratorFactory` doit *obligatoirement* : - Respecter les contraintes suivantes dans la factory `CodeGeneratorFactory` : - injecter dans le "code generator" une instance de la plateforme correspondant à la base de données destination. *NB: l'instance de la plateforme de base de données injectée ici est utilisée pour générer du SQL compris par la base de données destination. Si aucune classe de platforme ne correspond exactement à la version de la base de données destination, prenez la générique (`MySqlPlatform` dans notre exemple)* de données destination, prenez la plus générique (`MySqlPlatform` dans notre exemple)* Exemple : Loading @@ -735,11 +742,10 @@ class CodeGeneratorFactory } ``` - La classe de "helper" de génération de code `Helper\DiffViewHelper` doit : - *obligatoirement* hériter de la classe abstraite `\UnicaenDbImport\CodeGenerator\Helper\DiffViewHelper` ; - *obligatoirement* définir les méthodes non implémentées par la classe mère ; - *si besoin* redéfinir les méthodes de la classe mère qui ne génèreraient pas du code SQL valide pour la - Respecter les contraintes suivantes dans la classe de "helper" de génération de code `Helper\DiffViewHelper` : - hériter *obligatoirement* de la classe abstraite `\UnicaenDbImport\CodeGenerator\Helper\DiffViewHelper` ; - définir *obligatoirement* les méthodes non implémentées par la classe mère ; - redéfinir *si besoin* les méthodes de la classe mère qui ne génèreraient pas du code SQL valide pour la plateforme de base de données (ici, MySQL). ```php Loading Loading @@ -792,27 +798,5 @@ class DiffViewHelper extends \UnicaenDbImport\CodeGenerator\Helper\DiffViewHelpe } ``` - Mêmes principes pour les autres classes `Helper\LogTableHelper`, `Helper\TableHelper`, `Helper\TableValidationHelper`. - Du fait que les classes `CodeGenerator` et `*Helper` héritent déjà chacune d'une classe, un trait `MySQLCommonsTrait` peut être utile pour partager des éléments identiques nécessaires dans toutes ces classes. Exemple pour la plateforme PostgreSQL : ```php namespace UnicaenDbImport\CodeGenerator\PostgreSQL; trait PostgreSQLCommonsTrait { /** * @param string $argument * @return string */ protected function getQuoteLiteralFunctionCallSQLSnippet($argument) { return 'quote_literal(' . $argument . ')'; } } ``` - Respecter les mêmes contraintes dans les autres classes `Helper\LogTableHelper`, `Helper\TableHelper`, `Helper\TableValidationHelper`.
config/module.config.php +2 −13 Original line number Diff line number Diff line Loading @@ -2,12 +2,6 @@ namespace UnicaenDbImport; use Doctrine\DBAL\Platforms\PostgreSQL100Platform; use Doctrine\DBAL\Platforms\PostgreSQL91Platform; use Doctrine\DBAL\Platforms\PostgreSQL92Platform; use Doctrine\DBAL\Platforms\PostgreSQL94Platform; use Doctrine\DBAL\Platforms\PostgreSqlPlatform; use UnicaenDbImport\CodeGenerator\PostgreSQL\CodeGenerator as PostgreSQLCodeGenerator; use UnicaenDbImport\Config\Config; use UnicaenDbImport\Config\ConfigFactory; use UnicaenDbImport\Controller\ConsoleControllerFactory; Loading @@ -27,13 +21,8 @@ use UnicaenDbImport\Service\SynchroServiceFactory; return [ 'import' => [ 'connections' => [], 'code_generators' => [ PostgreSqlPlatform::class => PostgreSQLCodeGenerator::class, PostgreSQL91Platform::class => PostgreSQLCodeGenerator::class, PostgreSQL92Platform::class => PostgreSQLCodeGenerator::class, PostgreSQL94Platform::class => PostgreSQLCodeGenerator::class, PostgreSQL100Platform::class => PostgreSQLCodeGenerator::class, ], 'code_generators_mapping' => [], 'code_generators_factories' => [], 'imports' => [], 'synchros' => [], ], Loading
config/postgresql.config.php 0 → 100644 +33 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport; use Doctrine\DBAL\Platforms\PostgreSQL100Platform; use Doctrine\DBAL\Platforms\PostgreSQL91Platform; use Doctrine\DBAL\Platforms\PostgreSQL92Platform; use Doctrine\DBAL\Platforms\PostgreSQL94Platform; use Doctrine\DBAL\Platforms\PostgreSqlPlatform; use UnicaenDbImport\CodeGenerator\PostgreSQL\CodeGenerator; use UnicaenDbImport\CodeGenerator\PostgreSQL\CodeGeneratorFactory; use UnicaenDbImport\Config\Config; return [ 'import' => [ /** * @see Config::getCodeGeneratorsMappingConfig() */ 'code_generators_mapping' => [ PostgreSqlPlatform::class => CodeGenerator::class, PostgreSQL91Platform::class => CodeGenerator::class, PostgreSQL92Platform::class => CodeGenerator::class, PostgreSQL94Platform::class => CodeGenerator::class, PostgreSQL100Platform::class => CodeGenerator::class, ], /** * @see Config::getCodeGeneratorsFactoriesConfig() */ 'code_generators_factories' => [ CodeGenerator::class => CodeGeneratorFactory::class, ], ], ];
src/UnicaenDbImport/Config/Config.php +31 −6 Original line number Diff line number Diff line Loading @@ -16,7 +16,13 @@ class Config * platform's class => code generator's class * @var array */ protected $codeGeneratorsConfig = []; protected $codeGeneratorsMappingConfig = []; /** * code generator's class => factory's class * @var array */ protected $codeGeneratorsFactoriesConfig = []; /** * @var ImportInterface[] Loading @@ -29,12 +35,12 @@ class Config protected $synchros = []; /** * @param array $codeGeneratorsConfig * @param array $codeGeneratorsMappingConfig * @return Config */ public function setCodeGeneratorsConfig(array $codeGeneratorsConfig): Config public function setCodeGeneratorsMappingConfig(array $codeGeneratorsMappingConfig): Config { $this->codeGeneratorsConfig = $codeGeneratorsConfig; $this->codeGeneratorsMappingConfig = $codeGeneratorsMappingConfig; return $this; } Loading @@ -42,9 +48,28 @@ class Config /** * @return array */ public function getCodeGeneratorsConfig(): array public function getCodeGeneratorsMappingConfig(): array { return $this->codeGeneratorsMappingConfig; } /** * @return array */ public function getCodeGeneratorsFactoriesConfig(): array { return $this->codeGeneratorsConfig; return $this->codeGeneratorsFactoriesConfig; } /** * @param array $codeGeneratorsFactoriesConfig * @return static */ public function setCodeGeneratorsFactoriesConfig(array $codeGeneratorsFactoriesConfig): Config { $this->codeGeneratorsFactoriesConfig = $codeGeneratorsFactoriesConfig; return $this; } /** Loading