Commit 6755a5f0 authored by Jean-Philippe Metivier's avatar Jean-Philippe Metivier
Browse files

Premiere version avec perservation des IDs

parent 42ff0d9a
Loading
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -345,6 +345,7 @@ abstract class CodeGenerator implements CodeGeneratorInterface
    {
        $destinationTable = $destination->getTable();
        $idColumnSequence = $destination->getIdColumnSequence();
        $idColumnPreserved = $destination->getIdColumnPreserved();
        $where = $destination->getWhere();
        $sourceCodeColumn = $source->getSourceCodeColumn();
        $columns = $source->getColumns();
@@ -359,7 +360,8 @@ abstract class CodeGenerator implements CodeGeneratorInterface
                        $sourceCodeColumn,
                        $columns,
                        $where,
                        $idColumnSequence);
                        $idColumnSequence,
                        $idColumnPreserved);
                break;
            case Operation::OPERATION_UPDATE;
                $sql = $this->tableHelper->generateSQLForUpdateOperationInDestinationTable(
+15 −2
Original line number Diff line number Diff line
@@ -316,6 +316,11 @@ EOT;
        $commaSeparatedColumnNames = implode(', ', $destinationColumns);
        $commaSeparatedColumnValues = implode(', ', $selectExpressions);

//        if ($destinationTable === 'carriere_corps') {
            $commaSeparatedColumnNames .= ',id';
            $commaSeparatedColumnValues .= ','.$selectExpressions['ID_ORIG'];
//        }

        return <<<EOT
INSERT INTO $destinationTable ($commaSeparatedColumnNames)
SELECT $commaSeparatedColumnValues
@@ -337,7 +342,9 @@ EOT;
        string $sourceCodeColumn,
        array  $columns,
        string $where = null,
               $idColumnSequence = null): string
               $idColumnSequence = null,
               $preservedId = null
        ): string
    {
        $diffViewName = $this->generateDiffViewName($destinationTable);
        $now = $this->platform->getNowExpression();
@@ -380,12 +387,18 @@ EOT;
            $sourceCodeColumn,
            'source_id',
        );

        $idExpr='';
        if ($preservedId) {
            $idExpr = 'cast(ID_ORIG as bigint)';
        } else {
            if ($useSequenceForId) {
                $idExpr = $this->generateSQLForSequenceNextVal($idColumnSequence);
            }
        }
        array_unshift($selectExpressions,
            $idExpr,
        );
        }

        $wheres = null;
        if ($where) {
+5 −0
Original line number Diff line number Diff line
@@ -160,6 +160,11 @@ class Destination implements DestinationInterface
        return $this->config->get('id_sequence');
    }

    public function getIdColumnPreserved()
    {
        return $this->config->get('preserved_id');
    }

    public function getIntermediateTable(): string
    {
        if ($intermediateTable = $this->config->get('intermediate_table')) {
+2 −0
Original line number Diff line number Diff line
@@ -99,6 +99,8 @@ interface DestinationInterface
     */
    public function getIdColumnSequence();

    public function getIdColumnPreserved();

    /**
     * Retourne le nom de la table intermédiaire à créer dans la base de données de destination
     * lorsque l'utilisation d'une table intermédiaire est nécessaire (cf {@link requiresIntermediateTable}).
+1 −0
Original line number Diff line number Diff line
@@ -424,6 +424,7 @@ class DatabaseService
                $columnsValues = $this->prepareDestinationData($preparedRow);

                $insertsSQL = $this->codeGenerator->generateSQLForInsertOneRowIntoTable($tableName, $columnsValues, $sourceCode, $idColumnSequence);
//                var_dump($insertsSQL);
                try {
                    $count += $this->queryExecutor->exec($insertsSQL, $this->destination->getConnection());
                } catch (Exception $e) {