]> BookStack Code Mirror - bookstack/commitdiff
Moved utf8mb4 migration to command instead of migration
authorDan Brown <redacted>
Sat, 22 Jul 2017 14:54:17 +0000 (15:54 +0100)
committerDan Brown <redacted>
Sat, 22 Jul 2017 14:54:17 +0000 (15:54 +0100)
To prevent errors upon migration.
Command generates out the SQL syntax to make the change instead
so the upgrade can be done manually.

In reference to #425

app/Console/Commands/UpgradeDatabaseEncoding.php [new file with mode: 0644]
app/Console/Kernel.php
database/migrations/2017_07_02_152834_update_db_encoding_to_ut8mb4.php

diff --git a/app/Console/Commands/UpgradeDatabaseEncoding.php b/app/Console/Commands/UpgradeDatabaseEncoding.php
new file mode 100644 (file)
index 0000000..dbdf778
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+
+namespace BookStack\Console\Commands;
+
+use Illuminate\Console\Command;
+use Illuminate\Support\Facades\DB;
+
+class UpgradeDatabaseEncoding extends Command
+{
+    /**
+     * The name and signature of the console command.
+     *
+     * @var string
+     */
+    protected $signature = 'bookstack:db-utf8mb4-syntax {--database= : The database connection to use.}';
+
+    /**
+     * The console command description.
+     *
+     * @var string
+     */
+    protected $description = 'Generate SQL commands to upgrade the database to UTF8mb4';
+
+    /**
+     * Create a new command instance.
+     *
+     */
+    public function __construct()
+    {
+        parent::__construct();
+    }
+
+    /**
+     * Execute the console command.
+     *
+     * @return mixed
+     */
+    public function handle()
+    {
+        $connection = DB::getDefaultConnection();
+        if ($this->option('database') !== null) {
+            DB::setDefaultConnection($this->option('database'));
+        }
+
+        $database = DB::getDatabaseName();
+        $tables = DB::select('SHOW TABLES');
+        $this->line('ALTER DATABASE `'.$database.'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
+        $this->line('USE `'.$database.'`;');
+        $key = 'Tables_in_' . $database;
+        foreach ($tables as $table) {
+            $tableName = $table->$key;
+            $this->line('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;');
+        }
+
+        DB::setDefaultConnection($connection);
+    }
+}
index 4fa0b3c80c682544a4a59eac88211d5ec23c40b2..af9f5fd4617e6a765251a066aeb4552721863ed9 100644 (file)
@@ -15,7 +15,8 @@ class Kernel extends ConsoleKernel
         Commands\ClearActivity::class,
         Commands\ClearRevisions::class,
         Commands\RegeneratePermissions::class,
-        Commands\RegenerateSearch::class
+        Commands\RegenerateSearch::class,
+        Commands\UpgradeDatabaseEncoding::class
     ];
 
     /**
index 550c95826c4693c4d9db36631ec971adf9f434ac..259da0720e97e6d0b2c070019282fecb43f80992 100644 (file)
@@ -1,7 +1,5 @@
 <?php
 
-use Illuminate\Support\Facades\Schema;
-use Illuminate\Database\Schema\Blueprint;
 use Illuminate\Database\Migrations\Migration;
 
 class UpdateDbEncodingToUt8mb4 extends Migration
@@ -13,16 +11,9 @@ class UpdateDbEncodingToUt8mb4 extends Migration
      */
     public function up()
     {
-        $database = DB::getDatabaseName();
-        $tables = DB::select('SHOW TABLES');
-        $pdo = DB::getPdo();
-        $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
-        $pdo->exec('ALTER DATABASE `'.$database.'` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
-        $key = 'Tables_in_' . $database;
-        foreach ($tables as $table) {
-            $tableName = $table->$key;
-            $pdo->exec('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci');
-        }
+        // Migration removed due to issues during live migration.
+        // Instead you can run the command `artisan bookstack:db-utf8mb4-syntax`
+        // which will generate out the SQL request to upgrade your DB to utf8mb4.
     }
 
     /**
@@ -32,15 +23,6 @@ class UpdateDbEncodingToUt8mb4 extends Migration
      */
     public function down()
     {
-        $database = DB::getDatabaseName();
-        $tables = DB::select('SHOW TABLES');
-        $pdo = DB::getPdo();
-        $pdo->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false);
-        $pdo->exec('ALTER DATABASE `'.$database.'` CHARACTER SET utf8 COLLATE utf8_unicode_ci');
-        $key = 'Tables_in_' . $database;
-        foreach ($tables as $table) {
-            $tableName = $table->$key;
-            $pdo->exec('ALTER TABLE `'.$tableName.'` CONVERT TO CHARACTER SET utf8 COLLATE utf8_unicode_ci');
-        }
+        //
     }
 }