-
Notifications
You must be signed in to change notification settings - Fork 35
/
MySQLSchemaBuilderSpec.cfc
444 lines (342 loc) · 15.6 KB
/
MySQLSchemaBuilderSpec.cfc
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
component extends="tests.resources.AbstractSchemaBuilderSpec" {
function emptyTable() {
return [ "CREATE TABLE `users` ()" ];
}
function simpleTable() {
return [ "CREATE TABLE `users` (`username` NVARCHAR(255) NOT NULL, `password` NVARCHAR(255) NOT NULL)" ];
}
function complicatedTable() {
return [ "CREATE TABLE `users` (`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `username` NVARCHAR(255) NOT NULL, `first_name` NVARCHAR(255) NOT NULL, `last_name` NVARCHAR(255) NOT NULL, `password` NVARCHAR(100) NOT NULL, `country_id` INTEGER UNSIGNED NOT NULL, `created_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, `modified_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT `pk_users_id` PRIMARY KEY (`id`), CONSTRAINT `fk_users_country_id` FOREIGN KEY (`country_id`) REFERENCES `countries` (`id`) ON UPDATE NO ACTION ON DELETE CASCADE)" ];
}
function bigIncrements() {
return [ "CREATE TABLE `users` (`id` BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, CONSTRAINT `pk_users_id` PRIMARY KEY (`id`))" ];
}
function bigInteger() {
return [ "CREATE TABLE `weather_reports` (`temperature` BIGINT NOT NULL)" ];
}
function bigIntegerWithPrecision() {
return [ "CREATE TABLE `weather_reports` (`temperature` BIGINT(5) NOT NULL)" ];
}
function bit() {
return [ "CREATE TABLE `users` (`active` BIT(1) NOT NULL)" ];
}
function bitWithLength() {
return [ "CREATE TABLE `users` (`something` BIT(4) NOT NULL)" ];
}
function boolean() {
return [ "CREATE TABLE `users` (`active` TINYINT(1) NOT NULL)" ];
}
function char() {
return [ "CREATE TABLE `classifications` (`level` NCHAR(1) NOT NULL)" ];
}
function charWithLength() {
return [ "CREATE TABLE `classifications` (`abbreviation` NCHAR(3) NOT NULL)" ];
}
function date() {
return [ "CREATE TABLE `posts` (`posted_date` DATE NOT NULL)" ];
}
function datetime() {
return [ "CREATE TABLE `posts` (`posted_date` DATETIME NOT NULL)" ];
}
function decimal() {
return [ "CREATE TABLE `employees` (`salary` DECIMAL(10,0) NOT NULL)" ];
}
function decimalWithLength() {
return [ "CREATE TABLE `employees` (`salary` DECIMAL(3,0) NOT NULL)" ];
}
function decimalWithPrecision() {
return [ "CREATE TABLE `employees` (`salary` DECIMAL(10,2) NOT NULL)" ];
}
function decimalWithLengthAndPrecision() {
return [ "CREATE TABLE `employees` (`salary` DECIMAL(3,2) NOT NULL)" ];
}
function enum() {
return [
"CREATE TABLE `employees` (`tshirt_size` ENUM('S', 'M', 'L', 'XL', 'XXL') NOT NULL)"
];
}
function float() {
return [ "CREATE TABLE `employees` (`salary` FLOAT(10,0) NOT NULL)" ];
}
function floatWithLength() {
return [ "CREATE TABLE `employees` (`salary` FLOAT(3,0) NOT NULL)" ];
}
function floatWithPrecision() {
return [ "CREATE TABLE `employees` (`salary` FLOAT(10,2) NOT NULL)" ];
}
function floatWithLengthAndPrecision() {
return [ "CREATE TABLE `employees` (`salary` FLOAT(3,2) NOT NULL)" ];
}
function increments() {
return [ "CREATE TABLE `users` (`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, CONSTRAINT `pk_users_id` PRIMARY KEY (`id`))" ];
}
function integer() {
return [ "CREATE TABLE `users` (`age` INTEGER NOT NULL)" ];
}
function integerWithPrecision() {
return [ "CREATE TABLE `users` (`age` INTEGER(2) NOT NULL)" ];
}
function json() {
return [ "CREATE TABLE `users` (`personalizations` TEXT NOT NULL)" ];
}
function longText() {
return [ "CREATE TABLE `posts` (`body` TEXT NOT NULL)" ];
}
function UnicodeLongText() {
return [ "CREATE TABLE `posts` (`body` TEXT NOT NULL)" ];
}
function mediumIncrements() {
return [ "CREATE TABLE `users` (`id` MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT, CONSTRAINT `pk_users_id` PRIMARY KEY (`id`))" ];
}
function mediumInteger() {
return [ "CREATE TABLE `users` (`age` MEDIUMINT NOT NULL)" ];
}
function mediumIntegerWithPrecision() {
return [ "CREATE TABLE `users` (`age` MEDIUMINT(5) NOT NULL)" ];
}
function mediumText() {
return [ "CREATE TABLE `posts` (`body` TEXT NOT NULL)" ];
}
function morphs() {
return [ "CREATE TABLE `tags` (`taggable_id` INTEGER UNSIGNED NOT NULL, `taggable_type` VARCHAR(255) NOT NULL, INDEX `taggable_index` (`taggable_id`, `taggable_type`))" ];
}
function nullableMorphs() {
return [ "CREATE TABLE `tags` (`taggable_id` INTEGER UNSIGNED, `taggable_type` VARCHAR(255), INDEX `taggable_index` (`taggable_id`, `taggable_type`))" ];
}
function raw() {
return [ "CREATE TABLE `users` (id BLOB NOT NULL)" ];
}
function smallIncrements() {
return [ "CREATE TABLE `users` (`id` SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, CONSTRAINT `pk_users_id` PRIMARY KEY (`id`))" ];
}
function smallInteger() {
return [ "CREATE TABLE `users` (`age` SMALLINT NOT NULL)" ];
}
function smallIntegerWithPrecision() {
return [ "CREATE TABLE `users` (`age` SMALLINT(5) NOT NULL)" ];
}
function string() {
return [ "CREATE TABLE `users` (`username` VARCHAR(255) NOT NULL)" ];
}
function stringWithLength() {
return [ "CREATE TABLE `users` (`password` VARCHAR(50) NOT NULL)" ];
}
function unicodeString() {
return [ "CREATE TABLE `users` (`username` NVARCHAR(255) NOT NULL)" ];
}
function text() {
return [ "CREATE TABLE `posts` (`body` TEXT NOT NULL)" ];
}
function unicodeText() {
return [ "CREATE TABLE `posts` (`body` TEXT NOT NULL)" ];
}
function time() {
return [ "CREATE TABLE `recurring_tasks` (`fire_time` TIME NOT NULL)" ];
}
function timestamp() {
return [ "CREATE TABLE `posts` (`posted_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP)" ];
}
function tinyIncrements() {
return [ "CREATE TABLE `users` (`id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, CONSTRAINT `pk_users_id` PRIMARY KEY (`id`))" ];
}
function tinyInteger() {
return [ "CREATE TABLE `users` (`active` TINYINT NOT NULL)" ];
}
function tinyIntegerWithPrecision() {
return [ "CREATE TABLE `users` (`active` TINYINT(3) NOT NULL)" ];
}
function unsignedBigInteger() {
return [ "CREATE TABLE `employees` (`salary` BIGINT UNSIGNED NOT NULL)" ];
}
function unsignedBigIntegerWithPrecision() {
return [ "CREATE TABLE `employees` (`salary` BIGINT(5) UNSIGNED NOT NULL)" ];
}
function unsignedInteger() {
return [ "CREATE TABLE `users` (`age` INTEGER UNSIGNED NOT NULL)" ];
}
function unsignedIntegerWithPrecision() {
return [ "CREATE TABLE `users` (`age` INTEGER(5) UNSIGNED NOT NULL)" ];
}
function unsignedMediumInteger() {
return [ "CREATE TABLE `users` (`age` MEDIUMINT UNSIGNED NOT NULL)" ];
}
function unsignedMediumIntegerWithPrecision() {
return [ "CREATE TABLE `users` (`age` MEDIUMINT(5) UNSIGNED NOT NULL)" ];
}
function unsignedSmallInteger() {
return [ "CREATE TABLE `users` (`age` SMALLINT UNSIGNED NOT NULL)" ];
}
function unsignedSmallIntegerWithPrecision() {
return [ "CREATE TABLE `users` (`age` SMALLINT(5) UNSIGNED NOT NULL)" ];
}
function unsignedTinyInteger() {
return [ "CREATE TABLE `users` (`age` TINYINT UNSIGNED NOT NULL)" ];
}
function unsignedTinyIntegerWithPrecision() {
return [ "CREATE TABLE `users` (`age` TINYINT(5) UNSIGNED NOT NULL)" ];
}
function uuid() {
return [ "CREATE TABLE `users` (`id` NCHAR(36) NOT NULL)" ];
}
function comment() {
return [
"CREATE TABLE `users` (`active` TINYINT(1) NOT NULL COMMENT `This is a comment`)"
];
}
function default() {
return [ "CREATE TABLE `users` (`active` NCHAR(1) NOT NULL DEFAULT 'Y')" ];
}
function nullable() {
return [ "CREATE TABLE `users` (`id` NCHAR(36))" ];
}
function unsigned() {
return [ "CREATE TABLE `users` (`age` INTEGER UNSIGNED NOT NULL)" ];
}
function columnUnique() {
return [ "CREATE TABLE `users` (`username` NVARCHAR(255) NOT NULL UNIQUE)" ];
}
function tableUnique() {
return [ "CREATE TABLE `users` (`username` NVARCHAR(255) NOT NULL, CONSTRAINT `unq_users_username` UNIQUE (`username`))" ];
}
function uniqueOverridingName() {
return [ "CREATE TABLE `users` (`username` NVARCHAR(255) NOT NULL, CONSTRAINT `unq_uname` UNIQUE (`username`))" ];
}
function uniqueMultipleColumns() {
return [ "CREATE TABLE `users` (`first_name` NVARCHAR(255) NOT NULL, `last_name` NVARCHAR(255) NOT NULL, CONSTRAINT `unq_users_first_name_last_name` UNIQUE (`first_name`, `last_name`))" ];
}
function addConstraint() {
return [ "ALTER TABLE `users` ADD CONSTRAINT `unq_users_username` UNIQUE (`username`)" ];
}
function addMultipleConstraints() {
return [
"ALTER TABLE `users` ADD CONSTRAINT `unq_users_username` UNIQUE (`username`)",
"ALTER TABLE `users` ADD CONSTRAINT `unq_users_email` UNIQUE (`email`)"
];
}
function renameConstraint() {
return [ "ALTER TABLE `users` RENAME INDEX `unq_users_first_name_last_name` TO `unq_users_full_name`" ];
}
function dropConstraintFromName() {
return [ "ALTER TABLE `users` DROP INDEX `unique_username`" ];
}
function dropConstraintFromIndex() {
return [ "ALTER TABLE `users` DROP INDEX `unq_users_username`" ];
}
function dropForeignKey() {
return [ "ALTER TABLE `users` DROP FOREIGN KEY `fk_posts_author_id`" ];
}
function basicIndex() {
return [ "CREATE TABLE `users` (`published_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, INDEX `idx_users_published_date` (`published_date`))" ];
}
function compositeIndex() {
return [ "CREATE TABLE `users` (`first_name` NVARCHAR(255) NOT NULL, `last_name` NVARCHAR(255) NOT NULL, INDEX `idx_users_first_name_last_name` (`first_name`, `last_name`))" ];
}
function overrideIndexName() {
return [ "CREATE TABLE `users` (`first_name` NVARCHAR(255) NOT NULL, `last_name` NVARCHAR(255) NOT NULL, INDEX `index_full_name` (`first_name`, `last_name`))" ];
}
function columnPrimaryKey() {
return [ "CREATE TABLE `users` (`uuid` VARCHAR(255) NOT NULL, CONSTRAINT `pk_users_uuid` PRIMARY KEY (`uuid`))" ];
}
function tablePrimaryKey() {
return [ "CREATE TABLE `users` (`uuid` VARCHAR(255) NOT NULL, CONSTRAINT `pk_users_uuid` PRIMARY KEY (`uuid`))" ];
}
function compositePrimaryKey() {
return [ "CREATE TABLE `users` (`first_name` NVARCHAR(255) NOT NULL, `last_name` NVARCHAR(255) NOT NULL, CONSTRAINT `pk_users_first_name_last_name` PRIMARY KEY (`first_name`, `last_name`))" ];
}
function overridePrimaryKeyIndexName() {
return [ "CREATE TABLE `users` (`first_name` NVARCHAR(255) NOT NULL, `last_name` NVARCHAR(255) NOT NULL, CONSTRAINT `pk_full_name` PRIMARY KEY (`first_name`, `last_name`))" ];
}
function columnForeignKey() {
return [ "CREATE TABLE `posts` (`author_id` INTEGER UNSIGNED NOT NULL, CONSTRAINT `fk_posts_author_id` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION)" ];
}
function tableForeignKey() {
return [ "CREATE TABLE `posts` (`author_id` INTEGER UNSIGNED NOT NULL, CONSTRAINT `fk_posts_author_id` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION)" ];
}
function overrideColumnForeignKeyIndexName() {
return [ "CREATE TABLE `posts` (`author_id` INTEGER UNSIGNED NOT NULL, CONSTRAINT `fk_author` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION)" ];
}
function overrideTableForeignKeyIndexName() {
return [ "CREATE TABLE `posts` (`author_id` INTEGER UNSIGNED NOT NULL, CONSTRAINT `fk_author` FOREIGN KEY (`author_id`) REFERENCES `users` (`id`) ON UPDATE NO ACTION ON DELETE NO ACTION)" ];
}
function renameTable() {
return [ "RENAME TABLE `workers` TO `employees`" ];
}
function renameColumn() {
return [ "ALTER TABLE `users` CHANGE `name` `username` NVARCHAR(255) NOT NULL" ];
}
function renameMultipleColumns() {
return [
"ALTER TABLE `users` CHANGE `name` `username` NVARCHAR(255) NOT NULL",
"ALTER TABLE `users` CHANGE `purchase_date` `purchased_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP"
];
}
function modifyColumn() {
return [ "ALTER TABLE `users` CHANGE `name` `name` TEXT NOT NULL" ];
}
function modifyMultipleColumns() {
return [
"ALTER TABLE `users` CHANGE `name` `name` TEXT NOT NULL",
"ALTER TABLE `users` CHANGE `purchase_date` `purchased_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP"
];
}
function addColumn() {
return [
"ALTER TABLE `users` ADD `tshirt_size` ENUM('S', 'M', 'L', 'XL', 'XXL') NOT NULL"
];
}
function addMultiple() {
return [
"ALTER TABLE `users` ADD `tshirt_size` ENUM('S', 'M', 'L', 'XL', 'XXL') NOT NULL",
"ALTER TABLE `users` ADD `is_active` TINYINT(1) NOT NULL"
];
}
function complicatedModify() {
return [
"ALTER TABLE `users` DROP COLUMN `is_active`",
"ALTER TABLE `users` ADD `tshirt_size` ENUM('S', 'M', 'L', 'XL', 'XXL') NOT NULL",
"ALTER TABLE `users` CHANGE `name` `username` NVARCHAR(255) NOT NULL",
"ALTER TABLE `users` CHANGE `purchase_date` `purchase_date` TIMESTAMP DEFAULT CURRENT_TIMESTAMP",
"ALTER TABLE `users` ADD CONSTRAINT `unq_users_username` UNIQUE (`username`)",
"ALTER TABLE `users` ADD CONSTRAINT `unq_users_email` UNIQUE (`email`)",
"ALTER TABLE `users` DROP INDEX `idx_users_created_date`",
"ALTER TABLE `users` DROP INDEX `idx_users_modified_date`"
];
}
function dropTable() {
return [ "DROP TABLE `users`" ];
}
function dropIfExists() {
return [ "DROP TABLE IF EXISTS `users`" ];
}
function dropColumn() {
return [ "ALTER TABLE `users` DROP COLUMN `username`" ];
}
function dropsMultipleColumns() {
return [
"ALTER TABLE `users` DROP COLUMN `username`",
"ALTER TABLE `users` DROP COLUMN `password`"
];
}
function hasTable() {
return [ "SELECT 1 FROM `information_schema`.`tables` WHERE `table_name` = ?" ];
}
function hasTableInSchema() {
return [ "SELECT 1 FROM `information_schema`.`tables` WHERE `table_name` = ? AND `table_schema` = ?" ];
}
function hasColumn() {
return [ "SELECT 1 FROM `information_schema`.`columns` WHERE `table_name` = ? AND `column_name` = ?" ];
}
function hasColumnInSchema() {
return [ "SELECT 1 FROM `information_schema`.`columns` WHERE `table_name` = ? AND `column_name` = ? AND `table_schema` = ?" ];
}
private function getBuilder( mockGrammar ) {
var utils = getMockBox().createMock( "qb.models.Query.QueryUtils" );
arguments.mockGrammar = isNull( arguments.mockGrammar ) ?
getMockBox().createMock( "qb.models.Grammars.MySQLGrammar" ).init( utils ) :
arguments.mockGrammar;
var builder = getMockBox().createMock( "qb.models.Schema.SchemaBuilder" )
.init( arguments.mockGrammar );
variables.mockGrammar = arguments.mockGrammar;
return builder;
}
}