Skip to content
Snippets Groups Projects
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
No related branches found
No related tags found
No related merge requests found
Pipeline #4262 failed
......@@ -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])) {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment