diff --git a/src/UnicaenDbImport/CodeGenerator/CodeGenerator.php b/src/UnicaenDbImport/CodeGenerator/CodeGenerator.php
index c4d2d78ebcb5d8e7f214d17865d3647496c94036..fb7d0d2b69df5eb985f0b9b2cc7bed3addf099b7 100644
--- a/src/UnicaenDbImport/CodeGenerator/CodeGenerator.php
+++ b/src/UnicaenDbImport/CodeGenerator/CodeGenerator.php
@@ -304,13 +304,22 @@ abstract class CodeGenerator implements CodeGeneratorInterface
throw CodeGeneratorException::methodToImplement(__METHOD__, get_called_class(), $this->platform);
}
+ public function generateDiffViewName(string $destinationTable): string
+ {
+ return $this->tableHelper->generateDiffViewName($destinationTable);
+ }
+
/**
* @param SourceInterface $source
* @param DestinationInterface $destination
+ * @param string $diffViewName
* @param string|null $intermediateTable
* @return string
*/
- public function generateSQLForDiffViewCreation(SourceInterface $source, DestinationInterface $destination, string $intermediateTable = null): string
+ public function generateSQLForDiffViewCreation(SourceInterface $source,
+ DestinationInterface $destination,
+ string $diffViewName,
+ string $intermediateTable = null): string
{
$destinationTable = $destination->getTable();
$sourceCodeColumn = $source->getSourceCodeColumn();
@@ -330,6 +339,7 @@ abstract class CodeGenerator implements CodeGeneratorInterface
$diffSourceTableName = $intermediateTable ?: $source->getTable();
return $this->tableHelper->generateSQLForDiffViewCreationOrUpdate(
+ $diffViewName,
$diffSourceTableName,
$destinationTable,
$sourceCodeColumn,
diff --git a/src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php b/src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php
index a8472060da91b4ba2d693c7de6654c811949bd2f..8d19804c39df2e0308b9c3a21c857a418019c935 100644
--- a/src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php
+++ b/src/UnicaenDbImport/CodeGenerator/CodeGeneratorInterface.php
@@ -117,11 +117,15 @@ interface CodeGeneratorInterface
/**
* @param SourceInterface $source
* @param DestinationInterface $destination
- * @param string $intermediateTable
+ * @param string $diffViewName
+ * @param string|null $intermediateTable
* @return string
* @throws \Doctrine\DBAL\Exception
*/
- public function generateSQLForDiffViewCreation(SourceInterface $source, DestinationInterface $destination, string $intermediateTable): string;
+ public function generateSQLForDiffViewCreation(SourceInterface $source,
+ DestinationInterface $destination,
+ string $diffViewName,
+ string $intermediateTable = null): string;
/**
* @param SourceInterface $source
diff --git a/src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php b/src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php
index 0d1257983188ee5a4cfcd1dd4f9593200be3b76b..c17e34da4ed7761f5dd431fa674cd0433536116c 100644
--- a/src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php
+++ b/src/UnicaenDbImport/CodeGenerator/Helper/TableHelper.php
@@ -63,6 +63,7 @@ EOT;
}
/**
+ * @param string $diffViewName
* @param string $diffSourceTableName
* @param string $destinationTable
* @param string $sourceCodeColumn
@@ -70,20 +71,19 @@ EOT;
* @param bool $includeIdColumn
* @return string
*/
- public function generateSQLForDiffViewCreationOrUpdate(string $diffSourceTableName,
+ public function generateSQLForDiffViewCreationOrUpdate(string $diffViewName,
+ string $diffSourceTableName,
string $destinationTable,
string $sourceCodeColumn,
array $columns,
bool $includeIdColumn): string
{
- $name = $this->generateDiffViewName($destinationTable);
-
$res = '';
- if ($sql = $this->generateSQLForViewDropBeforeUpdate($name)) {
+ if ($sql = $this->generateSQLForViewDropBeforeUpdate($diffViewName)) {
$res = $sql . ';' . PHP_EOL . PHP_EOL;
}
- $res .= "CREATE OR REPLACE VIEW $name AS " . PHP_EOL;
+ $res .= "CREATE OR REPLACE VIEW $diffViewName AS " . PHP_EOL;
$res .= $this->indent(4, $this->generateDiffViewBodySelectSQLSnippet(
$diffSourceTableName,
$destinationTable,
@@ -161,7 +161,7 @@ EOT;
* @param string $destinationTable
* @return string
*/
- protected function generateDiffViewName(string $destinationTable): string
+ public function generateDiffViewName(string $destinationTable): string
{
return 'V_DIFF_' . $destinationTable;
}
diff --git a/src/UnicaenDbImport/Service/Database/DatabaseService.php b/src/UnicaenDbImport/Service/Database/DatabaseService.php
index fa17f32f77c1513e5f1fedf27cce999a78939c5e..f9a998fd05876ed52b1e65e826d4a6971af791f0 100644
--- a/src/UnicaenDbImport/Service/Database/DatabaseService.php
+++ b/src/UnicaenDbImport/Service/Database/DatabaseService.php
@@ -3,7 +3,7 @@
namespace UnicaenDbImport\Service\Database;
use Doctrine\DBAL\Exception;
-use UnicaenDbImport\Domain\Destination;
+use Throwable;
use UnicaenDbImport\Domain\DestinationInterface;
use UnicaenDbImport\Domain\Operation;
use UnicaenDbImport\Entity\Db\Service\ImportObserv\ImportObservServiceAwareTrait;
@@ -337,20 +337,22 @@ class DatabaseService extends AbstractDatabaseService
}
/**
- * @param string|null $intermediateTable
* @throws \UnicaenDbImport\Service\Exception\DatabaseServiceException
*/
- public function recreateDiffView(?string $intermediateTable = null)
+ public function recreateDiffView(?string $intermediateTable = null): void
{
+ $destinationTable = $this->destination->getTable();
+ $diffViewName = $this->codeGenerator->generateDiffViewName($destinationTable);
+
try {
- $sql = $this->codeGenerator->generateSQLForDiffViewCreation($this->source, $this->destination, $intermediateTable);
- } catch (Exception $e) {
- throw DatabaseServiceException::error("Erreur lors de la génération du SQL de création de la vue différentielle", $e);
+ $sql = $this->codeGenerator->generateSQLForDiffViewCreation($this->source, $this->destination, $diffViewName, $intermediateTable);
+ } catch (Throwable $e) {
+ throw DatabaseServiceException::error("Erreur lors de la génération du SQL de création de la vue différentielle '$diffViewName'", $e);
}
try {
$this->queryExecutor->exec($sql, $this->destination->getConnection());
} catch (Exception $e) {
- throw DatabaseServiceException::error("Erreur lors de la création de la vue différentielle", $e);
+ throw DatabaseServiceException::error("Erreur lors de la création de la vue différentielle '$diffViewName'", $e);
}
}