Loading config/oracle.config.php 0 → 100644 +24 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport; use Doctrine\DBAL\Platforms\OraclePlatform; use UnicaenDbImport\CodeGenerator\Oracle\CodeGenerator; use UnicaenDbImport\CodeGenerator\Oracle\CodeGeneratorFactory; return [ 'import' => [ /** * @see Config::getCodeGeneratorsMappingConfig() */ 'code_generators_mapping' => [ OraclePlatform::class => CodeGenerator::class, ], /** * @see Config::getCodeGeneratorsFactoriesConfig() */ 'code_generators_factories' => [ CodeGenerator::class => CodeGeneratorFactory::class, ], ], ]; src/UnicaenDbImport/CodeGenerator/Oracle/CodeGenerator.php 0 → 100644 +68 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\CodeGenerator\Oracle; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Platforms\OraclePlatform; use UnicaenDbImport\CodeGenerator\Oracle\Helper\DiffViewHelper as OracleDiffViewHelper; use UnicaenDbImport\CodeGenerator\Oracle\Helper\LogTableHelper as OracleLogTableHelper; use UnicaenDbImport\CodeGenerator\Oracle\Helper\TableValidationHelper as OracleTableValidationHelper; use UnicaenDbImport\CodeGenerator\Oracle\Helper\TableHelper as OracleTableHelper; /** * Version Oracle. * * @author Unicaen */ class CodeGenerator extends \UnicaenDbImport\CodeGenerator\CodeGenerator { /** * @var OraclePlatform */ protected $platform; /** * @var OracleTableHelper */ protected $tableHelper; /** * @var OracleTableValidationHelper */ protected $tableValidationHelper; /** * @var OracleDiffViewHelper */ protected $diffViewHelper; /** * @var OracleLogTableHelper */ protected $logTableHelper; /** * CodeGenerator constructor. * * @param AbstractPlatform $platform */ public function __construct(AbstractPlatform $platform) { parent::__construct($platform); $this->tableHelper = new OracleTableHelper($this->platform); $this->tableValidationHelper = new OracleTableValidationHelper($this->platform); $this->diffViewHelper = new OracleDiffViewHelper($this->platform); $this->logTableHelper = new OracleLogTableHelper($this->platform); } /** * @param string $tableName * @return string * @codeCoverageIgnore */ public function generateSQLForIntermmediateTableDrop($tableName) { return "DROP TABLE $tableName CASCADE CONSTRAINTS ;"; } } No newline at end of file src/UnicaenDbImport/CodeGenerator/Oracle/CodeGeneratorFactory.php 0 → 100644 +19 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\CodeGenerator\Oracle; use Doctrine\DBAL\Platforms\OraclePlatform; use Interop\Container\ContainerInterface; use UnicaenDbImport\CodeGenerator\Oracle\CodeGenerator as OracleCodeGenerator; class CodeGeneratorFactory { /** * @param ContainerInterface $container * @return CodeGenerator */ public function __invoke(ContainerInterface $container) { return new OracleCodeGenerator(new OraclePlatform()); } } No newline at end of file src/UnicaenDbImport/CodeGenerator/Oracle/Helper/DiffViewHelper.php 0 → 100644 +88 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\CodeGenerator\Oracle\Helper; use Doctrine\DBAL\Platforms\OraclePlatform; use UnicaenApp\Exception\LogicException; use UnicaenDbImport\Domain\Operation; class DiffViewHelper extends \UnicaenDbImport\CodeGenerator\Helper\DiffViewHelper { /** * @var OraclePlatform */ protected $platform; /** * {@inheritDoc} */ protected function generateViewDeletionSQLSnippet($destinationTable) { $name = $this->generateViewName($destinationTable); return "DROP VIEW $name"; } /** * {@inheritDoc} */ protected function generateSQLForUpdateOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_UPDATE, $destinationTable, $sourceCodeColumn, $columns); } /** * {@inheritDoc} */ protected function generateSQLForUndeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_UNDELETE, $destinationTable, $sourceCodeColumn, $columns); } /** * {@inheritDoc} */ protected function generateSQLForDeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_DELETE, $destinationTable, $sourceCodeColumn, $columns); } /** * @param string $operation * @param string $destinationTable * @param string $sourceCodeColumn * @param array $columns * @return string */ protected function generateSQLUpdate($operation, $destinationTable, $sourceCodeColumn, array $columns) { $diffViewName = $this->generateViewName($destinationTable); $now = $this->platform->getNowExpression(); // instruction de mise à jour de la table destination $markup = ''; $markup .= "MERGE INTO $destinationTable d USING (SELECT * FROM $diffViewName) AS diff " . PHP_EOL; $markup .= "ON diff.operation = '$operation' AND d.$sourceCodeColumn = diff.$sourceCodeColumn " . PHP_EOL; $markup .= "WHEN MATCHED THEN UPDATE SET " . PHP_EOL; switch ($operation) { case Operation::OPERATION_UPDATE: case Operation::OPERATION_UNDELETE: $colUpdates = array_map(function ($col) { return "$col = diff.S_$col"; }, $columns); $markup .= implode(', ', $colUpdates) . ", updated_on = $now, deleted_on = null"; break; case Operation::OPERATION_DELETE: $markup .= "deleted_on = $now"; break; default: throw new LogicException("Opération spécifiées inattendue: " . $operation); } return $markup; } } No newline at end of file src/UnicaenDbImport/CodeGenerator/Oracle/Helper/LogTableHelper.php 0 → 100644 +21 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\CodeGenerator\Oracle\Helper; use Doctrine\DBAL\Platforms\OraclePlatform; /** * Génération de code SQL concernant la table de log de synchro. * * Version Oracle. * * @author Unicaen */ class LogTableHelper extends \UnicaenDbImport\CodeGenerator\Helper\LogTableHelper { /** * @var OraclePlatform */ protected $platform; } No newline at end of file Loading
config/oracle.config.php 0 → 100644 +24 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport; use Doctrine\DBAL\Platforms\OraclePlatform; use UnicaenDbImport\CodeGenerator\Oracle\CodeGenerator; use UnicaenDbImport\CodeGenerator\Oracle\CodeGeneratorFactory; return [ 'import' => [ /** * @see Config::getCodeGeneratorsMappingConfig() */ 'code_generators_mapping' => [ OraclePlatform::class => CodeGenerator::class, ], /** * @see Config::getCodeGeneratorsFactoriesConfig() */ 'code_generators_factories' => [ CodeGenerator::class => CodeGeneratorFactory::class, ], ], ];
src/UnicaenDbImport/CodeGenerator/Oracle/CodeGenerator.php 0 → 100644 +68 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\CodeGenerator\Oracle; use Doctrine\DBAL\Platforms\AbstractPlatform; use Doctrine\DBAL\Platforms\OraclePlatform; use UnicaenDbImport\CodeGenerator\Oracle\Helper\DiffViewHelper as OracleDiffViewHelper; use UnicaenDbImport\CodeGenerator\Oracle\Helper\LogTableHelper as OracleLogTableHelper; use UnicaenDbImport\CodeGenerator\Oracle\Helper\TableValidationHelper as OracleTableValidationHelper; use UnicaenDbImport\CodeGenerator\Oracle\Helper\TableHelper as OracleTableHelper; /** * Version Oracle. * * @author Unicaen */ class CodeGenerator extends \UnicaenDbImport\CodeGenerator\CodeGenerator { /** * @var OraclePlatform */ protected $platform; /** * @var OracleTableHelper */ protected $tableHelper; /** * @var OracleTableValidationHelper */ protected $tableValidationHelper; /** * @var OracleDiffViewHelper */ protected $diffViewHelper; /** * @var OracleLogTableHelper */ protected $logTableHelper; /** * CodeGenerator constructor. * * @param AbstractPlatform $platform */ public function __construct(AbstractPlatform $platform) { parent::__construct($platform); $this->tableHelper = new OracleTableHelper($this->platform); $this->tableValidationHelper = new OracleTableValidationHelper($this->platform); $this->diffViewHelper = new OracleDiffViewHelper($this->platform); $this->logTableHelper = new OracleLogTableHelper($this->platform); } /** * @param string $tableName * @return string * @codeCoverageIgnore */ public function generateSQLForIntermmediateTableDrop($tableName) { return "DROP TABLE $tableName CASCADE CONSTRAINTS ;"; } } No newline at end of file
src/UnicaenDbImport/CodeGenerator/Oracle/CodeGeneratorFactory.php 0 → 100644 +19 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\CodeGenerator\Oracle; use Doctrine\DBAL\Platforms\OraclePlatform; use Interop\Container\ContainerInterface; use UnicaenDbImport\CodeGenerator\Oracle\CodeGenerator as OracleCodeGenerator; class CodeGeneratorFactory { /** * @param ContainerInterface $container * @return CodeGenerator */ public function __invoke(ContainerInterface $container) { return new OracleCodeGenerator(new OraclePlatform()); } } No newline at end of file
src/UnicaenDbImport/CodeGenerator/Oracle/Helper/DiffViewHelper.php 0 → 100644 +88 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\CodeGenerator\Oracle\Helper; use Doctrine\DBAL\Platforms\OraclePlatform; use UnicaenApp\Exception\LogicException; use UnicaenDbImport\Domain\Operation; class DiffViewHelper extends \UnicaenDbImport\CodeGenerator\Helper\DiffViewHelper { /** * @var OraclePlatform */ protected $platform; /** * {@inheritDoc} */ protected function generateViewDeletionSQLSnippet($destinationTable) { $name = $this->generateViewName($destinationTable); return "DROP VIEW $name"; } /** * {@inheritDoc} */ protected function generateSQLForUpdateOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_UPDATE, $destinationTable, $sourceCodeColumn, $columns); } /** * {@inheritDoc} */ protected function generateSQLForUndeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_UNDELETE, $destinationTable, $sourceCodeColumn, $columns); } /** * {@inheritDoc} */ protected function generateSQLForDeleteOperationInDestinationTable($destinationTable, $sourceCodeColumn, array $columns) { return $this->generateSQLUpdate(Operation::OPERATION_DELETE, $destinationTable, $sourceCodeColumn, $columns); } /** * @param string $operation * @param string $destinationTable * @param string $sourceCodeColumn * @param array $columns * @return string */ protected function generateSQLUpdate($operation, $destinationTable, $sourceCodeColumn, array $columns) { $diffViewName = $this->generateViewName($destinationTable); $now = $this->platform->getNowExpression(); // instruction de mise à jour de la table destination $markup = ''; $markup .= "MERGE INTO $destinationTable d USING (SELECT * FROM $diffViewName) AS diff " . PHP_EOL; $markup .= "ON diff.operation = '$operation' AND d.$sourceCodeColumn = diff.$sourceCodeColumn " . PHP_EOL; $markup .= "WHEN MATCHED THEN UPDATE SET " . PHP_EOL; switch ($operation) { case Operation::OPERATION_UPDATE: case Operation::OPERATION_UNDELETE: $colUpdates = array_map(function ($col) { return "$col = diff.S_$col"; }, $columns); $markup .= implode(', ', $colUpdates) . ", updated_on = $now, deleted_on = null"; break; case Operation::OPERATION_DELETE: $markup .= "deleted_on = $now"; break; default: throw new LogicException("Opération spécifiées inattendue: " . $operation); } return $markup; } } No newline at end of file
src/UnicaenDbImport/CodeGenerator/Oracle/Helper/LogTableHelper.php 0 → 100644 +21 −0 Original line number Diff line number Diff line <?php namespace UnicaenDbImport\CodeGenerator\Oracle\Helper; use Doctrine\DBAL\Platforms\OraclePlatform; /** * Génération de code SQL concernant la table de log de synchro. * * Version Oracle. * * @author Unicaen */ class LogTableHelper extends \UnicaenDbImport\CodeGenerator\Helper\LogTableHelper { /** * @var OraclePlatform */ protected $platform; } No newline at end of file