@zmdb/mysql 1.0.0-beta.1
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/LICENSE +6 -0
- package/README.md +111 -0
- package/dist/dialect.d.ts +2 -0
- package/dist/dialect.d.ts.map +1 -0
- package/dist/dialect.js +91 -0
- package/dist/dialect.js.map +1 -0
- package/dist/driver.d.ts +48 -0
- package/dist/driver.d.ts.map +1 -0
- package/dist/driver.js +125 -0
- package/dist/driver.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/introspect.d.ts +11 -0
- package/dist/introspect.d.ts.map +1 -0
- package/dist/introspect.js +306 -0
- package/dist/introspect.js.map +1 -0
- package/dist/migrations.d.ts +25 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +471 -0
- package/dist/migrations.js.map +1 -0
- package/package.json +59 -0
- package/src/__fixtures__/mysql-8.4.11.json +261 -0
- package/src/dialect.ts +99 -0
- package/src/driver.ts +219 -0
- package/src/index.ts +35 -0
- package/src/introspect.ts +430 -0
- package/src/migrations.ts +637 -0
|
@@ -0,0 +1,471 @@
|
|
|
1
|
+
import { UnsupportedFeatureError, } from '@zmdb/sql';
|
|
2
|
+
import {} from '@zmdb/sql/schema-objects';
|
|
3
|
+
const TYPES = Object.freeze({
|
|
4
|
+
serial: 'INT AUTO_INCREMENT',
|
|
5
|
+
integer: 'INT',
|
|
6
|
+
bigint: 'BIGINT',
|
|
7
|
+
numeric: 'DECIMAL',
|
|
8
|
+
text: 'TEXT',
|
|
9
|
+
varchar: 'VARCHAR',
|
|
10
|
+
boolean: 'TINYINT(1)',
|
|
11
|
+
timestamp: 'DATETIME(3)',
|
|
12
|
+
json: 'JSON',
|
|
13
|
+
jsonEnum: 'TEXT',
|
|
14
|
+
});
|
|
15
|
+
const EXTENSION_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
16
|
+
function quote(identifier) {
|
|
17
|
+
return `\`${identifier.replaceAll('`', '``')}\``;
|
|
18
|
+
}
|
|
19
|
+
function extensionType(type) {
|
|
20
|
+
if (!EXTENSION_IDENTIFIER.test(type.name)) {
|
|
21
|
+
throw new TypeError(`extension type name ${JSON.stringify(type.name)} is not a SQL identifier`);
|
|
22
|
+
}
|
|
23
|
+
const argumentsSql = (type.args ?? []).map(argument => {
|
|
24
|
+
if (typeof argument === 'number' && Number.isFinite(argument))
|
|
25
|
+
return String(argument);
|
|
26
|
+
if (typeof argument === 'string' && EXTENSION_IDENTIFIER.test(argument))
|
|
27
|
+
return argument;
|
|
28
|
+
throw new TypeError(`extension type ${type.name} argument ${JSON.stringify(argument)} must be a finite number or SQL identifier`);
|
|
29
|
+
});
|
|
30
|
+
return `${type.name}${argumentsSql.length === 0 ? '' : `(${argumentsSql.join(',')})`}`;
|
|
31
|
+
}
|
|
32
|
+
function unsupported(name, feature, message) {
|
|
33
|
+
return new UnsupportedFeatureError(feature, name, message);
|
|
34
|
+
}
|
|
35
|
+
function ddlType(name, types, column) {
|
|
36
|
+
if (typeof column.type !== 'string') {
|
|
37
|
+
const rendered = extensionType(column.type);
|
|
38
|
+
throw unsupported(name, `extension type ${rendered}`, `${name} does not support extension type ${rendered} on column "${column.name}"`);
|
|
39
|
+
}
|
|
40
|
+
const mapped = Reflect.get(types, column.type);
|
|
41
|
+
const scalar = typeof mapped === 'string' ? mapped : column.type;
|
|
42
|
+
if (column.type === 'varchar') {
|
|
43
|
+
if (column.length === undefined)
|
|
44
|
+
return 'TEXT';
|
|
45
|
+
if (!Number.isSafeInteger(column.length) || column.length <= 0) {
|
|
46
|
+
throw new TypeError(`varchar column "${column.name}" length must be a positive safe integer`);
|
|
47
|
+
}
|
|
48
|
+
return `VARCHAR(${String(column.length)})`;
|
|
49
|
+
}
|
|
50
|
+
if (column.type === 'serial' && !column.primaryKey)
|
|
51
|
+
return `${scalar} UNIQUE`;
|
|
52
|
+
return scalar;
|
|
53
|
+
}
|
|
54
|
+
function columnDdl(name, types, table, column, key) {
|
|
55
|
+
const primary = key.inline ? ' PRIMARY KEY' : '';
|
|
56
|
+
const notNull = !key.inline && (!column.nullable || key.tableLevel) ? ' NOT NULL' : '';
|
|
57
|
+
const unique = column.unique === true && column.type !== 'serial' && !key.inline ? ' UNIQUE' : '';
|
|
58
|
+
return `${quote(column.name)} ${ddlType(name, types, column)}${primary}${notNull}${unique}`;
|
|
59
|
+
}
|
|
60
|
+
function keyColumns(columns) {
|
|
61
|
+
return columns.map(quote).join(', ');
|
|
62
|
+
}
|
|
63
|
+
function actionSql(name, constraint, action) {
|
|
64
|
+
if (action === 'set default') {
|
|
65
|
+
throw unsupported(name, `SET DEFAULT on foreign key "${constraint}"`, `SET DEFAULT on foreign key "${constraint}" is not supported by MySQL; InnoDB accepts the syntax but refuses the constraint`);
|
|
66
|
+
}
|
|
67
|
+
return action.toUpperCase();
|
|
68
|
+
}
|
|
69
|
+
function supportIndexName(name, foreignKey) {
|
|
70
|
+
const index = `${foreignKey.name}_idx`;
|
|
71
|
+
if (index.length > 64) {
|
|
72
|
+
throw unsupported(name, `supporting index "${index}"`, `the MySQL supporting index "${index}" is ${String(index.length)} characters long; MySQL's limit is 64`);
|
|
73
|
+
}
|
|
74
|
+
return index;
|
|
75
|
+
}
|
|
76
|
+
function foreignKeyConstraint(name, foreignKey) {
|
|
77
|
+
if (foreignKey.columns.length === 0 || foreignKey.columns.length !== foreignKey.targetColumns.length) {
|
|
78
|
+
throw new TypeError(`foreign key "${foreignKey.name}" must map one or more equally sized column lists`);
|
|
79
|
+
}
|
|
80
|
+
return (`CONSTRAINT ${quote(foreignKey.name)} FOREIGN KEY (${keyColumns(foreignKey.columns)}) ` +
|
|
81
|
+
`REFERENCES ${quote(foreignKey.targetTable)} (${keyColumns(foreignKey.targetColumns)}) ` +
|
|
82
|
+
`ON DELETE ${actionSql(name, foreignKey.name, foreignKey.onDelete)} ` +
|
|
83
|
+
`ON UPDATE ${actionSql(name, foreignKey.name, foreignKey.onUpdate)}`);
|
|
84
|
+
}
|
|
85
|
+
function createTable(name, types, tableExtension, operation) {
|
|
86
|
+
if (operation.tableOptions !== undefined && tableExtension === undefined) {
|
|
87
|
+
throw unsupported(name, `table options on "${operation.table}"`, `${name} does not model SingleStore shard keys, sort keys, or rowstore options`);
|
|
88
|
+
}
|
|
89
|
+
const available = new Set(operation.columns.map(column => column.name));
|
|
90
|
+
for (const primary of operation.primaryKey) {
|
|
91
|
+
if (!available.has(primary))
|
|
92
|
+
throw new TypeError(`primary key on "${operation.table}" names "${primary}"`);
|
|
93
|
+
}
|
|
94
|
+
const inline = operation.primaryKey.length === 1 ? operation.primaryKey[0] : undefined;
|
|
95
|
+
const tableLevel = operation.primaryKey.length > 1 ? new Set(operation.primaryKey) : undefined;
|
|
96
|
+
const definitions = operation.columns.map(column => columnDdl(name, types, operation.table, column, {
|
|
97
|
+
inline: column.name === inline,
|
|
98
|
+
tableLevel: tableLevel?.has(column.name) === true,
|
|
99
|
+
}));
|
|
100
|
+
if (operation.primaryKey.length > 1) {
|
|
101
|
+
definitions.push(`PRIMARY KEY (${keyColumns(operation.primaryKey)})`);
|
|
102
|
+
}
|
|
103
|
+
for (const foreignKey of operation.foreignKeys) {
|
|
104
|
+
for (const column of foreignKey.columns) {
|
|
105
|
+
if (!available.has(column)) {
|
|
106
|
+
throw new TypeError(`foreign key "${foreignKey.name}" on "${operation.table}" names unknown column "${column}"`);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
definitions.push(`INDEX ${quote(supportIndexName(name, foreignKey))} (${keyColumns(foreignKey.columns)})`);
|
|
110
|
+
definitions.push(foreignKeyConstraint(name, foreignKey));
|
|
111
|
+
}
|
|
112
|
+
if (tableExtension !== undefined) {
|
|
113
|
+
definitions.push(...tableExtension.definitions(operation, Object.freeze({
|
|
114
|
+
quote,
|
|
115
|
+
keyColumns,
|
|
116
|
+
})));
|
|
117
|
+
}
|
|
118
|
+
const prefix = tableExtension?.createPrefix(operation) ?? 'CREATE TABLE';
|
|
119
|
+
return `${prefix} ${quote(operation.table)} (${definitions.join(', ')})`;
|
|
120
|
+
}
|
|
121
|
+
function addForeignKey(name, table, foreignKey) {
|
|
122
|
+
const index = `CREATE INDEX ${quote(supportIndexName(name, foreignKey))} ON ${quote(table)} ` +
|
|
123
|
+
`(${keyColumns(foreignKey.columns)})`;
|
|
124
|
+
const constraint = `ALTER TABLE ${quote(table)} ADD ${foreignKeyConstraint(name, foreignKey)}`;
|
|
125
|
+
return `${index}; ${constraint}`;
|
|
126
|
+
}
|
|
127
|
+
function dropForeignKey(table, constraint, supportIndex) {
|
|
128
|
+
const drop = `ALTER TABLE ${quote(table)} DROP FOREIGN KEY ${quote(constraint)}`;
|
|
129
|
+
return supportIndex ? `${drop}; DROP INDEX ${quote(`${constraint}_idx`)} ON ${quote(table)}` : drop;
|
|
130
|
+
}
|
|
131
|
+
function alteredType(name, types, operation, direction) {
|
|
132
|
+
const nullable = direction === 'up' ? operation.toNullable : operation.fromNullable;
|
|
133
|
+
if (nullable === undefined) {
|
|
134
|
+
throw unsupported(name, `altering "${operation.table}"."${operation.column}" without nullability metadata`, 'MySQL MODIFY COLUMN must restate NULL or NOT NULL; generate the operation from snapshots or provide nullability explicitly');
|
|
135
|
+
}
|
|
136
|
+
const type = direction === 'up' ? operation.to : operation.from;
|
|
137
|
+
return `${ddlType(name, types, {
|
|
138
|
+
name: operation.column,
|
|
139
|
+
type,
|
|
140
|
+
nullable,
|
|
141
|
+
primaryKey: false,
|
|
142
|
+
})}${nullable ? ' NULL' : ' NOT NULL'}`;
|
|
143
|
+
}
|
|
144
|
+
function alterPrimaryKey(table, from, to) {
|
|
145
|
+
const clauses = [];
|
|
146
|
+
if (from.length > 0)
|
|
147
|
+
clauses.push('DROP PRIMARY KEY');
|
|
148
|
+
if (to.length > 0)
|
|
149
|
+
clauses.push(`ADD PRIMARY KEY (${keyColumns(to)})`);
|
|
150
|
+
if (clauses.length === 0)
|
|
151
|
+
throw new TypeError(`primary key change for "${table}" has no columns`);
|
|
152
|
+
return `ALTER TABLE ${quote(table)} ${clauses.join(', ')}`;
|
|
153
|
+
}
|
|
154
|
+
function emitUp(name, types, tableExtension, operation) {
|
|
155
|
+
switch (operation.kind) {
|
|
156
|
+
case 'create_extension':
|
|
157
|
+
throw unsupported(name, `extension "${operation.name}"`);
|
|
158
|
+
case 'create_table':
|
|
159
|
+
return createTable(name, types, tableExtension, operation);
|
|
160
|
+
case 'drop_table':
|
|
161
|
+
return `DROP TABLE ${quote(operation.table)}`;
|
|
162
|
+
case 'add_column':
|
|
163
|
+
return (`ALTER TABLE ${quote(operation.table)} ADD COLUMN ` +
|
|
164
|
+
columnDdl(name, types, operation.table, operation.column, {
|
|
165
|
+
inline: operation.column.primaryKey,
|
|
166
|
+
tableLevel: false,
|
|
167
|
+
}));
|
|
168
|
+
case 'drop_column':
|
|
169
|
+
return `ALTER TABLE ${quote(operation.table)} DROP COLUMN ${quote(operation.column)}`;
|
|
170
|
+
case 'alter_column_type':
|
|
171
|
+
return (`ALTER TABLE ${quote(operation.table)} MODIFY COLUMN ${quote(operation.column)} ` +
|
|
172
|
+
alteredType(name, types, operation, 'up'));
|
|
173
|
+
case 'alter_primary_key':
|
|
174
|
+
return alterPrimaryKey(operation.table, operation.from, operation.to);
|
|
175
|
+
case 'add_foreign_key':
|
|
176
|
+
return addForeignKey(name, operation.table, operation.fk);
|
|
177
|
+
case 'drop_foreign_key':
|
|
178
|
+
return dropForeignKey(operation.table, operation.name, false);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function emitDown(name, types, operation) {
|
|
182
|
+
switch (operation.kind) {
|
|
183
|
+
case 'create_extension':
|
|
184
|
+
throw unsupported(name, `extension "${operation.name}"`);
|
|
185
|
+
case 'create_table':
|
|
186
|
+
return `DROP TABLE ${quote(operation.table)}`;
|
|
187
|
+
case 'drop_table':
|
|
188
|
+
throw unsupported(name, `recreating dropped table "${operation.table}"`, `the drop operation for "${operation.table}" carries no columns; write the down migration explicitly`);
|
|
189
|
+
case 'add_column':
|
|
190
|
+
return `ALTER TABLE ${quote(operation.table)} DROP COLUMN ${quote(operation.column.name)}`;
|
|
191
|
+
case 'drop_column':
|
|
192
|
+
throw unsupported(name, `recreating dropped column "${operation.table}"."${operation.column}"`, 'the drop operation carries no type or nullability; write the down migration explicitly');
|
|
193
|
+
case 'alter_column_type':
|
|
194
|
+
return (`ALTER TABLE ${quote(operation.table)} MODIFY COLUMN ${quote(operation.column)} ` +
|
|
195
|
+
alteredType(name, types, operation, 'down'));
|
|
196
|
+
case 'alter_primary_key':
|
|
197
|
+
return alterPrimaryKey(operation.table, operation.to, operation.from);
|
|
198
|
+
case 'add_foreign_key':
|
|
199
|
+
return dropForeignKey(operation.table, operation.fk.name, true);
|
|
200
|
+
case 'drop_foreign_key':
|
|
201
|
+
throw unsupported(name, `recreating foreign key "${operation.name}"`, 'the drop operation carries no columns or referential actions; write the down migration explicitly');
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
function indexColumn(name, definition, column) {
|
|
205
|
+
if (typeof column === 'string')
|
|
206
|
+
return quote(column);
|
|
207
|
+
if ('expr' in column) {
|
|
208
|
+
throw unsupported(name, `expression index "${definition.name}"`, `${name} does not support an expression index ("${definition.name}" on "${definition.table}" uses ${column.expr}); add a generated column and index that instead`);
|
|
209
|
+
}
|
|
210
|
+
if (column.opclass !== undefined) {
|
|
211
|
+
throw unsupported(name, `index operator class ${column.opclass}`);
|
|
212
|
+
}
|
|
213
|
+
return quote(column.column);
|
|
214
|
+
}
|
|
215
|
+
function createIndex(name, definition) {
|
|
216
|
+
if (definition.where !== undefined) {
|
|
217
|
+
throw unsupported(name, `partial index "${definition.name}"`, `${name} does not support the partial index "${definition.name}" because MySQL has no predicate-index syntax`);
|
|
218
|
+
}
|
|
219
|
+
if (definition.with !== undefined && Object.keys(definition.with).length > 0) {
|
|
220
|
+
throw unsupported(name, `index options on "${definition.name}"`);
|
|
221
|
+
}
|
|
222
|
+
const method = definition.method;
|
|
223
|
+
if (method !== undefined && method !== 'btree' && method !== 'hash') {
|
|
224
|
+
throw unsupported(name, `index method ${method}`);
|
|
225
|
+
}
|
|
226
|
+
if (definition.columns.length === 0)
|
|
227
|
+
throw new TypeError(`index "${definition.name}" must name a column`);
|
|
228
|
+
const unique = definition.unique === true ? 'UNIQUE ' : '';
|
|
229
|
+
const using = method === undefined ? '' : ` USING ${method.toUpperCase()}`;
|
|
230
|
+
return (`CREATE ${unique}INDEX ${quote(definition.name)}${using} ON ${quote(definition.table)} ` +
|
|
231
|
+
`(${definition.columns.map(column => indexColumn(name, definition, column)).join(', ')})`);
|
|
232
|
+
}
|
|
233
|
+
function routineType(types, type) {
|
|
234
|
+
const mapped = Reflect.get(types, type);
|
|
235
|
+
return typeof mapped === 'string' ? (type === 'serial' ? 'INT' : mapped) : type;
|
|
236
|
+
}
|
|
237
|
+
function routineLabel(definition) {
|
|
238
|
+
return `${definition.kind} ${quote(definition.name)}`;
|
|
239
|
+
}
|
|
240
|
+
function assertRoutine(name, definition) {
|
|
241
|
+
for (const parameter of definition.params) {
|
|
242
|
+
if (parameter.mode === 'out' || parameter.mode === 'inout') {
|
|
243
|
+
throw unsupported(name, `${routineLabel(definition)} has unsupported ${parameter.mode} parameter`);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (definition.language !== undefined) {
|
|
247
|
+
throw unsupported(name, `${routineLabel(definition)} cannot declare language ${JSON.stringify(definition.language)}`);
|
|
248
|
+
}
|
|
249
|
+
if (definition.kind === 'procedure' && definition.returns !== undefined) {
|
|
250
|
+
throw new TypeError(`${routineLabel(definition)} cannot declare a return type`);
|
|
251
|
+
}
|
|
252
|
+
if (definition.kind === 'function') {
|
|
253
|
+
if (definition.returns === undefined)
|
|
254
|
+
throw new TypeError(`${routineLabel(definition)} must declare a return type`);
|
|
255
|
+
if (definition.returns.setof === true || definition.returns.type === 'void') {
|
|
256
|
+
throw unsupported(name, `${routineLabel(definition)} cannot return a set or void`);
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
function createRoutine(name, types, definition) {
|
|
261
|
+
assertRoutine(name, definition);
|
|
262
|
+
const parameters = definition.params
|
|
263
|
+
.map(parameter => `${quote(parameter.name)} ${routineType(types, parameter.type)}`)
|
|
264
|
+
.join(', ');
|
|
265
|
+
const returnType = definition.kind === 'function' ? definition.returns?.type : undefined;
|
|
266
|
+
if (returnType === 'void')
|
|
267
|
+
throw unsupported(name, `${routineLabel(definition)} cannot return void`);
|
|
268
|
+
const returns = returnType === undefined ? '' : ` RETURNS ${routineType(types, returnType)}`;
|
|
269
|
+
const deterministic = definition.kind === 'function'
|
|
270
|
+
? ` ${definition.deterministic === true ? 'DETERMINISTIC' : 'NOT DETERMINISTIC'}`
|
|
271
|
+
: '';
|
|
272
|
+
return (`CREATE ${definition.kind.toUpperCase()} ${quote(definition.name)}(${parameters})${returns}${deterministic} ` +
|
|
273
|
+
`MODIFIES SQL DATA SQL SECURITY INVOKER\n${definition.body}`);
|
|
274
|
+
}
|
|
275
|
+
function dropRoutine(name, definition) {
|
|
276
|
+
assertRoutine(name, definition);
|
|
277
|
+
return `DROP ${definition.kind.toUpperCase()} IF EXISTS ${quote(definition.name)}`;
|
|
278
|
+
}
|
|
279
|
+
function emitSchemaObject(name, types, operation) {
|
|
280
|
+
switch (operation.kind) {
|
|
281
|
+
case 'create_index':
|
|
282
|
+
return [createIndex(name, operation.definition)];
|
|
283
|
+
case 'check_constraint':
|
|
284
|
+
return [
|
|
285
|
+
`ALTER TABLE ${quote(operation.table)} ADD CONSTRAINT ${quote(operation.name)} CHECK (${operation.expression})`,
|
|
286
|
+
];
|
|
287
|
+
case 'create_view':
|
|
288
|
+
if (operation.definition.materialized === true)
|
|
289
|
+
throw unsupported(name, 'materialized views');
|
|
290
|
+
return [`CREATE VIEW ${quote(operation.definition.name)} AS ${operation.definition.select}`];
|
|
291
|
+
case 'drop_view':
|
|
292
|
+
if (operation.materialized === true)
|
|
293
|
+
throw unsupported(name, 'materialized views');
|
|
294
|
+
return [`DROP VIEW IF EXISTS ${quote(operation.name)}`];
|
|
295
|
+
case 'create_sequence':
|
|
296
|
+
throw unsupported(name, `sequence "${operation.definition.name}"`);
|
|
297
|
+
case 'generated_column':
|
|
298
|
+
return [
|
|
299
|
+
`${quote(operation.definition.name)} ${operation.definition.type} GENERATED ALWAYS AS ` +
|
|
300
|
+
`(${operation.definition.expression})${operation.definition.stored === true ? ' STORED' : ''}`,
|
|
301
|
+
];
|
|
302
|
+
case 'create_schema':
|
|
303
|
+
return [`CREATE SCHEMA ${quote(operation.name)}`];
|
|
304
|
+
case 'enable_rls':
|
|
305
|
+
case 'create_policy':
|
|
306
|
+
throw unsupported(name, 'row-level security');
|
|
307
|
+
case 'create_extension':
|
|
308
|
+
throw unsupported(name, `extension "${operation.definition.name}"`);
|
|
309
|
+
case 'create_routine':
|
|
310
|
+
return [createRoutine(name, types, operation.definition)];
|
|
311
|
+
case 'drop_routine':
|
|
312
|
+
return [dropRoutine(name, operation.definition)];
|
|
313
|
+
case 'replace_routine':
|
|
314
|
+
return [dropRoutine(name, operation.previous ?? operation.next), createRoutine(name, types, operation.next)];
|
|
315
|
+
}
|
|
316
|
+
}
|
|
317
|
+
function validateSnapshot(name, types, tableExtension, snapshot) {
|
|
318
|
+
if (snapshot.extensions.length > 0) {
|
|
319
|
+
throw unsupported(name, `extension "${snapshot.extensions[0]?.name ?? 'unknown'}"`);
|
|
320
|
+
}
|
|
321
|
+
for (const table of snapshot.tables) {
|
|
322
|
+
if (table.tableOptions !== undefined && tableExtension === undefined) {
|
|
323
|
+
throw unsupported(name, `table options on "${table.name}"`);
|
|
324
|
+
}
|
|
325
|
+
for (const column of table.columns)
|
|
326
|
+
ddlType(name, types, column);
|
|
327
|
+
for (const foreignKey of table.foreignKeys)
|
|
328
|
+
foreignKeyConstraint(name, foreignKey);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
function splitGeneratedStatements(sql) {
|
|
332
|
+
if (!sql.startsWith('CREATE INDEX ') && !sql.startsWith('ALTER TABLE '))
|
|
333
|
+
return [sql];
|
|
334
|
+
let quoteCharacter;
|
|
335
|
+
for (let index = 0; index < sql.length; index += 1) {
|
|
336
|
+
const character = sql[index];
|
|
337
|
+
if (quoteCharacter !== undefined) {
|
|
338
|
+
if (character === quoteCharacter) {
|
|
339
|
+
if (sql[index + 1] === quoteCharacter)
|
|
340
|
+
index += 1;
|
|
341
|
+
else
|
|
342
|
+
quoteCharacter = undefined;
|
|
343
|
+
}
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
if (character === "'" || character === '"' || character === '`') {
|
|
347
|
+
quoteCharacter = character;
|
|
348
|
+
continue;
|
|
349
|
+
}
|
|
350
|
+
if (character !== ';')
|
|
351
|
+
continue;
|
|
352
|
+
const first = sql.slice(0, index).trim();
|
|
353
|
+
const second = sql.slice(index + 1).trim();
|
|
354
|
+
const generatedPair = (first.startsWith('CREATE INDEX ') && /^ALTER TABLE .* ADD CONSTRAINT /u.test(second)) ||
|
|
355
|
+
(first.startsWith('ALTER TABLE ') && first.includes(' DROP FOREIGN KEY ') && second.startsWith('DROP INDEX '));
|
|
356
|
+
return generatedPair ? [first, second] : [sql];
|
|
357
|
+
}
|
|
358
|
+
return [sql];
|
|
359
|
+
}
|
|
360
|
+
function migrationConnection(name, driver, options = {}, ledger) {
|
|
361
|
+
const tableName = options.table ?? '_zmdb_migrations';
|
|
362
|
+
const table = options.schema === undefined ? quote(tableName) : `${quote(options.schema)}.${quote(tableName)}`;
|
|
363
|
+
async function execute(text, parameters = []) {
|
|
364
|
+
return driver.execute({ text, parameters });
|
|
365
|
+
}
|
|
366
|
+
async function appliedMigrations() {
|
|
367
|
+
const rows = await execute(`SELECT version, name, checksum FROM ${table} ORDER BY version`);
|
|
368
|
+
return rows.map((row, index) => {
|
|
369
|
+
const numericVersion = Number(row.version);
|
|
370
|
+
if (!Number.isSafeInteger(numericVersion) || typeof row.name !== 'string') {
|
|
371
|
+
throw new TypeError(`migration ledger row ${String(index)} has an invalid version or name`);
|
|
372
|
+
}
|
|
373
|
+
const checksum = row.checksum;
|
|
374
|
+
if (checksum !== null && typeof checksum !== 'string') {
|
|
375
|
+
throw new TypeError(`migration ledger row ${String(index)} has an invalid checksum`);
|
|
376
|
+
}
|
|
377
|
+
return { version: numericVersion, name: row.name, checksum };
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
const connection = {
|
|
381
|
+
name,
|
|
382
|
+
transactionalDdl: false,
|
|
383
|
+
async exec(sql) {
|
|
384
|
+
for (const statement of splitGeneratedStatements(sql))
|
|
385
|
+
await execute(statement);
|
|
386
|
+
},
|
|
387
|
+
async appliedVersions() {
|
|
388
|
+
return (await appliedMigrations()).map(row => row.version);
|
|
389
|
+
},
|
|
390
|
+
appliedMigrations,
|
|
391
|
+
async recordApplied(version, migrationName, checksum) {
|
|
392
|
+
await execute(`INSERT INTO ${table} (version, name, applied_at, checksum) VALUES (?, ?, ?, ?)`, [
|
|
393
|
+
version,
|
|
394
|
+
migrationName,
|
|
395
|
+
Date.now(),
|
|
396
|
+
checksum ?? null,
|
|
397
|
+
]);
|
|
398
|
+
},
|
|
399
|
+
async recordReverted(version) {
|
|
400
|
+
await execute(`DELETE FROM ${table} WHERE version = ?`, [version]);
|
|
401
|
+
},
|
|
402
|
+
async ensureVersionTable() {
|
|
403
|
+
const createPrefix = ledger?.createPrefix ?? 'CREATE TABLE';
|
|
404
|
+
const extraDefinitions = ledger?.definitions === undefined || ledger.definitions.length === 0
|
|
405
|
+
? ''
|
|
406
|
+
: `, ${ledger.definitions.join(', ')}`;
|
|
407
|
+
await execute(`${createPrefix} IF NOT EXISTS ${table} (` +
|
|
408
|
+
`version BIGINT PRIMARY KEY, name TEXT NOT NULL, applied_at BIGINT NOT NULL, checksum TEXT${extraDefinitions})`);
|
|
409
|
+
await execute(`ALTER TABLE ${table} MODIFY COLUMN version BIGINT NOT NULL`);
|
|
410
|
+
try {
|
|
411
|
+
await execute(`SELECT checksum FROM ${table} WHERE 1 = 0`);
|
|
412
|
+
}
|
|
413
|
+
catch {
|
|
414
|
+
await execute(`ALTER TABLE ${table} ADD COLUMN checksum TEXT`);
|
|
415
|
+
}
|
|
416
|
+
},
|
|
417
|
+
async checksum(sql) {
|
|
418
|
+
const digest = await globalThis.crypto.subtle.digest('SHA-256', new TextEncoder().encode(sql));
|
|
419
|
+
return [...new Uint8Array(digest)].map(byte => byte.toString(16).padStart(2, '0')).join('');
|
|
420
|
+
},
|
|
421
|
+
transaction(run) {
|
|
422
|
+
return run(connection);
|
|
423
|
+
},
|
|
424
|
+
};
|
|
425
|
+
return connection;
|
|
426
|
+
}
|
|
427
|
+
function resolvedTypes(overrides) {
|
|
428
|
+
return Object.freeze({
|
|
429
|
+
...TYPES,
|
|
430
|
+
...overrides.types,
|
|
431
|
+
});
|
|
432
|
+
}
|
|
433
|
+
export function mysqlFamilyMigrations(name, overrides = {}) {
|
|
434
|
+
const types = resolvedTypes(overrides);
|
|
435
|
+
const tableExtension = overrides.table === undefined
|
|
436
|
+
? undefined
|
|
437
|
+
: Object.freeze({
|
|
438
|
+
createPrefix: overrides.table.createPrefix,
|
|
439
|
+
definitions: overrides.table.definitions,
|
|
440
|
+
});
|
|
441
|
+
const ledger = overrides.ledger === undefined
|
|
442
|
+
? undefined
|
|
443
|
+
: Object.freeze({
|
|
444
|
+
createPrefix: overrides.ledger.createPrefix,
|
|
445
|
+
...(overrides.ledger.definitions === undefined
|
|
446
|
+
? {}
|
|
447
|
+
: { definitions: Object.freeze([...overrides.ledger.definitions]) }),
|
|
448
|
+
});
|
|
449
|
+
const migrations = {
|
|
450
|
+
name,
|
|
451
|
+
foreignKeyMode: 'deferred',
|
|
452
|
+
embedded: false,
|
|
453
|
+
validateSnapshot: (snapshot) => validateSnapshot(name, types, tableExtension, snapshot),
|
|
454
|
+
validatePlan(plan) {
|
|
455
|
+
validateSnapshot(name, types, tableExtension, plan.before);
|
|
456
|
+
validateSnapshot(name, types, tableExtension, plan.after);
|
|
457
|
+
for (const operation of plan.operations)
|
|
458
|
+
emitUp(name, types, tableExtension, operation);
|
|
459
|
+
},
|
|
460
|
+
ddlType: (column) => ddlType(name, types, column),
|
|
461
|
+
emitUp: (operation) => emitUp(name, types, tableExtension, operation),
|
|
462
|
+
emitDown: (operation) => emitDown(name, types, operation),
|
|
463
|
+
emitSchemaObject: (operation) => emitSchemaObject(name, types, operation),
|
|
464
|
+
connection: (driver, options) => migrationConnection(name, driver, options, ledger),
|
|
465
|
+
};
|
|
466
|
+
return Object.freeze(migrations);
|
|
467
|
+
}
|
|
468
|
+
export function createMysqlMigrations(name) {
|
|
469
|
+
return mysqlFamilyMigrations(name);
|
|
470
|
+
}
|
|
471
|
+
//# sourceMappingURL=migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrations.js","sourceRoot":"","sources":["../src/migrations.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@zmdb/mysql",
|
|
3
|
+
"version": "1.0.0-beta.1",
|
|
4
|
+
"description": "Complete MySQL compiler, migrations, introspection, and structural mysql2 driver vertical for zmdb.",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"database",
|
|
7
|
+
"mysql",
|
|
8
|
+
"mysql2",
|
|
9
|
+
"orm",
|
|
10
|
+
"sql",
|
|
11
|
+
"typescript",
|
|
12
|
+
"zmdb"
|
|
13
|
+
],
|
|
14
|
+
"homepage": "https://github.com/ambasta/zmdb#readme",
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/ambasta/zmdb/issues"
|
|
17
|
+
},
|
|
18
|
+
"license": "GPL-3.0-or-later",
|
|
19
|
+
"author": "zmdb contributors",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/ambasta/zmdb.git",
|
|
23
|
+
"directory": "packages/mysql"
|
|
24
|
+
},
|
|
25
|
+
"type": "module",
|
|
26
|
+
"sideEffects": false,
|
|
27
|
+
"exports": {
|
|
28
|
+
".": {
|
|
29
|
+
"types": "./dist/index.d.ts",
|
|
30
|
+
"import": "./dist/index.js"
|
|
31
|
+
}
|
|
32
|
+
},
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public",
|
|
35
|
+
"tag": "beta"
|
|
36
|
+
},
|
|
37
|
+
"scripts": {
|
|
38
|
+
"build": "node ../../scripts/build-package.mjs",
|
|
39
|
+
"test": "vitest run"
|
|
40
|
+
},
|
|
41
|
+
"dependencies": {
|
|
42
|
+
"@zmdb/migrations": "1.0.0-beta.1"
|
|
43
|
+
},
|
|
44
|
+
"peerDependencies": {
|
|
45
|
+
"@zmdb/orm": "1.0.0-beta.1",
|
|
46
|
+
"@zmdb/sql": "1.0.0-beta.1",
|
|
47
|
+
"mysql2": "^3.24.3"
|
|
48
|
+
},
|
|
49
|
+
"peerDependenciesMeta": {
|
|
50
|
+
"mysql2": {
|
|
51
|
+
"optional": true
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"engines": {
|
|
55
|
+
"node": ">=26"
|
|
56
|
+
},
|
|
57
|
+
"main": "./dist/index.js",
|
|
58
|
+
"types": "./dist/index.d.ts"
|
|
59
|
+
}
|