-
Notifications
You must be signed in to change notification settings - Fork 1
/
migration-utils.ts
74 lines (70 loc) · 1.85 KB
/
migration-utils.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import { QueryRunner } from "typeorm";
export async function migratePaymentMethods(queryRunner: QueryRunner) {
const paymentMethods = await q(
queryRunner,
{
mysql: "SELECT `id`, `code`, `configArgs` from `payment_method`",
postgres: 'SELECT "id", "code", "configArgs" from "payment_method"',
},
[]
);
for (const method of paymentMethods) {
const handler = JSON.stringify({
code: method.code,
args: JSON.parse(method.configArgs),
});
await q(
queryRunner,
{
mysql:
"UPDATE `payment_method` SET `handler` = ?, `name` = ? WHERE `id` = ?",
postgres:
'UPDATE "payment_method" SET "handler" = $1, "name" = $2 WHERE "id" = $3',
},
[handler, method.code, method.id]
);
}
}
export async function addToDefaultChannel(
queryRunner: QueryRunner,
tableName: string,
idName: string
) {
const channelTableName = `${tableName}_channels_channel`;
await q(
queryRunner,
{
mysql:
"INSERT INTO `" +
channelTableName +
"` (" +
idName +
", channelId) SELECT id, (SELECT id from `channel` WHERE `code` = '__default_channel__') FROM `" +
tableName +
"`",
postgres:
'INSERT INTO "' +
channelTableName +
'" ("' +
idName +
'", "channelId") SELECT "id", (SELECT "id" from "channel" WHERE "code" = \'__default_channel__\') FROM "' +
tableName +
'"',
},
[]
);
}
function q(
queryRunner: QueryRunner,
query: { mysql: string; postgres: string },
params: any[] = []
) {
return queryRunner.query(
isPostgres(queryRunner) ? query.postgres : query.mysql,
params
);
}
function isPostgres(queryRunner: QueryRunner): boolean {
const { type } = queryRunner.connection.options;
return type === "postgres" || type === "cockroachdb";
}