Commit 7d9d375d authored by Bertrand Gauthier's avatar Bertrand Gauthier
Browse files

Génération des scripts d'insertion en base : ajout d'une marque '/*HISTO::*/ à...

Génération des scripts d'insertion en base : ajout d'une marque '/*HISTO::*/ à côté des valeurs des colonnes d'historique, permettant de les repérer pour éventuellement les substituer par 1 par exemple, évitant ainsi les erreurs de contrainte de référence.
parent 61d68d03
Loading
Loading
Loading
Loading
Loading
+31 −8
Original line number Diff line number Diff line
@@ -26,7 +26,7 @@ class DataService
        }
        $results = $stmt->fetchAll();
        $preparedTablesMetadata = $this->prepareTablesMetadata($results);
        //var_dump(prepareTablesMetadata($results));

        $outputFilePaths = [];

        foreach ($preparedTablesMetadata as $tableName => $columnsConfig) {
@@ -51,8 +51,11 @@ class DataService
                    if ($columnValue === null) {
                        $formattedColumnValue = 'NULL';
                    } else {
                        $formatter = $columnMetadata['formatter'];
                        $formattedColumnValue = $formatter($columnValue);
                        $formatters = $columnMetadata['formatters'];
                        $formattedColumnValue = $columnValue;
                        foreach ($formatters as $formatter) {
                            $formattedColumnValue = $formatter($formattedColumnValue);
                        }
                    }
                    $formattedColumnValues[$columnName] = $formattedColumnValue;
                }
@@ -99,16 +102,21 @@ EOS;
            $colName = $row['COLUMN_NAME'];
            $dataType = $row['DATA_TYPE'];

            $formatters = [];

            //
            // formatteur selon le type de la colonne
            //
            switch (true) {

                case $dataType === 'NUMBER':
                    $formatter = function ($value) {
                    $formatters[] = function ($value) {
                        return $value;
                    };
                    break;

                case $dataType === 'VARCHAR2':
                    $formatter = function ($value) {
                    $formatters[] = function ($value) {
                        $value = str_replace("'", "''", $value);

                        return "'$value'";
@@ -116,7 +124,7 @@ EOS;
                    break;

                case $dataType === 'CLOB':
                    $formatter = function ($value) {
                    $formatters[] = function ($value) {
                        $value = str_replace("'", "''", $value);
                        // découpage en morceaux de 4000 caractères pour éviter l'erreur ORA-01704: string literal too long.
                        $lineEnding = '######';
@@ -131,7 +139,7 @@ EOS;

                case $dataType === 'DATE':
                case substr($dataType, 0, 9) === 'TIMESTAMP':
                    $formatter = function ($value) {
                    $formatters[] = function ($value) {
                        return "TO_DATE('$value', 'YYYY-MM-DD HH24:MI:SS')";
                    };
                    break;
@@ -139,9 +147,24 @@ EOS;
                default:
                    throw new RuntimeException("Type imprévu rencontré dans la table '$tableName' : $dataType.");
            }

            //
            // formatteur selon le nom de la colonne
            //
            switch (true) {
                // repérage des valeurs de colonnes d'historique, permettant si besoin une substitution de valeur ultérieure
                case $colName === 'HISTO_CREATEUR_ID':
                case $colName === 'HISTO_MODIFICATEUR_ID':
                case $colName === 'HISTO_DESTRUCTEUR_ID':
                    $formatters[] = function ($value) {
                        return '/*HISTO::*/' . $value;
                    };
                    break;
            }

            $cfg = [
                'DATA_TYPE' => $dataType,
                'formatter' => $formatter,
                'formatters' => $formatters,
            ];

            if (!isset($formatted[$tableName])) {