From 62d491bc9cf13be02cf6a331015427d4ceb3e3c2 Mon Sep 17 00:00:00 2001
From: David Beniamine <david.beniamine@tetras-libre.fr>
Date: Fri, 28 Jan 2022 16:29:47 +0100
Subject: [PATCH] Migration script from symfony 3 to 5

---
 .../migrations/migrate_from_symfony_3_to_5.sh | 36 ++++++++++++-------
 1 file changed, 23 insertions(+), 13 deletions(-)

diff --git a/tools/migrations/migrate_from_symfony_3_to_5.sh b/tools/migrations/migrate_from_symfony_3_to_5.sh
index ab803da..1374904 100755
--- a/tools/migrations/migrate_from_symfony_3_to_5.sh
+++ b/tools/migrations/migrate_from_symfony_3_to_5.sh
@@ -33,26 +33,36 @@ fi
 docker-compose exec memorekall-member composer reload-db
 
 #
-# Step 3 remove artifact data and copy data from backup table
+# Step 3 empty the newly generated database and recopy data from the backup
 #
 
-echo "Droping fixture capsule"
-$mysql_cmd $MYSQL_DATABASE -e "delete from capsule"
-echo "Done"
-echo "Droping fixture users"
-$mysql_cmd $MYSQL_DATABASE -e "delete from user"
-echo "Done"
+# Columns renaming in the form pattern/replacement/sedopts
+declare -A COLUMNS_REPLACEMENTS
+COLUMNS_REPLACEMENTS[user]='credential_expired/credentials_expired as credential_expired/'
+# Old capsule table does not have a password field
+COLUMNS_REPLACEMENTS[capsule]='password/NULL as password/'
 
-TABLES="user reset_password_request capsule capsuleGroup capsules_groups doctrine_migration_versions editeur_capsule invitation_editeur_capsule"
+TABLES="user reset_password_request capsule doctrine_migration_versions editeur_capsule"
+echo "SET foreign_key_checks = 0;" > $$.sql
 for table in $TABLES; do
-    echo "Reloading table $table"
     COLUMNS=$($mysql_cmd --batch --disable-column-names \
         -e "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '$table' AND TABLE_SCHEMA='$MYSQL_DATABASE'" |\
         grep -v "Warning" | tr '\r\n' ', ' | sed 's/, $//'
     )
-    #echo $COLUMNS
-    # TODO : what should we do about columns with name mismatch ex user.credential_expired ?
-    $mysql_cmd -e "INSERT INTO $MYSQL_DATABASE.$table SELECT $COLUMNS FROM $BACKUP_DB.$table;"
-    echo "done"
+    if [ ! -z "${COLUMNS_REPLACEMENTS[$table]}" ]; then
+        COLUMNS_OLD=$(echo $COLUMNS | sed "s/${COLUMNS_REPLACEMENTS[$table]}")
+    else
+        COLUMNS_OLD=$COLUMNS
+    fi
+    echo "DELETE FROM $MYSQL_DATABASE.$table;" >> $$.sql
+    echo "INSERT INTO $MYSQL_DATABASE.$table ($COLUMNS) SELECT $COLUMNS_OLD FROM $BACKUP_DB.$table;" >> $$.sql
 done
+echo "SET foreign_key_checks = 1;" >> $$.sql
+cat $$.sql | docker exec -i $(docker-compose ps -q mysql) mysql -u root -p$MYSQL_ROOT_PASSWORD
 echo "All done"
+rm $$.sql
+
+#
+# Step 4 Ensure entity are stored in JSON format and not array
+#
+
-- 
GitLab