```
✨ feat(revervation): [Ajoute la création de session de réservation et le flow] 🐛 fix(PurgeCommandTest): [Utilise addCommand au lieu de add pour les commandes] 📝 chore(deps): [Mise à jour des dépendances Composer et corrections] 🐛 fix(KeycloakAuthenticator): [Corrige le type nullable de l'exception start] ✨ feat(Customer): [Ajoute les sessions de commandes aux entités Customer] ♻️ refactor(AppLogger): [Refactorise l'AppLogger pour obtenir l'UserAgent] ✨ feat(FlowReserve): [Ajoute une action de validation du panier] ```
This commit is contained in:
86
migrate_data.php
Normal file
86
migrate_data.php
Normal file
@@ -0,0 +1,86 @@
|
||||
<?php
|
||||
|
||||
$host = '127.0.0.1';
|
||||
$db = 'ludikevent';
|
||||
$user = 'ludikevent';
|
||||
$pass = 'ludikevent';
|
||||
$port = "5432";
|
||||
$dsn = "pgsql:host=$host;port=$port;dbname=$db";
|
||||
$options = [
|
||||
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
|
||||
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||
PDO::ATTR_EMULATE_PREPARES => false,
|
||||
];
|
||||
|
||||
try {
|
||||
$pdo = new PDO($dsn, $user, $pass, $options);
|
||||
} catch ( PDOException $e) {
|
||||
die("Connection failed: " . $e->getMessage());
|
||||
}
|
||||
|
||||
echo "Connected to database.\n";
|
||||
|
||||
function migrateTable($pdo, $tableName, $columnName, $idColumn = 'id') {
|
||||
echo "Checking table: $tableName, column: $columnName\n";
|
||||
|
||||
// Check if table exists
|
||||
$stmt = $pdo->prepare("SELECT to_regclass(:tablename)");
|
||||
$stmt->execute(['tablename' => $tableName]);
|
||||
if (!$stmt->fetchColumn()) {
|
||||
echo "Table $tableName does not exist. Skipping.\n";
|
||||
return;
|
||||
}
|
||||
|
||||
// Select only rows that are NOT NULL.
|
||||
// We also want to avoid reprocessing already JSON data if possible, but reliable detection is tricky.
|
||||
// The script below checks if data is serialized first. If not, it checks if it's JSON.
|
||||
$stmt = $pdo->query("SELECT $idColumn, $columnName FROM $tableName WHERE $columnName IS NOT NULL");
|
||||
|
||||
while ($row = $stmt->fetch()) {
|
||||
$id = $row[$idColumn];
|
||||
$rawData = $row[$columnName];
|
||||
|
||||
// Try to unserialize
|
||||
$data = @unserialize($rawData);
|
||||
|
||||
// Check for unserialization success or specific serialized values
|
||||
// unserialize returns false on error AND for serialized boolean false (b:0;)
|
||||
$isSerialized = ($data !== false) || ($rawData === 'b:0;') || ($rawData === 'N;');
|
||||
|
||||
if ($isSerialized) {
|
||||
// It was a valid serialized string
|
||||
if ($rawData === 'N;') {
|
||||
// Serialized null -> SQL NULL
|
||||
$updateStmt = $pdo->prepare("UPDATE $tableName SET $columnName = NULL WHERE $idColumn = :id");
|
||||
$updateStmt->execute(['id' => $id]);
|
||||
echo "Updated ID $id: Serialized NULL -> SQL NULL\n";
|
||||
} else {
|
||||
// Convert to JSON
|
||||
$jsonData = json_encode($data);
|
||||
$updateStmt = $pdo->prepare("UPDATE $tableName SET $columnName = :json WHERE $idColumn = :id");
|
||||
$updateStmt->execute(['json' => $jsonData, 'id' => $id]);
|
||||
echo "Updated ID $id: Serialized -> JSON\n";
|
||||
}
|
||||
} else {
|
||||
// Check if it is already valid JSON
|
||||
json_decode($rawData);
|
||||
if (json_last_error() === JSON_ERROR_NONE) {
|
||||
// It is already JSON, do nothing
|
||||
// echo "ID $id is already JSON. Skipping.\n";
|
||||
} else {
|
||||
// It might be a plain string or corrupted data.
|
||||
// For Types::ARRAY columns, data MUST be serialized.
|
||||
// If we migrated to Types::JSON, data MUST be JSON.
|
||||
// If neither, it's an issue.
|
||||
echo "Warning: ID $id in $tableName is neither valid serialized data nor valid JSON. Raw: " . substr($rawData, 0, 50) . "...\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
migrateTable($pdo, 'contrats_payments', 'card');
|
||||
migrateTable($pdo, 'formules_product_inclus', 'config');
|
||||
migrateTable($pdo, 'formules_restriction', 'restriction_config');
|
||||
|
||||
echo "Migration complete.\n";
|
||||
|
||||
Reference in New Issue
Block a user