From 3613c73008a3db82e03b530c9ccb93ef4171e295 Mon Sep 17 00:00:00 2001 From: NGPixel Date: Sun, 29 Mar 2020 13:42:55 -0400 Subject: [PATCH] fix: mysql 2.2.50 failed migration --- server/core/db.js | 8 ++++---- server/db/migrations/2.2.17.js | 16 ++++++++++++++-- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/server/core/db.js b/server/core/db.js index bab4ffd4..0e523f61 100644 --- a/server/core/db.js +++ b/server/core/db.js @@ -27,10 +27,10 @@ module.exports = { let dbClient = null let dbConfig = (!_.isEmpty(process.env.DATABASE_URL)) ? process.env.DATABASE_URL : { - host: WIKI.config.db.host, - user: WIKI.config.db.user, - password: WIKI.config.db.pass, - database: WIKI.config.db.db, + host: WIKI.config.db.host.toString(), + user: WIKI.config.db.user.toString(), + password: WIKI.config.db.pass.toString(), + database: WIKI.config.db.db.toString(), port: WIKI.config.db.port } diff --git a/server/db/migrations/2.2.17.js b/server/db/migrations/2.2.17.js index f7461288..45b2ccac 100644 --- a/server/db/migrations/2.2.17.js +++ b/server/db/migrations/2.2.17.js @@ -1,6 +1,8 @@ +const _ = require('lodash') + /* global WIKI */ -exports.up = knex => { +exports.up = async knex => { let sqlVersionDate = '' switch (WIKI.config.db.type) { case 'postgres': @@ -8,11 +10,21 @@ exports.up = knex => { sqlVersionDate = 'UPDATE "pageHistory" h1 SET "versionDate" = COALESCE((SELECT prev."createdAt" FROM "pageHistory" prev WHERE prev."pageId" = h1."pageId" AND prev.id < h1.id ORDER BY prev.id DESC LIMIT 1), h1."createdAt")' break case 'mysql': + // -> Fix for 2.2.50 failed migration + const pageHistoryColumns = await knex.schema.raw('SHOW COLUMNS FROM pageHistory') + if (_.some(pageHistoryColumns[0], ['Field', 'versionDate'])) { + console.info('MySQL 2.2.50 Migration Fix - Dropping failed versionDate column...') + await knex.schema.raw('ALTER TABLE pageHistory DROP COLUMN versionDate') + console.info('versionDate column dropped successfully.') + } + + sqlVersionDate = `UPDATE pageHistory AS h1 INNER JOIN pageHistory AS h2 ON h2.id = (SELECT prev.id FROM (SELECT * FROM pageHistory) AS prev WHERE prev.pageId = h1.pageId AND prev.id < h1.id ORDER BY prev.id DESC LIMIT 1) SET h1.versionDate = h2.createdAt` + break case 'mariadb': sqlVersionDate = `UPDATE pageHistory AS h1 INNER JOIN pageHistory AS h2 ON h2.id = (SELECT prev.id FROM pageHistory AS prev WHERE prev.pageId = h1.pageId AND prev.id < h1.id ORDER BY prev.id DESC LIMIT 1) SET h1.versionDate = h2.createdAt` break } - return knex.schema + await knex.schema .alterTable('pageHistory', table => { table.string('versionDate').notNullable().defaultTo('') })