Commit a33810cf authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Corrections de bugs

parent fb59a4c0
Loading
Loading
Loading
Loading
+54 −3
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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);
    }

    /**
@@ -255,7 +306,7 @@ abstract class CodeGenerator implements CodeGeneratorInterface
    /**
     * @inheritDoc
     */
    public function generateSQLForDestinationOperation(
    public function generateSQLForDestinationUpdate(
        $operation,
        SourceInterface $source,
        DestinationInterface $destination)
+3 −2
Original line number Diff line number Diff line
@@ -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
@@ -129,7 +130,7 @@ interface CodeGeneratorInterface
     * @param DestinationInterface $destination
     * @return string[]
     */
    public function generateSQLForDestinationOperation(
    public function generateSQLForDestinationUpdate(
        $operation,
        SourceInterface $source,
        DestinationInterface $destination);
+10 −2
Original line number Diff line number Diff line
@@ -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};
@@ -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';
+59 −2
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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;
@@ -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);
+28 −0
Original line number Diff line number Diff line
@@ -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}
     */
@@ -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