Loading README.md +8 −0 Original line number Diff line number Diff line Loading @@ -484,6 +484,8 @@ return [ 'table' => 'ROLE', 'connection' => 'orm_A', 'source_code_column' => 'CODE', 'id_strategy' => 'SEQUENCE', 'id_sequence' => null, ], ], ], Loading Loading @@ -529,6 +531,8 @@ return [ 'table' => 'UTILISATEUR', 'connection' => 'orm_A', 'source_code_column' => 'CODE', 'id_strategy' => 'SEQUENCE', 'id_sequence' => null, 'intermediate_table' => 'NOM_QUE_JE_FORCE', // sinon ce sera 'TMP_UTILISATEUR' Loading Loading @@ -572,6 +576,8 @@ return [ 'table' => 'REGION', 'connection' => 'orm_A', 'source_code_column' => 'CODE', 'id_strategy' => 'SEQUENCE', 'id_sequence' => null, ], ], ], Loading Loading @@ -650,6 +656,8 @@ return [ 'table' => 'FORMATION', 'connection' => 'orm_A', 'source_code_column' => 'ID', 'id_strategy' => 'SEQUENCE', 'id_sequence' => null, ], ], ], Loading config/unicaen-db-import.global.php.dist +35 −6 Original line number Diff line number Diff line Loading @@ -109,9 +109,17 @@ return [ // {@see \UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface}. 'column_value_filter' => null, // Forçage éventuel du nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire). // En l'absence de forçage, aucune séquence ne sera utilisée et la colonne devra avoir un type auto-incrémenté // pour que l'insertion de données fonctionne. // Stratégie à utiliser pour générer les valeurs dans la colonne ID (clé primaire). // Si la stratégie est `'SEQUENCE'`, la séquence spécifiée par 'id_sequence' sera utilisée. // Si la stratégie est `'IDENTITY'`, la valeur de l'ID des données sources sera utilisée. // Si la stratégie est `null`, la colonne de la table destination devra avoir un type auto-incrémenté // pour que l'insertion fonctionne. 'id_strategy' => 'SEQUENCE', // Nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire), // dans le cas où la stratégie est 'SEQUENCE'. // Si aucun nom n'est spécifié (`null`), c'est le nom de séquence par défaut qui sera généré et // utilisé (exemple pour une table `region` : 'region_id_seq'). 'id_sequence' => 'region_id_seq', // Forçage éventuel du nom de la table où seront inscrits les logs (créée automatiquement si nécessaire). Loading Loading @@ -161,9 +169,17 @@ return [ // Nom de la colonne dans la table destination contenant l'identifiant unique 'source_code_column' => 'COD_PAY', // Forçage éventuel du nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire). // En l'absence de forçage, aucune séquence ne sera utilisée et la colonne devra avoir un type auto-incrémenté // pour que l'insertion de données fonctionne. // Stratégie à utiliser pour générer les valeurs dans la colonne ID (clé primaire). // Si la stratégie est `'SEQUENCE'`, la séquence spécifiée par 'id_sequence' sera utilisée. // Si la stratégie est `'IDENTITY'`, la valeur de l'ID des données sources sera utilisée. // Si la stratégie est `null`, la colonne de la table destination devra avoir un type auto-incrémenté // pour que l'insertion fonctionne. 'id_strategy' => 'SEQUENCE', // Nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire), // dans le cas où la stratégie est 'SEQUENCE'. // Si aucun nom n'est spécifié (`null`), c'est le nom de séquence par défaut qui sera généré et // utilisé (exemple pour une table `region` : 'region_id_seq'). 'id_sequence' => 'MES_PAYS_TEMPORAIRES_ID_SEQ', // Forçage éventuel du nom de la table où seront inscrits les logs (créée automatiquement si nécessaire). Loading Loading @@ -223,6 +239,19 @@ return [ // (les noms de colonnes doivent être préfixés par l'alias de la table destination 'd') //'where' => "d.TEM_OUV_DRT_SSO_PAY = 'N'", // Stratégie à utiliser pour générer les valeurs dans la colonne ID (clé primaire). // Si la stratégie est `'SEQUENCE'`, la séquence spécifiée par 'id_sequence' sera utilisée. // Si la stratégie est `'IDENTITY'`, la valeur de l'ID des données sources sera utilisée. // Si la stratégie est `null`, la colonne de la table destination devra avoir un type auto-incrémenté // pour que l'insertion fonctionne. 'id_strategy' => null, // Nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire), // dans le cas où la stratégie est 'SEQUENCE'. // Si aucun nom n'est spécifié (`null`), c'est le nom de séquence par défaut qui sera généré et // utilisé (exemple pour une table `region` : 'region_id_seq'). 'id_sequence' => null, // Forçage éventuel du nom de la table où seront inscrits les logs (créée automatiquement si nécessaire). // En l'absence de ce forçage, le nom de la table sera 'import_log'. 'log_table' => 'import_log', Loading src/UnicaenDbImport/CodeGenerator/CodeGenerator.php +45 −8 Original line number Diff line number Diff line Loading @@ -259,15 +259,17 @@ abstract class CodeGenerator implements CodeGeneratorInterface * @param string $tableName * @param array $row * @param string|null $sourceCode * @param string|null|false $idColumnSequence * @param string|null $idColumnStrategy * @param string|null $idColumnSequence * @return string */ public function generateSQLForInsertOneRowIntoTable(string $tableName, array $row, string $sourceCode = null, $idColumnSequence = null): string ?string $idColumnStrategy = null, ?string $idColumnSequence = null): string { return $this->tableHelper->generateSQLForInsertOneRowIntoTable($tableName, $row, $sourceCode, $idColumnSequence); return $this->tableHelper->generateSQLForInsertOneRowIntoTable($tableName, $row, $sourceCode, $idColumnStrategy, $idColumnSequence); } /** Loading Loading @@ -307,17 +309,32 @@ abstract class CodeGenerator implements CodeGeneratorInterface * @param DestinationInterface $destination * @param string|null $intermediateTable * @return string * @throws \Doctrine\DBAL\Exception */ public function generateSQLForDiffViewCreation(SourceInterface $source, DestinationInterface $destination, string $intermediateTable = null): string { $destinationTable = $destination->getTable(); $sourceCodeColumn = $source->getSourceCodeColumn(); $columns = $source->getColumns(); $includeIdColumn = $destination->getIdColumnStrategy() === DestinationInterface::ID_STRATEGY_IDENTITY; // les éventuelles colonnes d'historique dans les données sources seront écrasées : $columns = array_diff($columns, [ $c = $this->config->getHistoColumnAliasForCreatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForCreatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedBy(), strtoupper($c), ]); $diffSourceTableName = $intermediateTable ?: $source->getTable(); return $this->tableHelper->generateSQLForDiffViewCreation($diffSourceTableName, $destinationTable, $sourceCodeColumn, $columns); return $this->tableHelper->generateSQLForDiffViewCreationOrUpdate( $diffSourceTableName, $destinationTable, $sourceCodeColumn, $columns, $includeIdColumn); } /** Loading @@ -331,8 +348,19 @@ abstract class CodeGenerator implements CodeGeneratorInterface $sourceCodeColumn = $source->getSourceCodeColumn(); $columns = $source->getColumns(); $where = $destination->getWhere(); $includeIdColumn = $destination->getIdColumnStrategy() === DestinationInterface::ID_STRATEGY_IDENTITY; // les éventuelles colonnes d'historique dans les données sources seront écrasées : $columns = array_diff($columns, [ $c = $this->config->getHistoColumnAliasForCreatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForCreatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedBy(), strtoupper($c), ]); return $this->tableHelper->generateSQLForDiffViewSelect($destinationTable, $sourceCodeColumn, $columns, $where); return $this->tableHelper->generateSQLForDiffViewSelect($destinationTable, $sourceCodeColumn, $columns, $where, $includeIdColumn); } /** Loading @@ -344,13 +372,21 @@ abstract class CodeGenerator implements CodeGeneratorInterface DestinationInterface $destination): string { $destinationTable = $destination->getTable(); $idColumnStrategy = $destination->getIdColumnStrategy(); $idColumnSequence = $destination->getIdColumnSequence(); $where = $destination->getWhere(); $sourceCodeColumn = $source->getSourceCodeColumn(); $columns = $source->getColumns(); // colonne ID écartée $columns = array_diff($columns, ['ID', 'id']); // les éventuelles colonnes d'historique dans les données sources seront écrasées : $columns = array_diff($columns, [ $c = $this->config->getHistoColumnAliasForCreatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForCreatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedBy(), strtoupper($c), ]); switch ($operation) { case Operation::OPERATION_INSERT; Loading @@ -359,6 +395,7 @@ abstract class CodeGenerator implements CodeGeneratorInterface $sourceCodeColumn, $columns, $where, $idColumnStrategy, $idColumnSequence); break; case Operation::OPERATION_UPDATE; Loading src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php +4 −2 Original line number Diff line number Diff line Loading @@ -86,13 +86,15 @@ interface CodeGeneratorInterface * @param string $tableName * @param array $row * @param string|null $sourceCode * @param string|null|false $idColumnSequence * @param string|null $idColumnStrategy * @param string|null $idColumnSequence * @return string */ public function generateSQLForInsertOneRowIntoTable(string $tableName, array $row, string $sourceCode = null, $idColumnSequence = null): string; ?string $idColumnStrategy = null, ?string $idColumnSequence = null): string; /** * @param string $logTableName Loading src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php +119 −86 File changed.Preview size limit exceeded, changes collapsed. Show changes Loading
README.md +8 −0 Original line number Diff line number Diff line Loading @@ -484,6 +484,8 @@ return [ 'table' => 'ROLE', 'connection' => 'orm_A', 'source_code_column' => 'CODE', 'id_strategy' => 'SEQUENCE', 'id_sequence' => null, ], ], ], Loading Loading @@ -529,6 +531,8 @@ return [ 'table' => 'UTILISATEUR', 'connection' => 'orm_A', 'source_code_column' => 'CODE', 'id_strategy' => 'SEQUENCE', 'id_sequence' => null, 'intermediate_table' => 'NOM_QUE_JE_FORCE', // sinon ce sera 'TMP_UTILISATEUR' Loading Loading @@ -572,6 +576,8 @@ return [ 'table' => 'REGION', 'connection' => 'orm_A', 'source_code_column' => 'CODE', 'id_strategy' => 'SEQUENCE', 'id_sequence' => null, ], ], ], Loading Loading @@ -650,6 +656,8 @@ return [ 'table' => 'FORMATION', 'connection' => 'orm_A', 'source_code_column' => 'ID', 'id_strategy' => 'SEQUENCE', 'id_sequence' => null, ], ], ], Loading
config/unicaen-db-import.global.php.dist +35 −6 Original line number Diff line number Diff line Loading @@ -109,9 +109,17 @@ return [ // {@see \UnicaenDbImport\Filter\ColumnValue\ColumnValueFilterInterface}. 'column_value_filter' => null, // Forçage éventuel du nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire). // En l'absence de forçage, aucune séquence ne sera utilisée et la colonne devra avoir un type auto-incrémenté // pour que l'insertion de données fonctionne. // Stratégie à utiliser pour générer les valeurs dans la colonne ID (clé primaire). // Si la stratégie est `'SEQUENCE'`, la séquence spécifiée par 'id_sequence' sera utilisée. // Si la stratégie est `'IDENTITY'`, la valeur de l'ID des données sources sera utilisée. // Si la stratégie est `null`, la colonne de la table destination devra avoir un type auto-incrémenté // pour que l'insertion fonctionne. 'id_strategy' => 'SEQUENCE', // Nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire), // dans le cas où la stratégie est 'SEQUENCE'. // Si aucun nom n'est spécifié (`null`), c'est le nom de séquence par défaut qui sera généré et // utilisé (exemple pour une table `region` : 'region_id_seq'). 'id_sequence' => 'region_id_seq', // Forçage éventuel du nom de la table où seront inscrits les logs (créée automatiquement si nécessaire). Loading Loading @@ -161,9 +169,17 @@ return [ // Nom de la colonne dans la table destination contenant l'identifiant unique 'source_code_column' => 'COD_PAY', // Forçage éventuel du nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire). // En l'absence de forçage, aucune séquence ne sera utilisée et la colonne devra avoir un type auto-incrémenté // pour que l'insertion de données fonctionne. // Stratégie à utiliser pour générer les valeurs dans la colonne ID (clé primaire). // Si la stratégie est `'SEQUENCE'`, la séquence spécifiée par 'id_sequence' sera utilisée. // Si la stratégie est `'IDENTITY'`, la valeur de l'ID des données sources sera utilisée. // Si la stratégie est `null`, la colonne de la table destination devra avoir un type auto-incrémenté // pour que l'insertion fonctionne. 'id_strategy' => 'SEQUENCE', // Nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire), // dans le cas où la stratégie est 'SEQUENCE'. // Si aucun nom n'est spécifié (`null`), c'est le nom de séquence par défaut qui sera généré et // utilisé (exemple pour une table `region` : 'region_id_seq'). 'id_sequence' => 'MES_PAYS_TEMPORAIRES_ID_SEQ', // Forçage éventuel du nom de la table où seront inscrits les logs (créée automatiquement si nécessaire). Loading Loading @@ -223,6 +239,19 @@ return [ // (les noms de colonnes doivent être préfixés par l'alias de la table destination 'd') //'where' => "d.TEM_OUV_DRT_SSO_PAY = 'N'", // Stratégie à utiliser pour générer les valeurs dans la colonne ID (clé primaire). // Si la stratégie est `'SEQUENCE'`, la séquence spécifiée par 'id_sequence' sera utilisée. // Si la stratégie est `'IDENTITY'`, la valeur de l'ID des données sources sera utilisée. // Si la stratégie est `null`, la colonne de la table destination devra avoir un type auto-incrémenté // pour que l'insertion fonctionne. 'id_strategy' => null, // Nom de la séquence permettant de générer les valeurs dans la colonne ID (clé primaire), // dans le cas où la stratégie est 'SEQUENCE'. // Si aucun nom n'est spécifié (`null`), c'est le nom de séquence par défaut qui sera généré et // utilisé (exemple pour une table `region` : 'region_id_seq'). 'id_sequence' => null, // Forçage éventuel du nom de la table où seront inscrits les logs (créée automatiquement si nécessaire). // En l'absence de ce forçage, le nom de la table sera 'import_log'. 'log_table' => 'import_log', Loading
src/UnicaenDbImport/CodeGenerator/CodeGenerator.php +45 −8 Original line number Diff line number Diff line Loading @@ -259,15 +259,17 @@ abstract class CodeGenerator implements CodeGeneratorInterface * @param string $tableName * @param array $row * @param string|null $sourceCode * @param string|null|false $idColumnSequence * @param string|null $idColumnStrategy * @param string|null $idColumnSequence * @return string */ public function generateSQLForInsertOneRowIntoTable(string $tableName, array $row, string $sourceCode = null, $idColumnSequence = null): string ?string $idColumnStrategy = null, ?string $idColumnSequence = null): string { return $this->tableHelper->generateSQLForInsertOneRowIntoTable($tableName, $row, $sourceCode, $idColumnSequence); return $this->tableHelper->generateSQLForInsertOneRowIntoTable($tableName, $row, $sourceCode, $idColumnStrategy, $idColumnSequence); } /** Loading Loading @@ -307,17 +309,32 @@ abstract class CodeGenerator implements CodeGeneratorInterface * @param DestinationInterface $destination * @param string|null $intermediateTable * @return string * @throws \Doctrine\DBAL\Exception */ public function generateSQLForDiffViewCreation(SourceInterface $source, DestinationInterface $destination, string $intermediateTable = null): string { $destinationTable = $destination->getTable(); $sourceCodeColumn = $source->getSourceCodeColumn(); $columns = $source->getColumns(); $includeIdColumn = $destination->getIdColumnStrategy() === DestinationInterface::ID_STRATEGY_IDENTITY; // les éventuelles colonnes d'historique dans les données sources seront écrasées : $columns = array_diff($columns, [ $c = $this->config->getHistoColumnAliasForCreatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForCreatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedBy(), strtoupper($c), ]); $diffSourceTableName = $intermediateTable ?: $source->getTable(); return $this->tableHelper->generateSQLForDiffViewCreation($diffSourceTableName, $destinationTable, $sourceCodeColumn, $columns); return $this->tableHelper->generateSQLForDiffViewCreationOrUpdate( $diffSourceTableName, $destinationTable, $sourceCodeColumn, $columns, $includeIdColumn); } /** Loading @@ -331,8 +348,19 @@ abstract class CodeGenerator implements CodeGeneratorInterface $sourceCodeColumn = $source->getSourceCodeColumn(); $columns = $source->getColumns(); $where = $destination->getWhere(); $includeIdColumn = $destination->getIdColumnStrategy() === DestinationInterface::ID_STRATEGY_IDENTITY; // les éventuelles colonnes d'historique dans les données sources seront écrasées : $columns = array_diff($columns, [ $c = $this->config->getHistoColumnAliasForCreatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForCreatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedBy(), strtoupper($c), ]); return $this->tableHelper->generateSQLForDiffViewSelect($destinationTable, $sourceCodeColumn, $columns, $where); return $this->tableHelper->generateSQLForDiffViewSelect($destinationTable, $sourceCodeColumn, $columns, $where, $includeIdColumn); } /** Loading @@ -344,13 +372,21 @@ abstract class CodeGenerator implements CodeGeneratorInterface DestinationInterface $destination): string { $destinationTable = $destination->getTable(); $idColumnStrategy = $destination->getIdColumnStrategy(); $idColumnSequence = $destination->getIdColumnSequence(); $where = $destination->getWhere(); $sourceCodeColumn = $source->getSourceCodeColumn(); $columns = $source->getColumns(); // colonne ID écartée $columns = array_diff($columns, ['ID', 'id']); // les éventuelles colonnes d'historique dans les données sources seront écrasées : $columns = array_diff($columns, [ $c = $this->config->getHistoColumnAliasForCreatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForCreatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForUpdatedBy(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedOn(), strtoupper($c), $c = $this->config->getHistoColumnAliasForDeletedBy(), strtoupper($c), ]); switch ($operation) { case Operation::OPERATION_INSERT; Loading @@ -359,6 +395,7 @@ abstract class CodeGenerator implements CodeGeneratorInterface $sourceCodeColumn, $columns, $where, $idColumnStrategy, $idColumnSequence); break; case Operation::OPERATION_UPDATE; Loading
src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php +4 −2 Original line number Diff line number Diff line Loading @@ -86,13 +86,15 @@ interface CodeGeneratorInterface * @param string $tableName * @param array $row * @param string|null $sourceCode * @param string|null|false $idColumnSequence * @param string|null $idColumnStrategy * @param string|null $idColumnSequence * @return string */ public function generateSQLForInsertOneRowIntoTable(string $tableName, array $row, string $sourceCode = null, $idColumnSequence = null): string; ?string $idColumnStrategy = null, ?string $idColumnSequence = null): string; /** * @param string $logTableName Loading
src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php +119 −86 File changed.Preview size limit exceeded, changes collapsed. Show changes