1 import * as Sequelize from 'sequelize'
2 import * as Promise from 'bluebird'
5 transaction: Sequelize.Transaction,
6 queryInterface: Sequelize.QueryInterface,
7 sequelize: Sequelize.Sequelize
9 const q = utils.queryInterface
13 defaultValue: Sequelize.UUIDV4,
17 return q.addColumn('Videos', 'uuid', dataUUID)
19 const query = 'UPDATE "Videos" SET "uuid" = "id" WHERE "remoteId" IS NULL'
20 return utils.sequelize.query(query)
23 const query = 'UPDATE "Videos" SET "uuid" = "remoteId" WHERE "remoteId" IS NOT NULL'
24 return utils.sequelize.query(query)
27 dataUUID.defaultValue = null
29 return q.changeColumn('Videos', 'uuid', dataUUID)
32 return removeForeignKey(utils.sequelize, 'RequestVideoQadus')
35 return removeForeignKey(utils.sequelize, 'RequestVideoEvents')
38 return removeForeignKey(utils.sequelize, 'BlacklistedVideos')
41 return removeForeignKey(utils.sequelize, 'UserVideoRates')
44 return removeForeignKey(utils.sequelize, 'VideoAbuses')
47 return removeForeignKey(utils.sequelize, 'VideoTags')
50 const query = 'ALTER TABLE "Videos" DROP CONSTRAINT "Videos_pkey"'
51 return utils.sequelize.query(query)
54 const query = 'ALTER TABLE "Videos" ADD COLUMN "id2" SERIAL PRIMARY KEY'
55 return utils.sequelize.query(query)
58 return q.renameColumn('Videos', 'id', 'oldId')
61 return q.renameColumn('Videos', 'id2', 'id')
64 return changeForeignKey(q, utils.sequelize, 'RequestVideoQadus', false)
67 return changeForeignKey(q, utils.sequelize, 'RequestVideoEvents', false)
70 return changeForeignKey(q, utils.sequelize, 'BlacklistedVideos', false)
73 return changeForeignKey(q, utils.sequelize, 'UserVideoRates', false)
76 return changeForeignKey(q, utils.sequelize, 'VideoAbuses', false)
79 return changeForeignKey(q, utils.sequelize, 'VideoTags', true)
82 return q.removeColumn('Videos', 'oldId')
86 type: Sequelize.BOOLEAN,
90 return q.addColumn('Videos', 'remote', dataRemote)
93 const query = 'UPDATE "Videos" SET "remote" = false WHERE "remoteId" IS NULL'
94 return utils.sequelize.query(query)
97 const query = 'UPDATE "Videos" SET "remote" = true WHERE "remoteId" IS NOT NULL'
98 return utils.sequelize.query(query)
101 return q.removeColumn('Videos', 'remoteId')
105 function down (options) {
106 throw new Error('Not implemented.')
109 function removeForeignKey (sequelize: Sequelize.Sequelize, tableName: string) {
110 const query = 'ALTER TABLE "' + tableName + '" DROP CONSTRAINT "' + tableName + '_videoId_fkey' + '"'
111 return sequelize.query(query)
114 function changeForeignKey (q: Sequelize.QueryInterface, sequelize: Sequelize.Sequelize, tableName: string, allowNull: boolean) {
116 type: Sequelize.INTEGER,
120 return q.addColumn(tableName, 'videoId2', data)
122 const query = 'UPDATE "' + tableName + '" SET "videoId2" = ' +
123 '(SELECT "id" FROM "Videos" WHERE "' + tableName + '"."videoId" = "Videos"."oldId")'
124 return sequelize.query(query)
127 if (allowNull === false) {
128 data.allowNull = false
130 return q.changeColumn(tableName, 'videoId2', data)
133 return Promise.resolve()
136 return q.removeColumn(tableName, 'videoId')
139 return q.renameColumn(tableName, 'videoId2', 'videoId')
142 return q.addIndex(tableName, [ 'videoId' ])
145 const constraintName = tableName + '_videoId_fkey'
146 const query = 'ALTER TABLE "' + tableName + '" ' +
147 ' ADD CONSTRAINT "' + constraintName + '"' +
148 ' FOREIGN KEY ("videoId") REFERENCES "Videos" ON DELETE CASCADE'
150 return sequelize.query(query)