@eggjs/dal-runtime 4.0.0-beta.7 → 4.0.0-beta.9

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.
@@ -1,224 +1,392 @@
1
- import { ColumnModel, TableModel } from "@eggjs/dal-decorator";
2
- import { ColumnType, IndexType } from "@eggjs/tegg-types";
3
-
4
- //#region src/SqlGenerator.ts
5
- var SqlGenerator = class {
6
- formatComment(comment) {
7
- return comment.replace(/\n/g, "\\n");
8
- }
9
- generateColumn(column) {
10
- const sqls = [
11
- " ",
12
- column.columnName,
13
- this.generateColumnType(column.type)
14
- ];
15
- if (column.canNull) sqls.push("NULL");
16
- else sqls.push("NOT NULL");
17
- if ([
18
- ColumnType.POINT,
19
- ColumnType.GEOMETRY,
20
- ColumnType.POINT,
21
- ColumnType.LINESTRING,
22
- ColumnType.POLYGON,
23
- ColumnType.MULTIPOINT,
24
- ColumnType.MULTILINESTRING,
25
- ColumnType.MULTIPOLYGON,
26
- ColumnType.GEOMETRYCOLLECTION
27
- ].includes(column.type.type)) {
28
- const SRID = column.type.SRID;
29
- if (SRID) sqls.push(`SRID ${SRID}`);
30
- }
31
- if (typeof column.default !== "undefined") sqls.push(`DEFAULT ${column.default}`);
32
- if (column.autoIncrement) sqls.push("AUTO_INCREMENT");
33
- if (column.uniqueKey) sqls.push("UNIQUE KEY");
34
- if (column.primaryKey) sqls.push("PRIMARY KEY");
35
- if (column.comment) sqls.push(`COMMENT '${this.formatComment(column.comment)}'`);
36
- if (column.collate) sqls.push(`COLLATE ${column.collate}`);
37
- if (column.columnFormat) sqls.push(`COLUMN_FORMAT ${column.columnFormat}`);
38
- if (column.engineAttribute) sqls.push(`ENGINE_ATTRIBUTE='${column.engineAttribute}'`);
39
- if (column.secondaryEngineAttribute) sqls.push(`SECONDARY_ENGINE_ATTRIBUTE='${column.secondaryEngineAttribute}'`);
40
- return sqls.join(" ");
41
- }
42
- generateColumnType(columnType) {
43
- const sqls = [];
44
- switch (columnType.type) {
45
- case ColumnType.BOOL:
46
- sqls.push("BOOL");
47
- break;
48
- case ColumnType.BIT:
49
- if (columnType.length) sqls.push(`BIT(${columnType.length})`);
50
- else sqls.push("BIT");
51
- break;
52
- case ColumnType.TINYINT:
53
- case ColumnType.SMALLINT:
54
- case ColumnType.MEDIUMINT:
55
- case ColumnType.INT:
56
- case ColumnType.BIGINT:
57
- if (typeof columnType.length === "number") sqls.push(`${columnType.type}(${columnType.length})`);
58
- else sqls.push(columnType.type);
59
- if (columnType.unsigned) sqls.push("UNSIGNED");
60
- if (columnType.zeroFill) sqls.push("ZEROFILL");
61
- break;
62
- case ColumnType.DECIMAL:
63
- case ColumnType.FLOAT:
64
- case ColumnType.DOUBLE:
65
- if (typeof columnType.length === "number" && typeof columnType.fractionalLength === "number") sqls.push(`${columnType.type}(${columnType.length},${columnType.fractionalLength})`);
66
- else if (typeof columnType.length === "number") sqls.push(`${columnType.type}(${columnType.length})`);
67
- else sqls.push("TINYINT");
68
- if (columnType.unsigned) sqls.push("UNSIGNED");
69
- if (columnType.zeroFill) sqls.push("ZEROFILL");
70
- break;
71
- case ColumnType.DATE:
72
- sqls.push("DATE");
73
- break;
74
- case ColumnType.DATETIME:
75
- case ColumnType.TIMESTAMP:
76
- if (columnType.precision) sqls.push(`${columnType.type}(${columnType.precision})`);
77
- else sqls.push(columnType.type);
78
- if (columnType.autoUpdate) if (columnType.precision) sqls.push(`ON UPDATE CURRENT_TIMESTAMP(${columnType.precision})`);
79
- else sqls.push("ON UPDATE CURRENT_TIMESTAMP");
80
- break;
81
- case ColumnType.TIME:
82
- if (columnType.precision) sqls.push(`${columnType.type}(${columnType.precision})`);
83
- else sqls.push(columnType.type);
84
- break;
85
- case ColumnType.YEAR:
86
- sqls.push("YEAR");
87
- break;
88
- case ColumnType.CHAR:
89
- case ColumnType.TEXT:
90
- if (columnType.length) sqls.push(`${columnType.type}(${columnType.length})`);
91
- else sqls.push(columnType.type);
92
- if (columnType.characterSet) sqls.push(`CHARACTER SET ${columnType.characterSet}`);
93
- if (columnType.collate) sqls.push(`COLLATE ${columnType.collate}`);
94
- break;
95
- case ColumnType.VARCHAR:
96
- sqls.push(`${columnType.type}(${columnType.length})`);
97
- if (columnType.characterSet) sqls.push(`CHARACTER SET ${columnType.characterSet}`);
98
- if (columnType.collate) sqls.push(`COLLATE ${columnType.collate}`);
99
- break;
100
- case ColumnType.BINARY:
101
- if (columnType.length) sqls.push(`${columnType.type}(${columnType.length})`);
102
- else sqls.push(columnType.type);
103
- break;
104
- case ColumnType.VARBINARY:
105
- sqls.push(`${columnType.type}(${columnType.length})`);
106
- break;
107
- case ColumnType.TINYBLOB:
108
- sqls.push("TINYBLOB");
109
- break;
110
- case ColumnType.TINYTEXT:
111
- case ColumnType.MEDIUMTEXT:
112
- case ColumnType.LONGTEXT:
113
- sqls.push(columnType.type);
114
- if (columnType.characterSet) sqls.push(`CHARACTER SET ${columnType.characterSet}`);
115
- if (columnType.collate) sqls.push(`COLLATE ${columnType.collate}`);
116
- break;
117
- case ColumnType.BLOB:
118
- if (columnType.length) sqls.push(`${columnType.type}(${columnType.length})`);
119
- else sqls.push(columnType.type);
120
- break;
121
- case ColumnType.MEDIUMBLOB:
122
- sqls.push("MEDIUMBLOB");
123
- break;
124
- case ColumnType.LONGBLOB:
125
- sqls.push("LONGBLOB");
126
- break;
127
- case ColumnType.ENUM: {
128
- const enumValue = columnType.enums.map((t) => `'${t}'`).join(",");
129
- sqls.push(`ENUM(${enumValue})`);
130
- if (columnType.characterSet) sqls.push(`CHARACTER SET ${columnType.characterSet}`);
131
- if (columnType.collate) sqls.push(`COLLATE ${columnType.collate}`);
132
- break;
133
- }
134
- case ColumnType.SET: {
135
- const enumValue = columnType.enums.map((t) => `'${t}'`).join(",");
136
- sqls.push(`SET(${enumValue})`);
137
- if (columnType.characterSet) sqls.push(`CHARACTER SET ${columnType.characterSet}`);
138
- if (columnType.collate) sqls.push(`COLLATE ${columnType.collate}`);
139
- break;
140
- }
141
- case ColumnType.JSON:
142
- sqls.push("JSON");
143
- break;
144
- case ColumnType.GEOMETRY:
145
- case ColumnType.POINT:
146
- case ColumnType.LINESTRING:
147
- case ColumnType.POLYGON:
148
- case ColumnType.MULTIPOINT:
149
- case ColumnType.MULTILINESTRING:
150
- case ColumnType.MULTIPOLYGON:
151
- case ColumnType.GEOMETRYCOLLECTION:
152
- sqls.push(columnType.type);
153
- break;
154
- default: throw new Error(`unknown ColumnType ${columnType}`);
155
- }
156
- return sqls.join(" ");
157
- }
158
- generateIndex(indexModel) {
159
- const indexSql = [" "];
160
- switch (indexModel.type) {
161
- case IndexType.INDEX:
162
- indexSql.push("KEY");
163
- break;
164
- case IndexType.UNIQUE:
165
- indexSql.push("UNIQUE KEY");
166
- break;
167
- case IndexType.PRIMARY:
168
- indexSql.push("PRIMARY KEY");
169
- break;
170
- case IndexType.FULLTEXT:
171
- indexSql.push("FULLTEXT KEY");
172
- break;
173
- case IndexType.SPATIAL:
174
- indexSql.push("SPATIAL KEY");
175
- break;
176
- default: throw new Error(`unknown IndexType ${indexModel.type}`);
177
- }
178
- indexSql.push(indexModel.name);
179
- indexSql.push(`(${indexModel.keys.map((t) => t.columnName).join(",")})`);
180
- if (indexModel.storeType) indexSql.push(`USING ${indexModel.storeType}`);
181
- if (indexModel.parser) indexSql.push(`WITH PARSER ${indexModel.parser}`);
182
- if (indexModel.comment) indexSql.push(`COMMENT '${this.formatComment(indexModel.comment)}'`);
183
- if (indexModel.engineAttribute) indexSql.push(`ENGINE_ATTRIBUTE='${indexModel.engineAttribute}'`);
184
- if (indexModel.secondaryEngineAttribute) indexSql.push(`SECONDARY_ENGINE_ATTRIBUTE='${indexModel.secondaryEngineAttribute}'`);
185
- return indexSql.join(" ");
186
- }
187
- generateTableOptions(tableModel) {
188
- const sqls = [];
189
- if (tableModel.autoExtendSize) sqls.push(`AUTOEXTEND_SIZE=${tableModel.autoExtendSize}`);
190
- if (tableModel.autoIncrement) sqls.push(`AUTO_INCREMENT=${tableModel.autoIncrement}`);
191
- if (tableModel.avgRowLength) sqls.push(`AVG_ROW_LENGTH=${tableModel.avgRowLength}`);
192
- if (tableModel.characterSet) sqls.push(`DEFAULT CHARACTER SET ${tableModel.characterSet}`);
193
- if (tableModel.collate) sqls.push(`DEFAULT COLLATE ${tableModel.collate}`);
194
- if (tableModel.comment) sqls.push(`COMMENT='${this.formatComment(tableModel.comment)}'`);
195
- if (tableModel.compression) sqls.push(`COMPRESSION='${tableModel.compression}'`);
196
- if (typeof tableModel.encryption !== "undefined") sqls.push(`ENCRYPTION='${tableModel.encryption ? "Y" : "N"}'`);
197
- if (typeof tableModel.engine !== "undefined") sqls.push(`ENGINE=${tableModel.engine}`);
198
- if (tableModel.engineAttribute) sqls.push(`ENGINE_ATTRIBUTE='${tableModel.engineAttribute}'`);
199
- if (tableModel.secondaryEngineAttribute) sqls.push(`SECONDARY_ENGINE_ATTRIBUTE = '${tableModel.secondaryEngineAttribute}'`);
200
- if (tableModel.insertMethod) sqls.push(`INSERT_METHOD=${tableModel.insertMethod}`);
201
- if (tableModel.keyBlockSize) sqls.push(`KEY_BLOCK_SIZE=${tableModel.keyBlockSize}`);
202
- if (tableModel.maxRows) sqls.push(`MAX_ROWS=${tableModel.maxRows}`);
203
- if (tableModel.minRows) sqls.push(`MIN_ROWS=${tableModel.minRows}`);
204
- if (tableModel.rowFormat) sqls.push(`ROW_FORMAT=${tableModel.rowFormat}`);
205
- return sqls.join(", ");
206
- }
207
- generate(tableModel) {
208
- const createSql = [];
209
- createSql.push(`CREATE TABLE IF NOT EXISTS ${tableModel.name} (`);
210
- const columnSql = [];
211
- for (const column of tableModel.columns) columnSql.push(this.generateColumn(column));
212
- const indexSql = [];
213
- for (const index of tableModel.indices) indexSql.push(this.generateIndex(index));
214
- if (indexSql.length) {
215
- createSql.push(columnSql.join(",\n") + ",");
216
- createSql.push(indexSql.join(",\n"));
217
- } else createSql.push(columnSql.join(",\n"));
218
- createSql.push(`) ${this.generateTableOptions(tableModel)};`);
219
- return createSql.join("\n");
220
- }
221
- };
222
-
223
- //#endregion
224
- export { SqlGenerator };
1
+ import { ColumnModel, IndexModel, TableModel, } from '@eggjs/dal-decorator';
2
+ import { ColumnType, IndexType } from '@eggjs/tegg-types';
3
+ // TODO diff 实现
4
+ export class SqlGenerator {
5
+ formatComment(comment) {
6
+ return comment.replace(/\n/g, '\\n');
7
+ }
8
+ generateColumn(column) {
9
+ const sqls = [
10
+ ' ',
11
+ column.columnName,
12
+ this.generateColumnType(column.type),
13
+ ];
14
+ if (column.canNull) {
15
+ sqls.push('NULL');
16
+ }
17
+ else {
18
+ sqls.push('NOT NULL');
19
+ }
20
+ if ([
21
+ ColumnType.POINT,
22
+ ColumnType.GEOMETRY,
23
+ ColumnType.POINT,
24
+ ColumnType.LINESTRING,
25
+ ColumnType.POLYGON,
26
+ ColumnType.MULTIPOINT,
27
+ ColumnType.MULTILINESTRING,
28
+ ColumnType.MULTIPOLYGON,
29
+ ColumnType.GEOMETRYCOLLECTION,
30
+ ].includes(column.type.type)) {
31
+ const SRID = column.type.SRID;
32
+ if (SRID) {
33
+ sqls.push(`SRID ${SRID}`);
34
+ }
35
+ }
36
+ if (typeof column.default !== 'undefined') {
37
+ sqls.push(`DEFAULT ${column.default}`);
38
+ }
39
+ if (column.autoIncrement) {
40
+ sqls.push('AUTO_INCREMENT');
41
+ }
42
+ if (column.uniqueKey) {
43
+ sqls.push('UNIQUE KEY');
44
+ }
45
+ if (column.primaryKey) {
46
+ sqls.push('PRIMARY KEY');
47
+ }
48
+ if (column.comment) {
49
+ sqls.push(`COMMENT '${this.formatComment(column.comment)}'`);
50
+ }
51
+ if (column.collate) {
52
+ sqls.push(`COLLATE ${column.collate}`);
53
+ }
54
+ if (column.columnFormat) {
55
+ sqls.push(`COLUMN_FORMAT ${column.columnFormat}`);
56
+ }
57
+ if (column.engineAttribute) {
58
+ sqls.push(`ENGINE_ATTRIBUTE='${column.engineAttribute}'`);
59
+ }
60
+ if (column.secondaryEngineAttribute) {
61
+ sqls.push(`SECONDARY_ENGINE_ATTRIBUTE='${column.secondaryEngineAttribute}'`);
62
+ }
63
+ return sqls.join(' ');
64
+ }
65
+ generateColumnType(columnType) {
66
+ const sqls = [];
67
+ switch (columnType.type) {
68
+ case ColumnType.BOOL: {
69
+ sqls.push('BOOL');
70
+ break;
71
+ }
72
+ case ColumnType.BIT: {
73
+ if (columnType.length) {
74
+ sqls.push(`BIT(${columnType.length})`);
75
+ }
76
+ else {
77
+ sqls.push('BIT');
78
+ }
79
+ break;
80
+ }
81
+ case ColumnType.TINYINT:
82
+ case ColumnType.SMALLINT:
83
+ case ColumnType.MEDIUMINT:
84
+ case ColumnType.INT:
85
+ case ColumnType.BIGINT: {
86
+ if (typeof columnType.length === 'number') {
87
+ sqls.push(`${columnType.type}(${columnType.length})`);
88
+ }
89
+ else {
90
+ sqls.push(columnType.type);
91
+ }
92
+ if (columnType.unsigned) {
93
+ sqls.push('UNSIGNED');
94
+ }
95
+ if (columnType.zeroFill) {
96
+ sqls.push('ZEROFILL');
97
+ }
98
+ break;
99
+ }
100
+ case ColumnType.DECIMAL:
101
+ case ColumnType.FLOAT:
102
+ case ColumnType.DOUBLE: {
103
+ if (typeof columnType.length === 'number' && typeof columnType.fractionalLength === 'number') {
104
+ sqls.push(`${columnType.type}(${columnType.length},${columnType.fractionalLength})`);
105
+ }
106
+ else if (typeof columnType.length === 'number') {
107
+ sqls.push(`${columnType.type}(${columnType.length})`);
108
+ }
109
+ else {
110
+ sqls.push('TINYINT');
111
+ }
112
+ if (columnType.unsigned) {
113
+ sqls.push('UNSIGNED');
114
+ }
115
+ if (columnType.zeroFill) {
116
+ sqls.push('ZEROFILL');
117
+ }
118
+ break;
119
+ }
120
+ case ColumnType.DATE: {
121
+ sqls.push('DATE');
122
+ break;
123
+ }
124
+ case ColumnType.DATETIME:
125
+ case ColumnType.TIMESTAMP: {
126
+ if (columnType.precision) {
127
+ sqls.push(`${columnType.type}(${columnType.precision})`);
128
+ }
129
+ else {
130
+ sqls.push(columnType.type);
131
+ }
132
+ if (columnType.autoUpdate) {
133
+ if (columnType.precision) {
134
+ sqls.push(`ON UPDATE CURRENT_TIMESTAMP(${columnType.precision})`);
135
+ }
136
+ else {
137
+ sqls.push('ON UPDATE CURRENT_TIMESTAMP');
138
+ }
139
+ }
140
+ break;
141
+ }
142
+ case ColumnType.TIME: {
143
+ if (columnType.precision) {
144
+ sqls.push(`${columnType.type}(${columnType.precision})`);
145
+ }
146
+ else {
147
+ sqls.push(columnType.type);
148
+ }
149
+ break;
150
+ }
151
+ case ColumnType.YEAR: {
152
+ sqls.push('YEAR');
153
+ break;
154
+ }
155
+ case ColumnType.CHAR:
156
+ case ColumnType.TEXT: {
157
+ if (columnType.length) {
158
+ sqls.push(`${columnType.type}(${columnType.length})`);
159
+ }
160
+ else {
161
+ sqls.push(columnType.type);
162
+ }
163
+ if (columnType.characterSet) {
164
+ sqls.push(`CHARACTER SET ${columnType.characterSet}`);
165
+ }
166
+ if (columnType.collate) {
167
+ sqls.push(`COLLATE ${columnType.collate}`);
168
+ }
169
+ break;
170
+ }
171
+ case ColumnType.VARCHAR: {
172
+ sqls.push(`${columnType.type}(${columnType.length})`);
173
+ if (columnType.characterSet) {
174
+ sqls.push(`CHARACTER SET ${columnType.characterSet}`);
175
+ }
176
+ if (columnType.collate) {
177
+ sqls.push(`COLLATE ${columnType.collate}`);
178
+ }
179
+ break;
180
+ }
181
+ case ColumnType.BINARY: {
182
+ if (columnType.length) {
183
+ sqls.push(`${columnType.type}(${columnType.length})`);
184
+ }
185
+ else {
186
+ sqls.push(columnType.type);
187
+ }
188
+ break;
189
+ }
190
+ case ColumnType.VARBINARY: {
191
+ sqls.push(`${columnType.type}(${columnType.length})`);
192
+ break;
193
+ }
194
+ case ColumnType.TINYBLOB: {
195
+ sqls.push('TINYBLOB');
196
+ break;
197
+ }
198
+ case ColumnType.TINYTEXT:
199
+ case ColumnType.MEDIUMTEXT:
200
+ case ColumnType.LONGTEXT: {
201
+ sqls.push(columnType.type);
202
+ if (columnType.characterSet) {
203
+ sqls.push(`CHARACTER SET ${columnType.characterSet}`);
204
+ }
205
+ if (columnType.collate) {
206
+ sqls.push(`COLLATE ${columnType.collate}`);
207
+ }
208
+ break;
209
+ }
210
+ case ColumnType.BLOB: {
211
+ if (columnType.length) {
212
+ sqls.push(`${columnType.type}(${columnType.length})`);
213
+ }
214
+ else {
215
+ sqls.push(columnType.type);
216
+ }
217
+ break;
218
+ }
219
+ case ColumnType.MEDIUMBLOB: {
220
+ sqls.push('MEDIUMBLOB');
221
+ break;
222
+ }
223
+ case ColumnType.LONGBLOB: {
224
+ sqls.push('LONGBLOB');
225
+ break;
226
+ }
227
+ case ColumnType.ENUM: {
228
+ const enumValue = columnType.enums.map(t => `'${t}'`).join(',');
229
+ sqls.push(`ENUM(${enumValue})`);
230
+ if (columnType.characterSet) {
231
+ sqls.push(`CHARACTER SET ${columnType.characterSet}`);
232
+ }
233
+ if (columnType.collate) {
234
+ sqls.push(`COLLATE ${columnType.collate}`);
235
+ }
236
+ break;
237
+ }
238
+ case ColumnType.SET: {
239
+ const enumValue = columnType.enums.map(t => `'${t}'`).join(',');
240
+ sqls.push(`SET(${enumValue})`);
241
+ if (columnType.characterSet) {
242
+ sqls.push(`CHARACTER SET ${columnType.characterSet}`);
243
+ }
244
+ if (columnType.collate) {
245
+ sqls.push(`COLLATE ${columnType.collate}`);
246
+ }
247
+ break;
248
+ }
249
+ case ColumnType.JSON: {
250
+ sqls.push('JSON');
251
+ break;
252
+ }
253
+ case ColumnType.GEOMETRY:
254
+ case ColumnType.POINT:
255
+ case ColumnType.LINESTRING:
256
+ case ColumnType.POLYGON:
257
+ case ColumnType.MULTIPOINT:
258
+ case ColumnType.MULTILINESTRING:
259
+ case ColumnType.MULTIPOLYGON:
260
+ case ColumnType.GEOMETRYCOLLECTION: {
261
+ sqls.push(columnType.type);
262
+ break;
263
+ }
264
+ default: {
265
+ throw new Error(`unknown ColumnType ${columnType}`);
266
+ }
267
+ }
268
+ return sqls.join(' ');
269
+ }
270
+ generateIndex(indexModel) {
271
+ const indexSql = [
272
+ ' ',
273
+ ];
274
+ switch (indexModel.type) {
275
+ case IndexType.INDEX: {
276
+ indexSql.push('KEY');
277
+ break;
278
+ }
279
+ case IndexType.UNIQUE: {
280
+ indexSql.push('UNIQUE KEY');
281
+ break;
282
+ }
283
+ case IndexType.PRIMARY: {
284
+ indexSql.push('PRIMARY KEY');
285
+ break;
286
+ }
287
+ case IndexType.FULLTEXT: {
288
+ indexSql.push('FULLTEXT KEY');
289
+ break;
290
+ }
291
+ case IndexType.SPATIAL: {
292
+ indexSql.push('SPATIAL KEY');
293
+ break;
294
+ }
295
+ default: {
296
+ throw new Error(`unknown IndexType ${indexModel.type}`);
297
+ }
298
+ }
299
+ indexSql.push(indexModel.name);
300
+ indexSql.push(`(${indexModel.keys.map(t => t.columnName).join(',')})`);
301
+ if (indexModel.storeType) {
302
+ indexSql.push(`USING ${indexModel.storeType}`);
303
+ }
304
+ if (indexModel.parser) {
305
+ indexSql.push(`WITH PARSER ${indexModel.parser}`);
306
+ }
307
+ if (indexModel.comment) {
308
+ indexSql.push(`COMMENT '${this.formatComment(indexModel.comment)}'`);
309
+ }
310
+ if (indexModel.engineAttribute) {
311
+ indexSql.push(`ENGINE_ATTRIBUTE='${indexModel.engineAttribute}'`);
312
+ }
313
+ if (indexModel.secondaryEngineAttribute) {
314
+ indexSql.push(`SECONDARY_ENGINE_ATTRIBUTE='${indexModel.secondaryEngineAttribute}'`);
315
+ }
316
+ return indexSql.join(' ');
317
+ }
318
+ generateTableOptions(tableModel) {
319
+ const sqls = [];
320
+ if (tableModel.autoExtendSize) {
321
+ sqls.push(`AUTOEXTEND_SIZE=${tableModel.autoExtendSize}`);
322
+ }
323
+ if (tableModel.autoIncrement) {
324
+ sqls.push(`AUTO_INCREMENT=${tableModel.autoIncrement}`);
325
+ }
326
+ if (tableModel.avgRowLength) {
327
+ sqls.push(`AVG_ROW_LENGTH=${tableModel.avgRowLength}`);
328
+ }
329
+ if (tableModel.characterSet) {
330
+ sqls.push(`DEFAULT CHARACTER SET ${tableModel.characterSet}`);
331
+ }
332
+ if (tableModel.collate) {
333
+ sqls.push(`DEFAULT COLLATE ${tableModel.collate}`);
334
+ }
335
+ if (tableModel.comment) {
336
+ sqls.push(`COMMENT='${this.formatComment(tableModel.comment)}'`);
337
+ }
338
+ if (tableModel.compression) {
339
+ sqls.push(`COMPRESSION='${tableModel.compression}'`);
340
+ }
341
+ if (typeof tableModel.encryption !== 'undefined') {
342
+ sqls.push(`ENCRYPTION='${tableModel.encryption ? 'Y' : 'N'}'`);
343
+ }
344
+ if (typeof tableModel.engine !== 'undefined') {
345
+ sqls.push(`ENGINE=${tableModel.engine}`);
346
+ }
347
+ if (tableModel.engineAttribute) {
348
+ sqls.push(`ENGINE_ATTRIBUTE='${tableModel.engineAttribute}'`);
349
+ }
350
+ if (tableModel.secondaryEngineAttribute) {
351
+ sqls.push(`SECONDARY_ENGINE_ATTRIBUTE = '${tableModel.secondaryEngineAttribute}'`);
352
+ }
353
+ if (tableModel.insertMethod) {
354
+ sqls.push(`INSERT_METHOD=${tableModel.insertMethod}`);
355
+ }
356
+ if (tableModel.keyBlockSize) {
357
+ sqls.push(`KEY_BLOCK_SIZE=${tableModel.keyBlockSize}`);
358
+ }
359
+ if (tableModel.maxRows) {
360
+ sqls.push(`MAX_ROWS=${tableModel.maxRows}`);
361
+ }
362
+ if (tableModel.minRows) {
363
+ sqls.push(`MIN_ROWS=${tableModel.minRows}`);
364
+ }
365
+ if (tableModel.rowFormat) {
366
+ sqls.push(`ROW_FORMAT=${tableModel.rowFormat}`);
367
+ }
368
+ return sqls.join(', ');
369
+ }
370
+ generate(tableModel) {
371
+ const createSql = [];
372
+ createSql.push(`CREATE TABLE IF NOT EXISTS ${tableModel.name} (`);
373
+ const columnSql = [];
374
+ for (const column of tableModel.columns) {
375
+ columnSql.push(this.generateColumn(column));
376
+ }
377
+ const indexSql = [];
378
+ for (const index of tableModel.indices) {
379
+ indexSql.push(this.generateIndex(index));
380
+ }
381
+ if (indexSql.length) {
382
+ createSql.push(columnSql.join(',\n') + ',');
383
+ createSql.push(indexSql.join(',\n'));
384
+ }
385
+ else {
386
+ createSql.push(columnSql.join(',\n'));
387
+ }
388
+ createSql.push(`) ${this.generateTableOptions(tableModel)};`);
389
+ return createSql.join('\n');
390
+ }
391
+ }
392
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3FsR2VuZXJhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1NxbEdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsV0FBVyxFQUNYLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRzFELGVBQWU7QUFDZixNQUFNLE9BQU8sWUFBWTtJQUNmLGFBQWEsQ0FBQyxPQUFlO1FBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVPLGNBQWMsQ0FBQyxNQUFtQjtRQUN4QyxNQUFNLElBQUksR0FBYTtZQUNyQixHQUFHO1lBQ0gsTUFBTSxDQUFDLFVBQVU7WUFDakIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7U0FDckMsQ0FBQztRQUNGLElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDcEIsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ3hCLENBQUM7UUFDRCxJQUFLO1lBQ0gsVUFBVSxDQUFDLEtBQUs7WUFDaEIsVUFBVSxDQUFDLFFBQVE7WUFDbkIsVUFBVSxDQUFDLEtBQUs7WUFDaEIsVUFBVSxDQUFDLFVBQVU7WUFDckIsVUFBVSxDQUFDLE9BQU87WUFDbEIsVUFBVSxDQUFDLFVBQVU7WUFDckIsVUFBVSxDQUFDLGVBQWU7WUFDMUIsVUFBVSxDQUFDLFlBQVk7WUFDdkIsVUFBVSxDQUFDLGtCQUFrQjtTQUNiLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM5QyxNQUFNLElB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