drizzle-kit 0.9.1 → 0.9.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/drizzle.js +4 -0
- package/drizzle.js.map +1 -0
- package/package.json +5 -2
- package/.eslintrc +0 -21
- package/config.yml +0 -4
- package/data/_prev/multi.ts +0 -43
- package/data/_prev/tables/authOtpTable.ts +0 -22
- package/data/_prev/tables/cityTable.ts +0 -17
- package/data/_prev/tables/usersTable.ts +0 -18
- package/data/_prev/types/types.ts +0 -11
- package/data/v1/tables/authOtpTable.ts +0 -18
- package/data/v1/tables/deletedTable.ts +0 -9
- package/data/v1/tables/usersTable.ts +0 -15
- package/data/v1/types/types.ts +0 -6
- package/data/v2/tables/authOtpTable.ts +0 -22
- package/data/v2/tables/cityTable.ts +0 -10
- package/data/v2/tables/usersTable.ts +0 -19
- package/data/v2/types/types.ts +0 -11
- package/data/v3/tables/authOtpTable.ts +0 -21
- package/data/v3/tables/cityTable.ts +0 -17
- package/data/v3/tables/usersTable.ts +0 -18
- package/data/v3/types/types.ts +0 -11
- package/factory.ts +0 -224
- package/fstest.ts +0 -50
- package/index.ts +0 -16
- package/readme.md +0 -9
- package/serializer.ts +0 -139
- package/src/cli/commands/migration/index.tsx +0 -10
- package/src/cli/commands/migration/migrate/index.tsx +0 -164
- package/src/cli/components-api/ComponentsList.tsx +0 -20
- package/src/cli/components-api/CreateApp.tsx +0 -19
- package/src/cli/components-api/components/PromptColumnsConflicts.tsx +0 -171
- package/src/cli/components-api/components/PromptTablesConflicts.tsx +0 -180
- package/src/cli/components-api/components/Task.tsx +0 -85
- package/src/cli/components-api/index.tsx +0 -76
- package/src/cli/enq.ts +0 -41
- package/src/cli/index.tsx +0 -8
- package/src/cli/machines/resolveColumnsMachine.ts +0 -179
- package/src/cli/machines/resolveTablesMachine.ts +0 -169
- package/src/cli/utils/formatDataForTable.ts +0 -36
- package/src/cli/utils/valuesForPrompts.ts +0 -35
- package/src/diff.ts +0 -272
- package/src/differ.js +0 -135
- package/src/jsonStatements.js +0 -176
- package/src/migrationPreparator.ts +0 -47
- package/src/serilizer/factory.ts +0 -340
- package/src/serilizer/index.ts +0 -25
- package/src/simulator.ts +0 -85
- package/src/sqlgenerator.js +0 -373
- package/test-build.js +0 -26
- package/test.ts +0 -57
- package/testFactory.js +0 -3
- package/testFactory.ts +0 -26
- package/tsconfig.json +0 -28
- package/webpack.config.js +0 -53
package/src/diff.ts
DELETED
|
@@ -1,272 +0,0 @@
|
|
|
1
|
-
import { fromJson } from "./sqlgenerator";
|
|
2
|
-
import resolveTables from "./simulator";
|
|
3
|
-
import { differ, diffForRenamed } from "./differ";
|
|
4
|
-
import fs from 'fs'
|
|
5
|
-
import { prepareAddValuesToEnumJson, prepareAlterTableColumnsJson, prepareCreateEnumJson, prepareCreateIndexesJson, prepareCreateTableJson, prepareDropIndexesJson, prepareDropTableJson, prepareRenameTableJson } from "./jsonStatements";
|
|
6
|
-
|
|
7
|
-
const json1 = {
|
|
8
|
-
tables: {
|
|
9
|
-
items: {
|
|
10
|
-
name: "items",
|
|
11
|
-
columns: {
|
|
12
|
-
id: {
|
|
13
|
-
name: "id",
|
|
14
|
-
type: "int",
|
|
15
|
-
primaryKey: true,
|
|
16
|
-
autoincrement: true,
|
|
17
|
-
},
|
|
18
|
-
name: {
|
|
19
|
-
name: "name",
|
|
20
|
-
type: "character varying(256)",
|
|
21
|
-
defaultValue: "Vetal",
|
|
22
|
-
notNull: true,
|
|
23
|
-
},
|
|
24
|
-
unused: {
|
|
25
|
-
name: "unused",
|
|
26
|
-
type: "character varying(256)",
|
|
27
|
-
},
|
|
28
|
-
unused2: {
|
|
29
|
-
name: "unused2",
|
|
30
|
-
type: "character varying(256)",
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
indexes: {
|
|
34
|
-
index_to_be_deleted: {
|
|
35
|
-
name: "index_to_be_deleted",
|
|
36
|
-
columns: {
|
|
37
|
-
phone: {
|
|
38
|
-
name: "phone",
|
|
39
|
-
},
|
|
40
|
-
},
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
},
|
|
44
|
-
oldItems: {
|
|
45
|
-
name: "old_items",
|
|
46
|
-
columns: {},
|
|
47
|
-
},
|
|
48
|
-
items2: {
|
|
49
|
-
name: "items2",
|
|
50
|
-
columns: {},
|
|
51
|
-
},
|
|
52
|
-
},
|
|
53
|
-
enums: {
|
|
54
|
-
enum0: {
|
|
55
|
-
name: "enum0",
|
|
56
|
-
values: {
|
|
57
|
-
value0: "value0",
|
|
58
|
-
value1: "value1",
|
|
59
|
-
value2: "value2",
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
enum2: {
|
|
63
|
-
name: "enum2",
|
|
64
|
-
values: {
|
|
65
|
-
value1: "value1",
|
|
66
|
-
value2: "value2",
|
|
67
|
-
},
|
|
68
|
-
},
|
|
69
|
-
},
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
const json2 = {
|
|
73
|
-
tables: {
|
|
74
|
-
items: {
|
|
75
|
-
name: "items",
|
|
76
|
-
columns: {
|
|
77
|
-
id: {
|
|
78
|
-
name: "id",
|
|
79
|
-
type: "int",
|
|
80
|
-
primaryKey: true,
|
|
81
|
-
autoincrement: true,
|
|
82
|
-
},
|
|
83
|
-
name: {
|
|
84
|
-
name: "name",
|
|
85
|
-
type: "character varying(512)",
|
|
86
|
-
},
|
|
87
|
-
secondName: {
|
|
88
|
-
name: "secondName",
|
|
89
|
-
type: "character varying(512)",
|
|
90
|
-
defaultValue: "Vitalik",
|
|
91
|
-
},
|
|
92
|
-
ownerId: {
|
|
93
|
-
name: "owner_id",
|
|
94
|
-
type: "int",
|
|
95
|
-
notNull: true,
|
|
96
|
-
defaultValue: 10,
|
|
97
|
-
},
|
|
98
|
-
},
|
|
99
|
-
indexes: {
|
|
100
|
-
users_phone_full_name_index: {
|
|
101
|
-
name: "users_phone_full_name_index",
|
|
102
|
-
columns: {
|
|
103
|
-
phone: {
|
|
104
|
-
name: "phone",
|
|
105
|
-
},
|
|
106
|
-
full_name: {
|
|
107
|
-
name: "full_name",
|
|
108
|
-
},
|
|
109
|
-
},
|
|
110
|
-
},
|
|
111
|
-
users_phone_index: {
|
|
112
|
-
name: "users_phone_index",
|
|
113
|
-
columns: {
|
|
114
|
-
phone: {
|
|
115
|
-
name: "phone",
|
|
116
|
-
},
|
|
117
|
-
},
|
|
118
|
-
},
|
|
119
|
-
},
|
|
120
|
-
},
|
|
121
|
-
items3: {
|
|
122
|
-
name: "items3",
|
|
123
|
-
columns: {
|
|
124
|
-
id: {
|
|
125
|
-
name: "id",
|
|
126
|
-
type: "int",
|
|
127
|
-
primaryKey: true,
|
|
128
|
-
autoincrement: true,
|
|
129
|
-
},
|
|
130
|
-
name: {
|
|
131
|
-
name: "name",
|
|
132
|
-
type: "character varying(512)",
|
|
133
|
-
notNull: true,
|
|
134
|
-
defaultValue: "defaultValue",
|
|
135
|
-
},
|
|
136
|
-
ownerId: {
|
|
137
|
-
name: "owner_id",
|
|
138
|
-
type: "int",
|
|
139
|
-
},
|
|
140
|
-
},
|
|
141
|
-
},
|
|
142
|
-
items22: {
|
|
143
|
-
name: "items22",
|
|
144
|
-
columns: {},
|
|
145
|
-
},
|
|
146
|
-
},
|
|
147
|
-
enums: {
|
|
148
|
-
enum0: {
|
|
149
|
-
name: "enum0",
|
|
150
|
-
values: {
|
|
151
|
-
value1: "value1",
|
|
152
|
-
value2: "value2",
|
|
153
|
-
value3: "value3",
|
|
154
|
-
},
|
|
155
|
-
},
|
|
156
|
-
enum1: {
|
|
157
|
-
name: "enum1",
|
|
158
|
-
values: {
|
|
159
|
-
value1: "value1",
|
|
160
|
-
value2: "value2",
|
|
161
|
-
},
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
};
|
|
165
|
-
|
|
166
|
-
const dry = {
|
|
167
|
-
version: "1",
|
|
168
|
-
tables: {},
|
|
169
|
-
enums: {}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// TODO: read snapshots from folder
|
|
173
|
-
|
|
174
|
-
// const j1 = JSON.parse(fs.readFileSync('./out/v1_1634546745488.json', 'utf8'))
|
|
175
|
-
const j1 = dry
|
|
176
|
-
const j2 = JSON.parse(fs.readFileSync('./out/v2_1634549601361.json', 'utf8'))
|
|
177
|
-
// const j3 = JSON.parse(fs.readFileSync('./out/1634215063491.json', 'utf8'))
|
|
178
|
-
const result = differ(j1, j2)
|
|
179
|
-
|
|
180
|
-
const { created, deleted, renamed } = resolveTables(result.addedTables, result.deletedTables)
|
|
181
|
-
|
|
182
|
-
const jsonStatements: any[] = []
|
|
183
|
-
|
|
184
|
-
const jsonCreateTables = created.map(it => {
|
|
185
|
-
return prepareCreateTableJson(it)
|
|
186
|
-
})
|
|
187
|
-
|
|
188
|
-
const jsonCreateIndexesForCreatedTables = created.map(it => {
|
|
189
|
-
return prepareCreateIndexesJson(it.name, it.indexes)
|
|
190
|
-
}).flat()
|
|
191
|
-
|
|
192
|
-
const jsonDropTables = deleted.map(it => {
|
|
193
|
-
return prepareDropTableJson(it)
|
|
194
|
-
})
|
|
195
|
-
|
|
196
|
-
const jsonRenameTables = renamed.map(it => {
|
|
197
|
-
return prepareRenameTableJson(it.from, it.to)
|
|
198
|
-
})
|
|
199
|
-
|
|
200
|
-
// const createNewTables = created.map(it => {
|
|
201
|
-
// return prepareCreateTable(it)
|
|
202
|
-
// })
|
|
203
|
-
// console.log(createNewTables.join('\n').trim())
|
|
204
|
-
|
|
205
|
-
// const deleteTables = deleted.map(it => {
|
|
206
|
-
// return prepareDropTable(it)
|
|
207
|
-
// })
|
|
208
|
-
// console.log(deleteTables.join('\n').trim())
|
|
209
|
-
|
|
210
|
-
const renamedWithAlternations = diffForRenamed(renamed)
|
|
211
|
-
const allAltered = result.alteredTablesWithColumns.concat(renamedWithAlternations)
|
|
212
|
-
|
|
213
|
-
// const renameTables = renamed.map(it => {
|
|
214
|
-
// return prepareRenameTable(it.from, it.to)
|
|
215
|
-
// })
|
|
216
|
-
// console.log(renameTables.join('\n').trim())
|
|
217
|
-
|
|
218
|
-
const jsonAlterTables = allAltered.map(it => {
|
|
219
|
-
return prepareAlterTableColumnsJson(it)
|
|
220
|
-
}).flat()
|
|
221
|
-
|
|
222
|
-
const jsonCreateIndexesForAllAlteredTables = allAltered.map(it => {
|
|
223
|
-
return prepareCreateIndexesJson(it.name, it.addedIndexes || {})
|
|
224
|
-
}).flat()
|
|
225
|
-
|
|
226
|
-
const jsonDropIndexesForAllAlteredTables = allAltered.map(it => {
|
|
227
|
-
return prepareDropIndexesJson(it.name, it.deletedIndexes || {})
|
|
228
|
-
}).flat()
|
|
229
|
-
|
|
230
|
-
// // Enums:
|
|
231
|
-
// // - создание енама ✅
|
|
232
|
-
// // - переименование енама (пока не делаю)⏳
|
|
233
|
-
// // - добавление вэлью к енаму ✅
|
|
234
|
-
// // - ренейм вейлью у енама (пока не делаю, это надо запрашивать опять же через слай)⏳
|
|
235
|
-
// // - удаление енама -> чекать не используется ли где-то енам и сначала ранить миграции и в самом конце удаление енама⏳
|
|
236
|
-
// // - удаление вэлью из енама -> блок ❌
|
|
237
|
-
// const enums = result.addedEnums.map(it => {
|
|
238
|
-
// return prepareCreateEnum(it.name, it.values)
|
|
239
|
-
// })
|
|
240
|
-
|
|
241
|
-
const createEnums = result.addedEnums.map(it => {
|
|
242
|
-
return prepareCreateEnumJson(it.name, it.values)
|
|
243
|
-
})
|
|
244
|
-
|
|
245
|
-
//todo: block enum rename, enum value rename and enun deletion for now
|
|
246
|
-
const jsonAlterEnumsWithAddedValues = result.alteredEnums.map(it => {
|
|
247
|
-
return prepareAddValuesToEnumJson(it.name, it.addedValues)
|
|
248
|
-
}).flat()
|
|
249
|
-
|
|
250
|
-
jsonStatements.push(...createEnums)
|
|
251
|
-
jsonStatements.push(...jsonAlterEnumsWithAddedValues)
|
|
252
|
-
jsonStatements.push(...jsonCreateTables)
|
|
253
|
-
jsonStatements.push(...jsonCreateIndexesForCreatedTables)
|
|
254
|
-
jsonStatements.push(...jsonDropTables)
|
|
255
|
-
jsonStatements.push(...jsonRenameTables)
|
|
256
|
-
jsonStatements.push(...jsonAlterTables)
|
|
257
|
-
jsonStatements.push(...jsonCreateIndexesForAllAlteredTables)
|
|
258
|
-
jsonStatements.push(...jsonDropIndexesForAllAlteredTables)
|
|
259
|
-
|
|
260
|
-
// console.log(JSON.stringify(jsonStatements, null, 2))
|
|
261
|
-
console.log(jsonStatements)
|
|
262
|
-
|
|
263
|
-
const sqlStatements = fromJson(jsonStatements)
|
|
264
|
-
console.log(sqlStatements.join('\n'))
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
// console.log(enums.join('\n').trim())
|
|
268
|
-
// console.log(alteredEnums.join('\n').trim())
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
// explicitely ask if tables were renamed, if yes - add those to altered tables, otherwise - deleted
|
|
272
|
-
// double check if user wants to delete particular table and warn him on data loss
|
package/src/differ.js
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
'use-strict';
|
|
2
|
-
|
|
3
|
-
import { diff } from 'json-diff'
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export function diffForRenamed(pairs) {
|
|
7
|
-
// raname table1 to name of table2, so we can apply diffs
|
|
8
|
-
const renamed = pairs.map(it => {
|
|
9
|
-
const from = it.from || it.old
|
|
10
|
-
const to = it.to || it.new
|
|
11
|
-
const newFrom = { ...from, name: to.name }
|
|
12
|
-
return [newFrom, to]
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
// find any alternations made to a renamed table
|
|
16
|
-
const altered = renamed.map(pair => {
|
|
17
|
-
const diffed = diff(pair[0], pair[1]);
|
|
18
|
-
diffed.name = pair[0].name
|
|
19
|
-
|
|
20
|
-
return findAlternationsInTable(diffed)
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
return altered
|
|
24
|
-
}
|
|
25
|
-
export function differ(json1, json2) {
|
|
26
|
-
const difference = diff(json1, json2);
|
|
27
|
-
|
|
28
|
-
difference.tables = difference.tables ? difference.tables : {}
|
|
29
|
-
difference.enums = difference.enums ? difference.enums : {}
|
|
30
|
-
|
|
31
|
-
const tableEntries = Object.entries(difference.tables)
|
|
32
|
-
const addedTables = tableEntries.filter(it => it[0].includes('__added'))
|
|
33
|
-
.map(it => it[1])
|
|
34
|
-
.map(it => {
|
|
35
|
-
// console.log(it)
|
|
36
|
-
return {
|
|
37
|
-
...it, indexes: Object.entries(it.indexes).map(indexEntry => {
|
|
38
|
-
const idx = indexEntry[1]
|
|
39
|
-
const name = idx['name']
|
|
40
|
-
const columns = Object.values(idx['columns']).map(it => it['name'])
|
|
41
|
-
return { name, columns }
|
|
42
|
-
})
|
|
43
|
-
}
|
|
44
|
-
})
|
|
45
|
-
const deletedTables = tableEntries.filter(it => it[0].includes('__deleted')).map(it => it[1])
|
|
46
|
-
|
|
47
|
-
const enumsEntries = Object.entries(difference.enums)
|
|
48
|
-
|
|
49
|
-
const addedEnums = enumsEntries.filter(it => it[0].includes('__added'))
|
|
50
|
-
.map(it => it[1])
|
|
51
|
-
.map(it => {
|
|
52
|
-
// values: { val1: 'val1', val2: 'val2' } => values: ['val1', 'val2']
|
|
53
|
-
const values = Object.entries(it.values).map(ve => ve[1])
|
|
54
|
-
return { name: it.name, values: values }
|
|
55
|
-
})
|
|
56
|
-
const deletedEnums = enumsEntries.filter(it => it[0].includes('__deleted'))
|
|
57
|
-
.map(it => it[1])
|
|
58
|
-
.map(it => {
|
|
59
|
-
|
|
60
|
-
// values: { val1: 'val1', val2: 'val2' } => values: ['val1', 'val2']
|
|
61
|
-
const values = Object.entries(it.values).map(ve => ve[1])
|
|
62
|
-
return { name: it.name, values: values }
|
|
63
|
-
})
|
|
64
|
-
const alteredEnums = enumsEntries.filter(it => !(it[0].includes('__added') || it[0].includes('__deleted')))
|
|
65
|
-
.map(it => {
|
|
66
|
-
const vals = it[1].values
|
|
67
|
-
const addedValues = Object.entries(vals).filter(val => val[0].includes('__added')).map(val => val[1])
|
|
68
|
-
const deletedValues = Object.entries(vals).filter(val => val[0].includes('__deleted')).map(val => val[1])
|
|
69
|
-
// console.log('values: ', it[1].values)
|
|
70
|
-
return { name: it[0], addedValues, deletedValues, }
|
|
71
|
-
})
|
|
72
|
-
|
|
73
|
-
const alteredTables = Object.keys(difference.tables)
|
|
74
|
-
.filter(it => !(it.includes('__added') || it.includes('__deleted')))
|
|
75
|
-
.map(it => {
|
|
76
|
-
return { name: it, ...difference.tables[it] }
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
const alteredTablesWithColumns = alteredTables.map(table => findAlternationsInTable(table))
|
|
80
|
-
|
|
81
|
-
return {
|
|
82
|
-
addedTables,
|
|
83
|
-
deletedTables,
|
|
84
|
-
alteredTablesWithColumns,
|
|
85
|
-
addedEnums,
|
|
86
|
-
deletedEnums,
|
|
87
|
-
alteredEnums,
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
const findAlternationsInTable = (table) => {
|
|
92
|
-
// map each table to have altered, deleted or renamed columns
|
|
93
|
-
const columns = table.columns; //in case no columns were altered, but indexes were
|
|
94
|
-
|
|
95
|
-
const added = Object.keys(columns).filter(it => it.includes('__added')).map(it => {
|
|
96
|
-
return { ...columns[it] }
|
|
97
|
-
})
|
|
98
|
-
const deleted = Object.keys(columns).filter(it => it.includes('__deleted')).map(it => {
|
|
99
|
-
return { ...columns[it] }
|
|
100
|
-
})
|
|
101
|
-
const altered = Object.keys(columns)
|
|
102
|
-
.filter(it => !(it.includes('__deleted') || it.includes('__added')))
|
|
103
|
-
.map(it => {
|
|
104
|
-
return { name: it, ...columns[it] }
|
|
105
|
-
})
|
|
106
|
-
|
|
107
|
-
const deletedIndexes = Object.values(table.indexes__deleted || {}).map(it => {
|
|
108
|
-
const name = it['name']
|
|
109
|
-
const columns = Object.values(it['columns']).map(it => it['name'])
|
|
110
|
-
return { name, columns }
|
|
111
|
-
}).concat(
|
|
112
|
-
Object.keys(table.indexes || {}).filter(it => it.includes('__deleted'))
|
|
113
|
-
.map(it => {
|
|
114
|
-
const idx = table.indexes[it]
|
|
115
|
-
const name = idx['name']
|
|
116
|
-
const columns = Object.values(idx['columns']).map(it => it['name'])
|
|
117
|
-
return { name, columns }
|
|
118
|
-
})
|
|
119
|
-
);
|
|
120
|
-
|
|
121
|
-
const addedIndexes = Object.values(table.indexes__added || {}).map(it => {
|
|
122
|
-
const name = it['name']
|
|
123
|
-
const columns = Object.values(it['columns']).map(it => it['name'])
|
|
124
|
-
return { name, columns }
|
|
125
|
-
}).concat(
|
|
126
|
-
Object.keys(table.indexes || {}).filter(it => it.includes('__added'))
|
|
127
|
-
.map(it => {
|
|
128
|
-
const idx = table.indexes[it]
|
|
129
|
-
const name = idx['name']
|
|
130
|
-
const columns = Object.values(idx['columns']).map(it => it['name'])
|
|
131
|
-
return { name, columns }
|
|
132
|
-
})
|
|
133
|
-
);
|
|
134
|
-
return { name: table.name, deleted, added, altered, addedIndexes, deletedIndexes }
|
|
135
|
-
}
|
package/src/jsonStatements.js
DELETED
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
export class Types {
|
|
2
|
-
static createTable = 'create_table'
|
|
3
|
-
static dropTable = 'drop_table'
|
|
4
|
-
static renameTable = 'rename_table'
|
|
5
|
-
static alterTableDropColumn = 'alter_table_drop_column'
|
|
6
|
-
static alterTableAddColumn = 'alter_table_add_column'
|
|
7
|
-
static alterTableAlterColumnSetType = 'alter_table_alter_column_set_type'
|
|
8
|
-
static alterTableAlterColumnSetDefault = 'alter_table_alter_column_set_default'
|
|
9
|
-
static alterTableAlterColumnDropDefault = 'alter_table_alter_column_drop_default'
|
|
10
|
-
static alterTableAlterColumnSetNotNull = 'alter_table_alter_column_set_notnull'
|
|
11
|
-
static alterTableAlterColumnDropNotNull = 'alter_table_alter_column_drop_notnull'
|
|
12
|
-
static createIndex = 'create_index'
|
|
13
|
-
static dropIndex = 'drop_index'
|
|
14
|
-
static createTypeEnum = 'create_type_enum'
|
|
15
|
-
static alterTypeAddValue = 'alter_type_add_value'
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
export const prepareCreateTableJson = (table) => {
|
|
19
|
-
const { name, columns } = table
|
|
20
|
-
const mappedColumns = Object.keys(columns)
|
|
21
|
-
.map(it => {
|
|
22
|
-
return { ...columns[it] }
|
|
23
|
-
})
|
|
24
|
-
|
|
25
|
-
return {
|
|
26
|
-
type: Types.createTable,
|
|
27
|
-
tableName: name,
|
|
28
|
-
columns: mappedColumns
|
|
29
|
-
};
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
export const prepareDropTableJson = (table) => {
|
|
33
|
-
return {
|
|
34
|
-
type: Types.dropTable,
|
|
35
|
-
tableName: table.name
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export const prepareRenameTableJson = (tableFrom, tableTo) => {
|
|
40
|
-
return {
|
|
41
|
-
type: Types.renameTable,
|
|
42
|
-
from: tableFrom.name,
|
|
43
|
-
to: tableTo.name
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export const prepareCreateEnumJson = (name, values) => {
|
|
48
|
-
return {
|
|
49
|
-
type: Types.createTypeEnum,
|
|
50
|
-
enumName: name,
|
|
51
|
-
values
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
// https://blog.yo1.dog/updating-enum-values-in-postgresql-the-safe-and-easy-way/
|
|
56
|
-
export const prepareAddValuesToEnumJson = (name, values) => {
|
|
57
|
-
return values.map(it => {
|
|
58
|
-
return {
|
|
59
|
-
type: Types.alterTypeAddValue,
|
|
60
|
-
enumName: name,
|
|
61
|
-
enumValue: it
|
|
62
|
-
}
|
|
63
|
-
})
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
export const prepareAlterTableColumnsJson = (table) => {
|
|
67
|
-
const tableName = table['name'];
|
|
68
|
-
const statements = []
|
|
69
|
-
|
|
70
|
-
const dropColumns = _prepareDropColumns(tableName, table.deleted)
|
|
71
|
-
const addColumns = _prepareAddColumns(tableName, table.added)
|
|
72
|
-
const alterColumns = _prepareAlterColumns(tableName, table.altered)
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
statements.push(...dropColumns)
|
|
76
|
-
statements.push(...addColumns)
|
|
77
|
-
statements.push(...alterColumns)
|
|
78
|
-
|
|
79
|
-
return statements;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
const _prepareDropColumns = (taleName, columns) => {
|
|
83
|
-
return columns.map(it => {
|
|
84
|
-
return {
|
|
85
|
-
type: Types.alterTableDropColumn,
|
|
86
|
-
tableName: taleName,
|
|
87
|
-
columnName: it.name
|
|
88
|
-
}
|
|
89
|
-
})
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
const _prepareAddColumns = (tableName, columns) => {
|
|
93
|
-
|
|
94
|
-
return columns.map(it => {
|
|
95
|
-
return {
|
|
96
|
-
type: Types.alterTableAddColumn,
|
|
97
|
-
tableName,
|
|
98
|
-
column: it
|
|
99
|
-
}
|
|
100
|
-
})
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
const _prepareAlterColumns = (tableName, columns) => {
|
|
104
|
-
let statements = []
|
|
105
|
-
|
|
106
|
-
for (const column of columns) {
|
|
107
|
-
const columnName = column.name;
|
|
108
|
-
|
|
109
|
-
if (column['type']) {
|
|
110
|
-
const { __new } = column.type
|
|
111
|
-
|
|
112
|
-
statements.push({
|
|
113
|
-
type: Types.alterTableAlterColumnSetType,
|
|
114
|
-
tableName,
|
|
115
|
-
columnName,
|
|
116
|
-
newDataType: __new
|
|
117
|
-
})
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
if (column['defaultValue'] || column['defaultValue__added']) {
|
|
121
|
-
const newDefaultValue = column.defaultValue.__new | column.defaultValue__added
|
|
122
|
-
statements.push({
|
|
123
|
-
type: Types.alterTableAlterColumnSetDefault,
|
|
124
|
-
tableName,
|
|
125
|
-
columnName,
|
|
126
|
-
newDefault: newDefaultValue
|
|
127
|
-
})
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (column['defaultValue__deleted']) {
|
|
131
|
-
statements.push({
|
|
132
|
-
type: Types.alterTableAlterColumnDropDefault,
|
|
133
|
-
tableName,
|
|
134
|
-
columnName,
|
|
135
|
-
})
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
if (column['notNull__added'] || (column['notNull'] && column['notNull']['__new'])) {
|
|
139
|
-
statements.push({
|
|
140
|
-
type: Types.alterTableAlterColumnSetNotNull,
|
|
141
|
-
tableName,
|
|
142
|
-
columnName
|
|
143
|
-
})
|
|
144
|
-
}
|
|
145
|
-
|
|
146
|
-
if (column['notNull__deleted'] || (column['notNull'] && !column['notNull']['__new'])) {
|
|
147
|
-
statements.push({
|
|
148
|
-
type: Types.alterTableAlterColumnDropNotNull,
|
|
149
|
-
tableName,
|
|
150
|
-
columnName
|
|
151
|
-
})
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
return statements
|
|
156
|
-
}
|
|
157
|
-
|
|
158
|
-
export const prepareCreateIndexesJson = (tableName, indexes) => {
|
|
159
|
-
return indexes.map(index => {
|
|
160
|
-
return {
|
|
161
|
-
type: Types.createIndex,
|
|
162
|
-
tableName,
|
|
163
|
-
indexName: index.name,
|
|
164
|
-
indexValue: index.columns.join(', ')
|
|
165
|
-
}
|
|
166
|
-
})
|
|
167
|
-
}
|
|
168
|
-
export const prepareDropIndexesJson = (tableName, indexes) => {
|
|
169
|
-
return indexes.map(index => {
|
|
170
|
-
return {
|
|
171
|
-
type: Types.dropIndex,
|
|
172
|
-
tableName,
|
|
173
|
-
indexName: index.name,
|
|
174
|
-
}
|
|
175
|
-
})
|
|
176
|
-
}
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import serialize from 'serilizer'
|
|
3
|
-
|
|
4
|
-
// TODO: export as a function w
|
|
5
|
-
|
|
6
|
-
const dry = {
|
|
7
|
-
version: "1",
|
|
8
|
-
tables: {},
|
|
9
|
-
enums: {}
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
const prepareMigration = (
|
|
13
|
-
migrationRootFolderName: string = 'drizzle',
|
|
14
|
-
dataFolderPath: string
|
|
15
|
-
): { prev: any, cur: any } => {
|
|
16
|
-
const root = migrationRootFolderName
|
|
17
|
-
const files = fs.readdirSync('./')
|
|
18
|
-
const drizzleFolder = files.find((it) => {
|
|
19
|
-
return it === root
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
if (!drizzleFolder) {
|
|
23
|
-
fs.mkdirSync(root)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
const migrationFolders = fs.readdirSync(`./${root}`)
|
|
27
|
-
|
|
28
|
-
let prevSnapshot;
|
|
29
|
-
|
|
30
|
-
if (migrationFolders.length === 0) {
|
|
31
|
-
prevSnapshot = dry
|
|
32
|
-
} else {
|
|
33
|
-
migrationFolders.sort()
|
|
34
|
-
const lastSnapshotFolder = migrationFolders[migrationFolders.length - 1]
|
|
35
|
-
console.log(lastSnapshotFolder)
|
|
36
|
-
prevSnapshot = JSON.parse(fs.readFileSync(`./${root}/${lastSnapshotFolder}/snapshot.json`).toString())
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
const tbls = `${dataFolderPath}/tables/`
|
|
40
|
-
const tps = `${dataFolderPath}/types/`
|
|
41
|
-
|
|
42
|
-
const result = serialize(tbls, tps)
|
|
43
|
-
|
|
44
|
-
return { prev: prevSnapshot, cur: result }
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
export default prepareMigration;
|