Skip to content
Snippets Groups Projects
Commit d7dadcee authored by Laurent Lecluse's avatar Laurent Lecluse
Browse files

Gestion réparée des nouvelles colonnes NOT NULL sans valeurs par défaut sur...

Gestion réparée des nouvelles colonnes NOT NULL sans valeurs par défaut sur des tables existantes avec des données
parent e0ae5b7b
No related merge requests found
Pipeline #26039 passed
......@@ -486,9 +486,18 @@ END;';
private function isEmpty(string $table): bool
{
$r = $this->bdd->select('SELECT * FROM ' . $table, [], ['fetch' => $this->bdd::FETCH_ONE]);
$r = $this->bdd->selectOne('SELECT * FROM ' . $table);
return false === $r;
return null === $r;
}
private function hasEmptyValue(string $table, string $column): bool
{
$r = $this->bdd->selectOne('SELECT '.$column.' FROM ' . $table.' WHERE '.$column.' IS NULL');
return null !== $r;
}
......@@ -503,8 +512,8 @@ END;';
}
if (!$column['nullable'] && !$noNotNull) {
if ($column['default'] === null && $this->isEmpty($table)) {
$this->bdd->logError("La colonne $table." . $column['name'] . " n\'a pas pu être déclarée NOT NULL, car des données sont déjà présentes dans la table et aucune valeur par défaut n'a été configurée");
if ($column['default'] === null && !$this->isEmpty($table)) {
$this->bdd->logMsg("La colonne $table." . $column['name'] . " ne sera pas déclarée NOT NULL, car des données sont déjà présentes dans la table et aucune valeur par défaut n'a été configurée");
} else {
$cp[] = "NOT NULL ENABLE";
}
......@@ -551,10 +560,14 @@ END;';
if ($this->isColDiffNullable($old, $new)) {
if ($this->sendEvent()->getReturn('no-exec')) return;
if ($this->hasEmptyValue($table, $column)){
$this->bdd->logMsg('La colonne '.$table.'.'.$column.' n\'a pas pu être déclarée NOT NULL');
}else{
$sql = "ALTER TABLE \"$table\" MODIFY (\"$column\" " . ($new['nullable'] ? '' : 'NOT ') . "NULL)";
$this->addQuery($sql, 'Changement d\'état de la colonne ' . $column . ' de la table ' . $table);
}
}
}
......
......@@ -601,9 +601,18 @@ class TableManager extends AbstractManager implements TableManagerInterface
private function isEmpty(string $table): bool
{
$r = $this->bdd->select('SELECT * FROM ' . $table, [], ['fetch' => $this->bdd::FETCH_ONE]);
$r = $this->bdd->selectOne('SELECT * FROM ' . $table);
return false === $r;
return null === $r;
}
private function hasEmptyValue(string $table, string $column): bool
{
$r = $this->bdd->selectOne('SELECT '.$column.' FROM ' . $table.' WHERE '.$column.' IS NULL');
return null !== $r;
}
......@@ -618,8 +627,8 @@ class TableManager extends AbstractManager implements TableManagerInterface
}
if (!$column['nullable'] && !$noNotNull) {
if ($column['default'] === null && $this->isEmpty($table)) {
$this->bdd->logError("La colonne $table." . $column['name'] . " n\'a pas pu être déclarée NOT NULL, car des données sont déjà présentes dans la table et aucune valeur par défaut n'a été configurée");
if ($column['default'] === null && !$this->isEmpty($table)) {
$this->bdd->logMsg("La colonne $table." . $column['name'] . " ne sera pas déclarée NOT NULL, car des données sont déjà présentes dans la table et aucune valeur par défaut n'a été configurée");
} else {
$cp[] = "NOT NULL ENABLE";
}
......@@ -666,10 +675,14 @@ class TableManager extends AbstractManager implements TableManagerInterface
if ($this->isColDiffNullable($old, $new)) {
if ($this->sendEvent()->getReturn('no-exec')) return;
if ($this->hasEmptyValue($table, $column)){
$this->bdd->logMsg('La colonne '.$table.'.'.$column.' n\'a pas pu être déclarée NOT NULL');
}else{
$sql = "ALTER TABLE $table ALTER COLUMN $column " . ($new['nullable'] ? 'DROP' : 'SET') . " NOT NULL";
$this->addQuery($sql, 'Changement d\'état de la colonne ' . $column . ' de la table ' . $table);
}
}
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment