1 import * as Sequelize from 'sequelize'
2 import * as Promise from 'bluebird'
3 import { Migration } from '../../models/migrations'
6 transaction: Sequelize.Transaction,
7 queryInterface: Sequelize.QueryInterface,
8 sequelize: Sequelize.Sequelize
10 const q = utils.queryInterface
14 defaultValue: Sequelize.UUIDV4,
18 return q.addColumn('Videos', 'uuid', dataUUID)
20 const query = 'UPDATE "Videos" SET "uuid" = "id" WHERE "remoteId" IS NULL'
21 return utils.sequelize.query(query)
24 const query = 'UPDATE "Videos" SET "uuid" = "remoteId" WHERE "remoteId" IS NOT NULL'
25 return utils.sequelize.query(query)
28 dataUUID.defaultValue = null
30 return q.changeColumn('Videos', 'uuid', dataUUID)
33 return removeForeignKey(utils.sequelize, 'RequestVideoQadus')
36 return removeForeignKey(utils.sequelize, 'RequestVideoEvents')
39 return removeForeignKey(utils.sequelize, 'BlacklistedVideos')
42 return removeForeignKey(utils.sequelize, 'UserVideoRates')
45 return removeForeignKey(utils.sequelize, 'VideoAbuses')
48 return removeForeignKey(utils.sequelize, 'VideoTags')
51 const query = 'ALTER TABLE "Videos" DROP CONSTRAINT "Videos_pkey"'
52 return utils.sequelize.query(query)
55 const query = 'ALTER TABLE "Videos" ADD COLUMN "id2" SERIAL PRIMARY KEY'
56 return utils.sequelize.query(query)
59 return q.renameColumn('Videos', 'id', 'oldId')
62 return q.renameColumn('Videos', 'id2', 'id')
65 return changeForeignKey(q, utils.sequelize, 'RequestVideoQadus', false)
68 return changeForeignKey(q, utils.sequelize, 'RequestVideoEvents', false)
71 return changeForeignKey(q, utils.sequelize, 'BlacklistedVideos', false)
74 return changeForeignKey(q, utils.sequelize, 'UserVideoRates', false)
77 return changeForeignKey(q, utils.sequelize, 'VideoAbuses', false)
80 return changeForeignKey(q, utils.sequelize, 'VideoTags', true)
83 return q.removeColumn('Videos', 'oldId')
87 type: Sequelize.BOOLEAN,
91 return q.addColumn('Videos', 'remote', dataRemote)
94 const query = 'UPDATE "Videos" SET "remote" = false WHERE "remoteId" IS NULL'
95 return utils.sequelize.query(query)
98 const query = 'UPDATE "Videos" SET "remote" = true WHERE "remoteId" IS NOT NULL'
99 return utils.sequelize.query(query)
102 return q.removeColumn('Videos', 'remoteId')
106 function down (options) {
107 throw new Error('Not implemented.')
110 function removeForeignKey (sequelize: Sequelize.Sequelize, tableName: string) {
111 const query = 'ALTER TABLE "' + tableName + '" DROP CONSTRAINT "' + tableName + '_videoId_fkey' + '"'
112 return sequelize.query(query)
115 function changeForeignKey (q: Sequelize.QueryInterface, sequelize: Sequelize.Sequelize, tableName: string, allowNull: boolean) {
117 type: Sequelize.INTEGER,
121 return q.addColumn(tableName, 'videoId2', data)
123 const query = 'UPDATE "' + tableName + '" SET "videoId2" = ' +
124 '(SELECT "id" FROM "Videos" WHERE "' + tableName + '"."videoId" = "Videos"."oldId")'
125 return sequelize.query(query)
128 if (allowNull === false) {
129 data.allowNull = false
131 return q.changeColumn(tableName, 'videoId2', data)
134 return Promise.resolve()
137 return q.removeColumn(tableName, 'videoId')
140 return q.renameColumn(tableName, 'videoId2', 'videoId')
143 return q.addIndex(tableName, [ 'videoId' ])
146 const constraintName = tableName + '_videoId_fkey'
147 const query = 'ALTER TABLE "' + tableName + '" ' +
148 ' ADD CONSTRAINT "' + constraintName + '"' +
149 ' FOREIGN KEY ("videoId") REFERENCES "Videos" ON DELETE CASCADE'
151 return sequelize.query(query)