Browse Source

fix: MSSQL migration 2.5.1

NGPixel 4 years ago
parent
commit
b2f292cc39
4 changed files with 23 additions and 4 deletions
  1. 0 1
      .eslintrc.yml
  2. 1 1
      client/components/history.vue
  3. 1 2
      dev/cypress/ci-setup.sh
  4. 21 0
      server/db/migrations/2.5.1.js

+ 0 - 1
.eslintrc.yml

@@ -13,4 +13,3 @@ globals:
   document: false
   navigator: false
   window: false
-  FuseBox: false

+ 1 - 1
client/components/history.vue

@@ -322,7 +322,7 @@ export default {
     this.target = this.cache[0]
 
     if (this.effectivePermissions) {
-      this.$store.set('page/effectivePermissions',JSON.parse(Buffer.from(this.effectivePermissions, 'base64').toString()))
+      this.$store.set('page/effectivePermissions', JSON.parse(Buffer.from(this.effectivePermissions, 'base64').toString()))
     }
   },
   methods: {

+ 1 - 2
dev/cypress/ci-setup.sh

@@ -20,8 +20,7 @@ mssql)
   sleep 30
   docker exec db /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "Password123!" -Q 'CREATE DATABASE wiki'
   docker run -d -p 3000:3000 --name wiki --network="host" -e "DB_TYPE=mssql" -e "DB_HOST=localhost" -e "DB_PORT=1433" -e "DB_NAME=wiki" -e "DB_USER=SA" -e "DB_PASS=Password123!" requarks/wiki:canary-$BUILD_BUILDNUMBER
-  docker logs wiki
-  sleep 15
+  sleep 5
   docker logs wiki
   ;;
 sqlite)

+ 21 - 0
server/db/migrations/2.5.1.js

@@ -1,6 +1,27 @@
+/* global WIKI */
+
 exports.up = async knex => {
   await knex('authentication').where('isEnabled', false).del()
 
+  // -> Knex bug #3855 workaround
+  // -> https://github.com/knex/knex/pull/3855
+  if (WIKI.config.db.type === 'mssql') {
+    await knex.schema.raw(`
+      DECLARE @constraint varchar(100) = (SELECT default_constraints.name
+                                          FROM sys.all_columns
+                                          INNER JOIN sys.tables
+                                            ON all_columns.object_id = tables.object_id
+                                          INNER JOIN sys.schemas
+                                            ON tables.schema_id = schemas.schema_id
+                                          INNER JOIN sys.default_constraints
+                                            ON all_columns.default_object_id = default_constraints.object_id
+                                          WHERE schemas.name = 'dbo'
+                                          AND tables.name = 'authentication'
+                                          AND all_columns.name = 'isEnabled')
+
+      IF @constraint IS NOT NULL EXEC('ALTER TABLE authentication DROP CONSTRAINT ' + @constraint)`)
+  }
+
   await knex.schema
     .alterTable('authentication', table => {
       table.dropColumn('isEnabled')