From 7d9d375d9acb0b73e98cc2deb1fad551366730ea Mon Sep 17 00:00:00 2001 From: Bertrand Gauthier <bertrand.gauthier@unicaen.fr> Date: Fri, 5 Apr 2019 17:04:45 +0200 Subject: [PATCH] =?UTF-8?q?G=C3=A9n=C3=A9ration=20des=20scripts=20d'insert?= =?UTF-8?q?ion=20en=20base=20:=20ajout=20d'une=20marque=20'/*HISTO::*/=20?= =?UTF-8?q?=C3=A0=20c=C3=B4t=C3=A9=20des=20valeurs=20des=20colonnes=20d'hi?= =?UTF-8?q?storique,=20permettant=20de=20les=20rep=C3=A9rer=20pour=20?= =?UTF-8?q?=C3=A9ventuellement=20les=20substituer=20par=201=20par=20exempl?= =?UTF-8?q?e,=20=C3=A9vitant=20ainsi=20les=20erreurs=20de=20contrainte=20d?= =?UTF-8?q?e=20r=C3=A9f=C3=A9rence.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/UnicaenOracle/Service/DataService.php | 39 ++++++++++++++++++----- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/src/UnicaenOracle/Service/DataService.php b/src/UnicaenOracle/Service/DataService.php index e039554..69e449c 100644 --- a/src/UnicaenOracle/Service/DataService.php +++ b/src/UnicaenOracle/Service/DataService.php @@ -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])) { -- GitLab