Loading src/UnicaenDbImport/CodeGenerator/CodeGenerator.php +54 −3 Original line number Diff line number Diff line Loading @@ -93,6 +93,44 @@ abstract class CodeGenerator implements CodeGeneratorInterface return $this->tableValidationHelper->convertTableExistenceCheckResultToBoolean($result); } /** * @param string $tableName * @param string|null $sequenceName * @return string * @codeCoverageIgnore Car simple délégation */ public function generateSQLForSequenceExistenceCheck(string $tableName, &$sequenceName = null) { if ($sequenceName === null) { // si aucun nom de séquence n'a été fourni, on tente celui par défaut. $sequenceName = $this->tableHelper->generateSQLForIdSequenceDefaultName($tableName); } return $this->tableValidationHelper->generateSQLForSequenceExistenceCheck($sequenceName); } /** * @param string $sequenceName * @param array $result * @return RuntimeException|null * @codeCoverageIgnore Car simple délégation */ public function convertSequenceExistenceCheckResultToException(string $sequenceName, array $result) { return $this->tableValidationHelper->convertSequenceExistenceCheckResultToException($sequenceName, $result); } /** * @param string $tableName * @param int $columnsCount * @return string * @codeCoverageIgnore Car simple délégation */ public function generateSQLForIdColumnValidationInTable(string $tableName, int &$columnsCount) { return $this->tableValidationHelper->generateSQLForIdColumnValidation($tableName, $columnsCount); } /** * @param string $tableName * @param int $columnsCount Loading @@ -104,6 +142,18 @@ abstract class CodeGenerator implements CodeGeneratorInterface return $this->tableValidationHelper->generateSQLForHistoColumnsValidation($tableName, $columnsCount); } /** * @param string $tableName * @param array $result * @param int $columnCount * @return null|RuntimeException * @codeCoverageIgnore Car simple délégation */ public function convertIdColumnValidationBadResultToException($tableName, array $result, int $columnCount) { return $this->tableValidationHelper->convertIdColumnValidationBadResultToException($tableName, $result, $columnCount); } /** * @param string $tableName * @param array $result Loading @@ -130,14 +180,15 @@ abstract class CodeGenerator implements CodeGeneratorInterface /** * @param string $tableName * @param string $sourceCodeColumn * @param array $result * @param int $columCount * @return null|RuntimeException * @codeCoverageIgnore Car simple délégation */ public function convertSourceColumnsValidationBadResultToException($tableName, array $result, int $columCount) public function convertSourceColumnsValidationBadResultToException(string $tableName, string $sourceCodeColumn, array $result, int $columCount) { return $this->tableValidationHelper->convertSourceColumnsValidationBadResultToException($tableName, $result, $columCount); return $this->tableValidationHelper->convertSourceColumnsValidationBadResultToException($tableName, $sourceCodeColumn, $result, $columCount); } /** Loading Loading @@ -255,7 +306,7 @@ abstract class CodeGenerator implements CodeGeneratorInterface /** * @inheritDoc */ public function generateSQLForDestinationOperation( public function generateSQLForDestinationUpdate( $operation, SourceInterface $source, DestinationInterface $destination) Loading src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php +3 −2 Original line number Diff line number Diff line Loading @@ -53,12 +53,13 @@ interface CodeGeneratorInterface /** * @param string $tableName * @param string $sourceCodeColumn * @param array $result * @param int $columCount * @return null|RuntimeException * @codeCoverageIgnore Car simple délégation */ public function convertSourceColumnsValidationBadResultToException($tableName, array $result, int $columCount); public function convertSourceColumnsValidationBadResultToException(string $tableName, string $sourceCodeColumn, array $result, int $columCount); /** * @param SourceInterface $source Loading Loading @@ -129,7 +130,7 @@ interface CodeGeneratorInterface * @param DestinationInterface $destination * @return string[] */ public function generateSQLForDestinationOperation( public function generateSQLForDestinationUpdate( $operation, SourceInterface $source, DestinationInterface $destination); Loading src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php +10 −2 Original line number Diff line number Diff line Loading @@ -38,7 +38,15 @@ abstract class TableHelper extends Helper */ public function generateSQLForIntermediateTableCreation($destinationTable, $sourceCodeColumn, $columns, $intermediateTable) { $commaSeparatedColumnNames = implode(', ', array_merge([$sourceCodeColumn], $columns)); $createdByCol = $this->config->getHistoColumnAliasForCreatedBy(); $createdOnCol = $this->config->getHistoColumnAliasForCreatedOn(); $columns = array_merge( ['id', 'source_id', $sourceCodeColumn], [$createdByCol, $createdOnCol], $columns ); $commaSeparatedColumnNames = implode(', ', $columns); $sqlTemplate = <<<'EOT' create table {intermediateTable} as select {commaSeparatedColumnNames} from {destinationTable}; Loading Loading @@ -363,7 +371,7 @@ EOT; $commaSeparatedColumnValues = implode(', ', $selectExpressions); return <<<EOT INSERT INTO $destinationTable d ($commaSeparatedColumnNames) INSERT INTO $destinationTable ($commaSeparatedColumnNames) SELECT $commaSeparatedColumnValues FROM source s WHERE s.code = '$sourceCode'; Loading src/UnicaenDbImport/CodeGenerator/Helper/TableValidationHelper.php +59 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,12 @@ abstract class TableValidationHelper extends Helper */ abstract public function generateSQLForTableExistenceCheck($tableName); /** * @param string $sequenceName * @return string */ abstract public function generateSQLForSequenceExistenceCheck($sequenceName); /** * @param array $result * @return bool Loading @@ -32,6 +38,27 @@ abstract class TableValidationHelper extends Helper return intval($value) === 1; } /** * @param string $sequenceName * @param array $result * @return null|RuntimeException */ public function convertSequenceExistenceCheckResultToException(string $sequenceName, array $result) { $value = array_pop($result[0]); // NB: on ignore le nom de la colonne car la casse est incertaine if (intval($value) === 1) { return null; } $message = "Assurez-vous que la sequence '$sequenceName' existe : " . PHP_EOL; $message .= <<<EOT CREATE SEQUENCE $sequenceName ; EOT; return new RuntimeException($message); } /** * @param string $tableName * @param array $columnsAndTypes Loading @@ -57,6 +84,13 @@ abstract class TableValidationHelper extends Helper return new RuntimeException($message); } /** * @param string $tableName * @param int $columnsCount * @return string */ abstract public function generateSQLForIdColumnValidation(string $tableName, int &$columnsCount); /** * @param string $tableName * @param int $columnsCount Loading @@ -72,6 +106,28 @@ abstract class TableValidationHelper extends Helper */ abstract public function generateSQLForSourceColumnsValidation(string $tableName, string $sourceCodeColumn, int &$columCount); /** * @param string $tableName * @param array $result * @param int $columnCount * @return null|RuntimeException */ public function convertIdColumnValidationBadResultToException($tableName, array $result, int $columnCount) { if (count($result) === $columnCount) { return null; } $integer = $this->platform->getBigIntTypeDeclarationSQL([]); $message = "Assurez-vous que la colonne id existe dans la table '$tableName' : " . PHP_EOL; $message .= <<<EOT ALTER TABLE $tableName ADD id $integer NOT NULL ; EOT; return new RuntimeException($message); } /** * @param string $tableName * @param array $result Loading Loading @@ -114,11 +170,12 @@ EOT; /** * @param string $tableName * @param string $sourceCodeColumn * @param array $result * @param int $columCount * @return null|RuntimeException */ public function convertSourceColumnsValidationBadResultToException($tableName, array $result, int $columCount) public function convertSourceColumnsValidationBadResultToException(string $tableName, string $sourceCodeColumn, array $result, int $columCount) { if (count($result) === $columCount) { return null; Loading @@ -130,7 +187,7 @@ EOT; $message = "Assurez-vous que les colonnes suivantes sont présentes dans la table '$tableName' : " . PHP_EOL; $message .= <<<EOT ALTER TABLE $tableName ADD source_id $integer NOT NULL ; ALTER TABLE $tableName ADD source_code $varchar ; ALTER TABLE $tableName ADD $sourceCodeColumn $varchar ; EOT; return new RuntimeException($message); Loading src/UnicaenDbImport/CodeGenerator/Oracle/Helper/TableValidationHelper.php +28 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,18 @@ FROM tmp EOT; } /** * {@inheritDoc} */ public function generateSQLForSequenceExistenceCheck($sequenceName) { return <<<EOT SELECT count(*) as seq_exists FROM all_sequences WHERE upper(sequence_name) = upper('$sequenceName') EOT; } /** * {@inheritDoc} */ Loading Loading @@ -73,6 +85,22 @@ WHERE upper(c.table_name) = upper('$tableName') AND (rc.column_type IS NULL OR r EOT; } /** * @param string $tableName * @param int $columnsCount * @return string */ public function generateSQLForIdColumnValidation(string $tableName, int &$columnsCount) { $columnsAndTypes = [ 'id' => 'NUMBER', ]; $columnsCount = count($columnsAndTypes); return $this->generateSQLForColumnsValidation($tableName, $columnsAndTypes); } /** * {@inheritDoc} */ Loading Loading
src/UnicaenDbImport/CodeGenerator/CodeGenerator.php +54 −3 Original line number Diff line number Diff line Loading @@ -93,6 +93,44 @@ abstract class CodeGenerator implements CodeGeneratorInterface return $this->tableValidationHelper->convertTableExistenceCheckResultToBoolean($result); } /** * @param string $tableName * @param string|null $sequenceName * @return string * @codeCoverageIgnore Car simple délégation */ public function generateSQLForSequenceExistenceCheck(string $tableName, &$sequenceName = null) { if ($sequenceName === null) { // si aucun nom de séquence n'a été fourni, on tente celui par défaut. $sequenceName = $this->tableHelper->generateSQLForIdSequenceDefaultName($tableName); } return $this->tableValidationHelper->generateSQLForSequenceExistenceCheck($sequenceName); } /** * @param string $sequenceName * @param array $result * @return RuntimeException|null * @codeCoverageIgnore Car simple délégation */ public function convertSequenceExistenceCheckResultToException(string $sequenceName, array $result) { return $this->tableValidationHelper->convertSequenceExistenceCheckResultToException($sequenceName, $result); } /** * @param string $tableName * @param int $columnsCount * @return string * @codeCoverageIgnore Car simple délégation */ public function generateSQLForIdColumnValidationInTable(string $tableName, int &$columnsCount) { return $this->tableValidationHelper->generateSQLForIdColumnValidation($tableName, $columnsCount); } /** * @param string $tableName * @param int $columnsCount Loading @@ -104,6 +142,18 @@ abstract class CodeGenerator implements CodeGeneratorInterface return $this->tableValidationHelper->generateSQLForHistoColumnsValidation($tableName, $columnsCount); } /** * @param string $tableName * @param array $result * @param int $columnCount * @return null|RuntimeException * @codeCoverageIgnore Car simple délégation */ public function convertIdColumnValidationBadResultToException($tableName, array $result, int $columnCount) { return $this->tableValidationHelper->convertIdColumnValidationBadResultToException($tableName, $result, $columnCount); } /** * @param string $tableName * @param array $result Loading @@ -130,14 +180,15 @@ abstract class CodeGenerator implements CodeGeneratorInterface /** * @param string $tableName * @param string $sourceCodeColumn * @param array $result * @param int $columCount * @return null|RuntimeException * @codeCoverageIgnore Car simple délégation */ public function convertSourceColumnsValidationBadResultToException($tableName, array $result, int $columCount) public function convertSourceColumnsValidationBadResultToException(string $tableName, string $sourceCodeColumn, array $result, int $columCount) { return $this->tableValidationHelper->convertSourceColumnsValidationBadResultToException($tableName, $result, $columCount); return $this->tableValidationHelper->convertSourceColumnsValidationBadResultToException($tableName, $sourceCodeColumn, $result, $columCount); } /** Loading Loading @@ -255,7 +306,7 @@ abstract class CodeGenerator implements CodeGeneratorInterface /** * @inheritDoc */ public function generateSQLForDestinationOperation( public function generateSQLForDestinationUpdate( $operation, SourceInterface $source, DestinationInterface $destination) Loading
src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php +3 −2 Original line number Diff line number Diff line Loading @@ -53,12 +53,13 @@ interface CodeGeneratorInterface /** * @param string $tableName * @param string $sourceCodeColumn * @param array $result * @param int $columCount * @return null|RuntimeException * @codeCoverageIgnore Car simple délégation */ public function convertSourceColumnsValidationBadResultToException($tableName, array $result, int $columCount); public function convertSourceColumnsValidationBadResultToException(string $tableName, string $sourceCodeColumn, array $result, int $columCount); /** * @param SourceInterface $source Loading Loading @@ -129,7 +130,7 @@ interface CodeGeneratorInterface * @param DestinationInterface $destination * @return string[] */ public function generateSQLForDestinationOperation( public function generateSQLForDestinationUpdate( $operation, SourceInterface $source, DestinationInterface $destination); Loading
src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php +10 −2 Original line number Diff line number Diff line Loading @@ -38,7 +38,15 @@ abstract class TableHelper extends Helper */ public function generateSQLForIntermediateTableCreation($destinationTable, $sourceCodeColumn, $columns, $intermediateTable) { $commaSeparatedColumnNames = implode(', ', array_merge([$sourceCodeColumn], $columns)); $createdByCol = $this->config->getHistoColumnAliasForCreatedBy(); $createdOnCol = $this->config->getHistoColumnAliasForCreatedOn(); $columns = array_merge( ['id', 'source_id', $sourceCodeColumn], [$createdByCol, $createdOnCol], $columns ); $commaSeparatedColumnNames = implode(', ', $columns); $sqlTemplate = <<<'EOT' create table {intermediateTable} as select {commaSeparatedColumnNames} from {destinationTable}; Loading Loading @@ -363,7 +371,7 @@ EOT; $commaSeparatedColumnValues = implode(', ', $selectExpressions); return <<<EOT INSERT INTO $destinationTable d ($commaSeparatedColumnNames) INSERT INTO $destinationTable ($commaSeparatedColumnNames) SELECT $commaSeparatedColumnValues FROM source s WHERE s.code = '$sourceCode'; Loading
src/UnicaenDbImport/CodeGenerator/Helper/TableValidationHelper.php +59 −2 Original line number Diff line number Diff line Loading @@ -21,6 +21,12 @@ abstract class TableValidationHelper extends Helper */ abstract public function generateSQLForTableExistenceCheck($tableName); /** * @param string $sequenceName * @return string */ abstract public function generateSQLForSequenceExistenceCheck($sequenceName); /** * @param array $result * @return bool Loading @@ -32,6 +38,27 @@ abstract class TableValidationHelper extends Helper return intval($value) === 1; } /** * @param string $sequenceName * @param array $result * @return null|RuntimeException */ public function convertSequenceExistenceCheckResultToException(string $sequenceName, array $result) { $value = array_pop($result[0]); // NB: on ignore le nom de la colonne car la casse est incertaine if (intval($value) === 1) { return null; } $message = "Assurez-vous que la sequence '$sequenceName' existe : " . PHP_EOL; $message .= <<<EOT CREATE SEQUENCE $sequenceName ; EOT; return new RuntimeException($message); } /** * @param string $tableName * @param array $columnsAndTypes Loading @@ -57,6 +84,13 @@ abstract class TableValidationHelper extends Helper return new RuntimeException($message); } /** * @param string $tableName * @param int $columnsCount * @return string */ abstract public function generateSQLForIdColumnValidation(string $tableName, int &$columnsCount); /** * @param string $tableName * @param int $columnsCount Loading @@ -72,6 +106,28 @@ abstract class TableValidationHelper extends Helper */ abstract public function generateSQLForSourceColumnsValidation(string $tableName, string $sourceCodeColumn, int &$columCount); /** * @param string $tableName * @param array $result * @param int $columnCount * @return null|RuntimeException */ public function convertIdColumnValidationBadResultToException($tableName, array $result, int $columnCount) { if (count($result) === $columnCount) { return null; } $integer = $this->platform->getBigIntTypeDeclarationSQL([]); $message = "Assurez-vous que la colonne id existe dans la table '$tableName' : " . PHP_EOL; $message .= <<<EOT ALTER TABLE $tableName ADD id $integer NOT NULL ; EOT; return new RuntimeException($message); } /** * @param string $tableName * @param array $result Loading Loading @@ -114,11 +170,12 @@ EOT; /** * @param string $tableName * @param string $sourceCodeColumn * @param array $result * @param int $columCount * @return null|RuntimeException */ public function convertSourceColumnsValidationBadResultToException($tableName, array $result, int $columCount) public function convertSourceColumnsValidationBadResultToException(string $tableName, string $sourceCodeColumn, array $result, int $columCount) { if (count($result) === $columCount) { return null; Loading @@ -130,7 +187,7 @@ EOT; $message = "Assurez-vous que les colonnes suivantes sont présentes dans la table '$tableName' : " . PHP_EOL; $message .= <<<EOT ALTER TABLE $tableName ADD source_id $integer NOT NULL ; ALTER TABLE $tableName ADD source_code $varchar ; ALTER TABLE $tableName ADD $sourceCodeColumn $varchar ; EOT; return new RuntimeException($message); Loading
src/UnicaenDbImport/CodeGenerator/Oracle/Helper/TableValidationHelper.php +28 −0 Original line number Diff line number Diff line Loading @@ -44,6 +44,18 @@ FROM tmp EOT; } /** * {@inheritDoc} */ public function generateSQLForSequenceExistenceCheck($sequenceName) { return <<<EOT SELECT count(*) as seq_exists FROM all_sequences WHERE upper(sequence_name) = upper('$sequenceName') EOT; } /** * {@inheritDoc} */ Loading Loading @@ -73,6 +85,22 @@ WHERE upper(c.table_name) = upper('$tableName') AND (rc.column_type IS NULL OR r EOT; } /** * @param string $tableName * @param int $columnsCount * @return string */ public function generateSQLForIdColumnValidation(string $tableName, int &$columnsCount) { $columnsAndTypes = [ 'id' => 'NUMBER', ]; $columnsCount = count($columnsAndTypes); return $this->generateSQLForColumnsValidation($tableName, $columnsAndTypes); } /** * {@inheritDoc} */ Loading