Passed
Pull Request — master (#405)
by Wilmer
31:05 queued 28:30
created

ColumnTypes   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 989
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 571
dl 0
loc 989
rs 10
c 0
b 0
f 0
wmc 9

1 Method

Rating   Name   Duplication   Size   Complexity  
C getColumnTypes() 0 979 9
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Db\Tests\Provider;
6
7
use Yiisoft\Db\Driver\PDO\ConnectionPDOInterface;
8
use Yiisoft\Db\Schema\Schema;
9
use Yiisoft\Db\Schema\SchemaBuilderTrait;
10
11
use function array_key_exists;
12
use function array_values;
13
14
final class ColumnTypes
15
{
16
    use SchemaBuilderTrait;
17
18
    protected ConnectionPDOInterface $db;
19
20
    /**
21
     * This is not used as a dataprovider for testGetColumnType to speed up the test when used as dataprovider every
22
     * single line will cause a reconnect with the database which is not needed here.
23
     */
24
    public function getColumnTypes(ConnectionPDOInterface $db): array
25
    {
26
        $this->db = $db;
27
        $version = $this->db->getServerVersion();
28
29
        $items = [
30
            [
31
                Schema::TYPE_BIGINT,
32
                $this->bigInteger(),
33
                [
34
                    'mysql' => 'bigint(20)',
35
                    'pgsql' => 'bigint',
36
                    'sqlite' => 'bigint',
37
                    'oci' => 'NUMBER(20)',
38
                    'sqlsrv' => 'bigint',
39
                ],
40
            ],
41
            [
42
                Schema::TYPE_BIGINT . ' NOT NULL',
43
                $this->bigInteger()->notNull(),
44
                [
45
                    'mysql' => 'bigint(20) NOT NULL',
46
                    'pgsql' => 'bigint NOT NULL',
47
                    'sqlite' => 'bigint NOT NULL',
48
                    'oci' => 'NUMBER(20) NOT NULL',
49
                    'sqlsrv' => 'bigint NOT NULL',
50
                ],
51
            ],
52
            [
53
                Schema::TYPE_BIGINT . ' CHECK (value > 5)',
54
                $this->bigInteger()->check('value > 5'),
55
                [
56
                    'mysql' => 'bigint(20) CHECK (value > 5)',
57
                    'pgsql' => 'bigint CHECK (value > 5)',
58
                    'sqlite' => 'bigint CHECK (value > 5)',
59
                    'oci' => 'NUMBER(20) CHECK (value > 5)',
60
                    'sqlsrv' => 'bigint CHECK (value > 5)',
61
                ],
62
            ],
63
            [
64
                Schema::TYPE_BIGINT . '(8)',
65
                $this->bigInteger(8),
66
                [
67
                    'mysql' => 'bigint(8)',
68
                    'pgsql' => 'bigint',
69
                    'sqlite' => 'bigint',
70
                    'oci' => 'NUMBER(8)',
71
                    'sqlsrv' => 'bigint',
72
                ],
73
            ],
74
            [
75
                Schema::TYPE_BIGINT . '(8) CHECK (value > 5)',
76
                $this->bigInteger(8)->check('value > 5'),
77
                [
78
                    'mysql' => 'bigint(8) CHECK (value > 5)',
79
                    'pgsql' => 'bigint CHECK (value > 5)',
80
                    'sqlite' => 'bigint CHECK (value > 5)',
81
                    'oci' => 'NUMBER(8) CHECK (value > 5)',
82
                    'sqlsrv' => 'bigint CHECK (value > 5)',
83
                ],
84
            ],
85
            [
86
                Schema::TYPE_BIGPK,
87
                $this->bigPrimaryKey(),
88
                [
89
                    'mysql' => 'bigint(20) NOT NULL AUTO_INCREMENT PRIMARY KEY',
90
                    'pgsql' => 'bigserial NOT NULL PRIMARY KEY',
91
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL',
92
                ],
93
            ],
94
            [
95
                Schema::TYPE_BINARY,
96
                $this->binary(),
97
                [
98
                    'mysql' => 'blob',
99
                    'pgsql' => 'bytea',
100
                    'sqlite' => 'blob',
101
                    'oci' => 'BLOB',
102
                    'sqlsrv' => 'varbinary(max)',
103
                ],
104
            ],
105
            [
106
                Schema::TYPE_BOOLEAN . ' NOT NULL DEFAULT 1',
107
                $this->boolean()->notNull()->defaultValue(1),
108
                [
109
                    'mysql' => 'tinyint(1) NOT NULL DEFAULT 1',
110
                    'sqlite' => 'boolean NOT NULL DEFAULT 1',
111
                    'sqlsrv' => 'bit NOT NULL DEFAULT 1',
112
                ],
113
            ],
114
            [
115
                Schema::TYPE_BOOLEAN . ' NOT NULL DEFAULT TRUE',
116
                $this->boolean()->notNull()->defaultValue(true),
117
                [
118
                    'pgsql' => 'boolean NOT NULL DEFAULT TRUE',
119
                ],
120
            ],
121
            [
122
                Schema::TYPE_BOOLEAN,
123
                $this->boolean(),
124
                [
125
                    'mysql' => 'tinyint(1)',
126
                    'pgsql' => 'boolean',
127
                    'sqlite' => 'boolean',
128
                    'oci' => 'NUMBER(1)',
129
                    'sqlsrv' => 'bit',
130
                ],
131
            ],
132
            [
133
                Schema::TYPE_CHAR . ' CHECK (value LIKE \'test%\')',
134
                $this->char()->check('value LIKE \'test%\''),
135
                [
136
                    'pgsql' => 'char(1) CHECK (value LIKE \'test%\')',
137
                ],
138
            ],
139
            [
140
                Schema::TYPE_CHAR . ' CHECK (value LIKE "test%")',
141
                $this->char()->check('value LIKE "test%"'),
142
                [
143
                    'mysql' => 'char(1) CHECK (value LIKE "test%")',
144
                    'sqlite' => 'char(1) CHECK (value LIKE "test%")',
145
                ],
146
            ],
147
            [
148
                Schema::TYPE_CHAR . ' NOT NULL',
149
                $this->char()->notNull(),
150
                [
151
                    'mysql' => 'char(1) NOT NULL',
152
                    'pgsql' => 'char(1) NOT NULL',
153
                    'sqlite' => 'char(1) NOT NULL',
154
                    'oci' => 'CHAR(1) NOT NULL',
155
                ],
156
            ],
157
            [
158
                Schema::TYPE_CHAR . '(6) CHECK (value LIKE "test%")',
159
                $this->char(6)->check('value LIKE "test%"'),
160
                [
161
                    'mysql' => 'char(6) CHECK (value LIKE "test%")',
162
                    'sqlite' => 'char(6) CHECK (value LIKE "test%")',
163
                ],
164
            ],
165
            [
166
                Schema::TYPE_CHAR . '(6)',
167
                $this->char(6)->unsigned(),
168
                [
169
                    'pgsql' => 'char(6)',
170
                ],
171
            ],
172
            [
173
                Schema::TYPE_CHAR . '(6)',
174
                $this->char(6),
175
                [
176
                    'mysql' => 'char(6)',
177
                    'pgsql' => 'char(6)',
178
                    'sqlite' => 'char(6)',
179
                    'oci' => 'CHAR(6)',
180
                ],
181
            ],
182
            [
183
                Schema::TYPE_CHAR,
184
                $this->char(),
185
                [
186
                    'mysql' => 'char(1)',
187
                    'pgsql' => 'char(1)',
188
                    'sqlite' => 'char(1)',
189
                    'oci' => 'CHAR(1)',
190
                ],
191
            ],
192
            [
193
                Schema::TYPE_DATE . ' NOT NULL',
194
                $this->date()->notNull(),
195
                [
196
                    'pgsql' => 'date NOT NULL',
197
                    'sqlite' => 'date NOT NULL',
198
                    'oci' => 'DATE NOT NULL',
199
                    'sqlsrv' => 'date NOT NULL',
200
                ],
201
            ],
202
            [
203
                Schema::TYPE_DATE,
204
                $this->date(),
205
                [
206
                    'mysql' => 'date',
207
                    'pgsql' => 'date',
208
                    'sqlite' => 'date',
209
                    'oci' => 'DATE',
210
                    'sqlsrv' => 'date',
211
                ],
212
            ],
213
            [
214
                Schema::TYPE_DATETIME . ' NOT NULL',
215
                $this->dateTime()->notNull(),
216
                [
217
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'datetime(0) NOT NULL' : 'datetime NOT NULL',
218
                    'pgsql' => 'timestamp(0) NOT NULL',
219
                    'sqlite' => 'datetime NOT NULL',
220
                    'oci' => 'TIMESTAMP NOT NULL',
221
                    'sqlsrv' => 'datetime NOT NULL',
222
                ],
223
            ],
224
            [
225
                Schema::TYPE_DATETIME,
226
                $this->dateTime(),
227
                [
228
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'datetime(0)' : 'datetime',
229
                    'pgsql' => 'timestamp(0)',
230
                    'sqlite' => 'datetime',
231
                    'oci' => 'TIMESTAMP',
232
                    'sqlsrv' => 'datetime',
233
                ],
234
            ],
235
            [
236
                Schema::TYPE_DECIMAL . ' CHECK (value > 5.6)',
237
                $this->decimal()->check('value > 5.6'),
238
                [
239
                    'mysql' => 'decimal(10,0) CHECK (value > 5.6)',
240
                    'pgsql' => 'numeric(10,0) CHECK (value > 5.6)',
241
                    'sqlite' => 'decimal(10,0) CHECK (value > 5.6)',
242
                    'oci' => 'NUMBER CHECK (value > 5.6)',
243
                    'sqlsrv' => 'decimal(18,0) CHECK (value > 5.6)',
244
                ],
245
            ],
246
            [
247
                Schema::TYPE_DECIMAL . ' NOT NULL',
248
                $this->decimal()->notNull(),
249
                [
250
                    'mysql' => 'decimal(10,0) NOT NULL',
251
                    'pgsql' => 'numeric(10,0) NOT NULL',
252
                    'sqlite' => 'decimal(10,0) NOT NULL',
253
                    'oci' => 'NUMBER NOT NULL',
254
                    'sqlsrv' => 'decimal(18,0) NOT NULL',
255
                ],
256
            ],
257
            [
258
                Schema::TYPE_DECIMAL . '(12,4) CHECK (value > 5.6)',
259
                $this->decimal(12, 4)->check('value > 5.6'),
260
                [
261
                    'mysql' => 'decimal(12,4) CHECK (value > 5.6)',
262
                    'pgsql' => 'numeric(12,4) CHECK (value > 5.6)',
263
                    'sqlite' => 'decimal(12,4) CHECK (value > 5.6)',
264
                    'oci' => 'NUMBER CHECK (value > 5.6)',
265
                    'sqlsrv' => 'decimal(12,4) CHECK (value > 5.6)',
266
                ],
267
            ],
268
            [
269
                Schema::TYPE_DECIMAL . '(12,4)',
270
                $this->decimal(12, 4),
271
                [
272
                    'mysql' => 'decimal(12,4)',
273
                    'pgsql' => 'numeric(12,4)',
274
                    'sqlite' => 'decimal(12,4)',
275
                    'oci' => 'NUMBER',
276
                    'sqlsrv' => 'decimal(12,4)',
277
                ],
278
            ],
279
            [
280
                Schema::TYPE_DECIMAL,
281
                $this->decimal(),
282
                [
283
                    'mysql' => 'decimal(10,0)',
284
                    'pgsql' => 'numeric(10,0)',
285
                    'sqlite' => 'decimal(10,0)',
286
                    'oci' => 'NUMBER',
287
                    'sqlsrv' => 'decimal(18,0)',
288
                ],
289
            ],
290
            [
291
                Schema::TYPE_DOUBLE . ' CHECK (value > 5.6)',
292
                $this->double()->check('value > 5.6'),
293
                [
294
                    'mysql' => 'double CHECK (value > 5.6)',
295
                    'pgsql' => 'double precision CHECK (value > 5.6)',
296
                    'sqlite' => 'double CHECK (value > 5.6)',
297
                    'oci' => 'NUMBER CHECK (value > 5.6)',
298
                    'sqlsrv' => 'float CHECK (value > 5.6)',
299
                ],
300
            ],
301
            [
302
                Schema::TYPE_DOUBLE . ' NOT NULL',
303
                $this->double()->notNull(),
304
                [
305
                    'mysql' => 'double NOT NULL',
306
                    'pgsql' => 'double precision NOT NULL',
307
                    'sqlite' => 'double NOT NULL',
308
                    'oci' => 'NUMBER NOT NULL',
309
                    'sqlsrv' => 'float NOT NULL',
310
                ],
311
            ],
312
            [
313
                Schema::TYPE_DOUBLE . '(16) CHECK (value > 5.6)',
314
                $this->double(16)->check('value > 5.6'),
315
                [
316
                    'mysql' => 'double CHECK (value > 5.6)',
317
                    'pgsql' => 'double precision CHECK (value > 5.6)',
318
                    'sqlite' => 'double CHECK (value > 5.6)',
319
                    'oci' => 'NUMBER CHECK (value > 5.6)',
320
                    'sqlsrv' => 'float CHECK (value > 5.6)',
321
                ],
322
            ],
323
            [
324
                Schema::TYPE_DOUBLE . '(16)',
325
                $this->double(16),
326
                [
327
                    'mysql' => 'double',
328
                    'sqlite' => 'double',
329
                    'oci' => 'NUMBER',
330
                    'sqlsrv' => 'float',
331
                ],
332
            ],
333
            [
334
                Schema::TYPE_DOUBLE,
335
                $this->double(),
336
                [
337
                    'mysql' => 'double',
338
                    'pgsql' => 'double precision',
339
                    'sqlite' => 'double',
340
                    'oci' => 'NUMBER',
341
                    'sqlsrv' => 'float',
342
                ],
343
            ],
344
            [
345
                Schema::TYPE_FLOAT . ' CHECK (value > 5.6)',
346
                $this->float()->check('value > 5.6'),
347
                [
348
                    'mysql' => 'float CHECK (value > 5.6)',
349
                    'pgsql' => 'double precision CHECK (value > 5.6)',
350
                    'sqlite' => 'float CHECK (value > 5.6)',
351
                    'oci' => 'NUMBER CHECK (value > 5.6)',
352
                    'sqlsrv' => 'float CHECK (value > 5.6)',
353
                ],
354
            ],
355
            [
356
                Schema::TYPE_FLOAT . ' NOT NULL',
357
                $this->float()->notNull(),
358
                [
359
                    'mysql' => 'float NOT NULL',
360
                    'pgsql' => 'double precision NOT NULL',
361
                    'sqlite' => 'float NOT NULL',
362
                    'oci' => 'NUMBER NOT NULL',
363
                    'sqlsrv' => 'float NOT NULL',
364
                ],
365
            ],
366
            [
367
                Schema::TYPE_FLOAT . '(16) CHECK (value > 5.6)',
368
                $this->float(16)->check('value > 5.6'),
369
                [
370
                    'mysql' => 'float CHECK (value > 5.6)',
371
                    'pgsql' => 'double precision CHECK (value > 5.6)',
372
                    'sqlite' => 'float CHECK (value > 5.6)',
373
                    'oci' => 'NUMBER CHECK (value > 5.6)',
374
                    'sqlsrv' => 'float CHECK (value > 5.6)',
375
                ],
376
            ],
377
            [
378
                Schema::TYPE_FLOAT . '(16)',
379
                $this->float(16),
380
                [
381
                    'mysql' => 'float',
382
                    'sqlite' => 'float',
383
                    'oci' => 'NUMBER',
384
                    'sqlsrv' => 'float',
385
                ],
386
            ],
387
            [
388
                Schema::TYPE_FLOAT,
389
                $this->float(),
390
                [
391
                    'mysql' => 'float',
392
                    'pgsql' => 'double precision',
393
                    'sqlite' => 'float',
394
                    'oci' => 'NUMBER',
395
                    'sqlsrv' => 'float',
396
                ],
397
            ],
398
            [
399
                Schema::TYPE_INTEGER . ' CHECK (value > 5)',
400
                $this->integer()->check('value > 5'),
401
                [
402
                    'mysql' => 'int(11) CHECK (value > 5)',
403
                    'pgsql' => 'integer CHECK (value > 5)',
404
                    'sqlite' => 'integer CHECK (value > 5)',
405
                    'oci' => 'NUMBER(10) CHECK (value > 5)',
406
                    'sqlsrv' => 'int CHECK (value > 5)',
407
                ],
408
            ],
409
            [
410
                Schema::TYPE_INTEGER . ' NOT NULL',
411
                $this->integer()->notNull(),
412
                [
413
                    'mysql' => 'int(11) NOT NULL',
414
                    'pgsql' => 'integer NOT NULL',
415
                    'sqlite' => 'integer NOT NULL',
416
                    'oci' => 'NUMBER(10) NOT NULL',
417
                    'sqlsrv' => 'int NOT NULL',
418
                ],
419
            ],
420
            [
421
                Schema::TYPE_INTEGER . '(8) CHECK (value > 5)',
422
                $this->integer(8)->check('value > 5'),
423
                [
424
                    'mysql' => 'int(8) CHECK (value > 5)',
425
                    'pgsql' => 'integer CHECK (value > 5)',
426
                    'sqlite' => 'integer CHECK (value > 5)',
427
                    'oci' => 'NUMBER(8) CHECK (value > 5)',
428
                    'sqlsrv' => 'int CHECK (value > 5)',
429
                ],
430
            ],
431
            [
432
                Schema::TYPE_INTEGER . '(8)',
433
                $this->integer(8)->unsigned(),
434
                [
435
                    'pgsql' => 'integer',
436
                ],
437
            ],
438
            [
439
                Schema::TYPE_INTEGER . '(8)',
440
                $this->integer(8),
441
                [
442
                    'mysql' => 'int(8)',
443
                    'pgsql' => 'integer',
444
                    'sqlite' => 'integer',
445
                    'oci' => 'NUMBER(8)',
446
                    'sqlsrv' => 'int',
447
                ],
448
            ],
449
            [
450
                Schema::TYPE_INTEGER,
451
                $this->integer(),
452
                [
453
                    'mysql' => 'int(11)',
454
                    'pgsql' => 'integer',
455
                    'sqlite' => 'integer',
456
                    'oci' => 'NUMBER(10)',
457
                    'sqlsrv' => 'int',
458
                ],
459
            ],
460
            [
461
                Schema::TYPE_MONEY . ' CHECK (value > 0.0)',
462
                $this->money()->check('value > 0.0'),
463
                [
464
                    'mysql' => 'decimal(19,4) CHECK (value > 0.0)',
465
                    'pgsql' => 'numeric(19,4) CHECK (value > 0.0)',
466
                    'sqlite' => 'decimal(19,4) CHECK (value > 0.0)',
467
                    'oci' => 'NUMBER(19,4) CHECK (value > 0.0)',
468
                    'sqlsrv' => 'decimal(19,4) CHECK (value > 0.0)',
469
                ],
470
            ],
471
            [
472
                Schema::TYPE_MONEY . ' NOT NULL',
473
                $this->money()->notNull(),
474
                [
475
                    'mysql' => 'decimal(19,4) NOT NULL',
476
                    'pgsql' => 'numeric(19,4) NOT NULL',
477
                    'sqlite' => 'decimal(19,4) NOT NULL',
478
                    'oci' => 'NUMBER(19,4) NOT NULL',
479
                    'sqlsrv' => 'decimal(19,4) NOT NULL',
480
                ],
481
            ],
482
            [
483
                Schema::TYPE_MONEY . '(16,2) CHECK (value > 0.0)',
484
                $this->money(16, 2)->check('value > 0.0'),
485
                [
486
                    'mysql' => 'decimal(16,2) CHECK (value > 0.0)',
487
                    'pgsql' => 'numeric(16,2) CHECK (value > 0.0)',
488
                    'sqlite' => 'decimal(16,2) CHECK (value > 0.0)',
489
                    'oci' => 'NUMBER(16,2) CHECK (value > 0.0)',
490
                    'sqlsrv' => 'decimal(16,2) CHECK (value > 0.0)',
491
                ],
492
            ],
493
            [
494
                Schema::TYPE_MONEY . '(16,2)',
495
                $this->money(16, 2),
496
                [
497
                    'mysql' => 'decimal(16,2)',
498
                    'pgsql' => 'numeric(16,2)',
499
                    'sqlite' => 'decimal(16,2)',
500
                    'oci' => 'NUMBER(16,2)',
501
                    'sqlsrv' => 'decimal(16,2)',
502
                ],
503
            ],
504
            [
505
                Schema::TYPE_MONEY,
506
                $this->money(),
507
                [
508
                    'mysql' => 'decimal(19,4)',
509
                    'pgsql' => 'numeric(19,4)',
510
                    'sqlite' => 'decimal(19,4)',
511
                    'oci' => 'NUMBER(19,4)',
512
                    'sqlsrv' => 'decimal(19,4)',
513
                ],
514
            ],
515
            [
516
                Schema::TYPE_PK . ' AFTER `col_before`',
517
                $this->primaryKey()->after('col_before'),
518
                [
519
                    'mysql' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY AFTER `col_before`',
520
                ],
521
            ],
522
            [
523
                Schema::TYPE_PK . ' FIRST',
524
                $this->primaryKey()->first(),
525
                [
526
                    'mysql' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST',
527
                ],
528
            ],
529
            [
530
                Schema::TYPE_PK . ' FIRST',
531
                $this->primaryKey()->first()->after('col_before'),
532
                [
533
                    'mysql' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST',
534
                ],
535
                [
536
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL',
537
                ],
538
            ],
539
            [
540
                Schema::TYPE_PK . '(8) AFTER `col_before`',
541
                $this->primaryKey(8)->after('col_before'),
542
                [
543
                    'mysql' => 'int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY AFTER `col_before`',
544
                ],
545
            ],
546
            [
547
                Schema::TYPE_PK . '(8) FIRST',
548
                $this->primaryKey(8)->first(),
549
                [
550
                    'mysql' => 'int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST',
551
                ],
552
            ],
553
            [
554
                Schema::TYPE_PK . '(8) FIRST',
555
                $this->primaryKey(8)->first()->after('col_before'),
556
                [
557
                    'mysql' => 'int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST',
558
                ],
559
            ],
560
            [
561
                Schema::TYPE_PK . " COMMENT 'test' AFTER `col_before`",
562
                $this->primaryKey()->comment('test')->after('col_before'),
563
                [
564
                    'mysql' => "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'test' AFTER `col_before`",
565
                ],
566
            ],
567
            [
568
                Schema::TYPE_PK . " COMMENT 'testing \'quote\'' AFTER `col_before`",
569
                $this->primaryKey()->comment('testing \'quote\'')->after('col_before'),
570
                [
571
                    'mysql' => "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'testing \'quote\''"
572
                        . ' AFTER `col_before`',
573
                ],
574
            ],
575
            [
576
                Schema::TYPE_PK . ' CHECK (value > 5)',
577
                $this->primaryKey()->check('value > 5'),
578
                [
579
                    'mysql' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY CHECK (value > 5)',
580
                    'pgsql' => 'serial NOT NULL PRIMARY KEY CHECK (value > 5)',
581
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL CHECK (value > 5)',
582
                    'oci' => 'NUMBER(10) NOT NULL PRIMARY KEY CHECK (value > 5)',
583
                    'sqlsrv' => 'int IDENTITY PRIMARY KEY CHECK (value > 5)',
584
                ],
585
            ],
586
            [
587
                Schema::TYPE_PK . '(8) CHECK (value > 5)',
588
                $this->primaryKey(8)->check('value > 5'),
589
                [
590
                    'mysql' => 'int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY CHECK (value > 5)',
591
                    'oci' => 'NUMBER(8) NOT NULL PRIMARY KEY CHECK (value > 5)',
592
                ],
593
            ],
594
            [
595
                Schema::TYPE_PK . '(8)',
596
                $this->primaryKey(8),
597
                [
598
                    'mysql' => 'int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY',
599
                    'oci' => 'NUMBER(8) NOT NULL PRIMARY KEY',
600
                ],
601
            ],
602
            [
603
                Schema::TYPE_PK,
604
                $this->primaryKey(),
605
                [
606
                    'mysql' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY',
607
                    'pgsql' => 'serial NOT NULL PRIMARY KEY',
608
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL',
609
                    'oci' => 'NUMBER(10) NOT NULL PRIMARY KEY',
610
                    'sqlsrv' => 'int IDENTITY PRIMARY KEY',
611
                ],
612
            ],
613
            [
614
                Schema::TYPE_TINYINT . '(2)',
615
                $this->tinyInteger(2),
616
                [
617
                    'mysql' => 'tinyint(2)',
618
                    'pgsql' => 'smallint',
619
                    'sqlite' => 'tinyint',
620
                    'oci' => 'NUMBER(2)',
621
                    'sqlsrv' => 'tinyint',
622
                ],
623
            ],
624
            [
625
                Schema::TYPE_TINYINT . ' UNSIGNED',
626
                $this->tinyInteger()->unsigned(),
627
                [
628
                    'mysql' => 'tinyint(3) UNSIGNED',
629
                    'sqlite' => 'tinyint UNSIGNED',
630
                ],
631
            ],
632
            [
633
                Schema::TYPE_TINYINT,
634
                $this->tinyInteger(),
635
                [
636
                    'mysql' => 'tinyint(3)',
637
                    'pgsql' => 'smallint',
638
                    'sqlite' => 'tinyint',
639
                    'oci' => 'NUMBER(3)',
640
                    'sqlsrv' => 'tinyint',
641
                ],
642
            ],
643
            [
644
                Schema::TYPE_SMALLINT . '(8)',
645
                $this->smallInteger(8),
646
                [
647
                    'mysql' => 'smallint(8)',
648
                    'pgsql' => 'smallint',
649
                    'sqlite' => 'smallint',
650
                    'oci' => 'NUMBER(8)',
651
                    'sqlsrv' => 'smallint',
652
                ],
653
            ],
654
            [
655
                Schema::TYPE_SMALLINT,
656
                $this->smallInteger(),
657
                [
658
                    'mysql' => 'smallint(6)',
659
                    'pgsql' => 'smallint',
660
                    'sqlite' => 'smallint',
661
                    'oci' => 'NUMBER(5)',
662
                    'sqlsrv' => 'smallint',
663
                ],
664
            ],
665
            [
666
                Schema::TYPE_STRING . " CHECK (value LIKE 'test%')",
667
                $this->string()->check("value LIKE 'test%'"),
668
                [
669
                    'mysql' => "varchar(255) CHECK (value LIKE 'test%')",
670
                    'sqlite' => "varchar(255) CHECK (value LIKE 'test%')",
671
                    'sqlsrv' => "nvarchar(255) CHECK (value LIKE 'test%')",
672
                ],
673
            ],
674
            [
675
                Schema::TYPE_STRING . ' CHECK (value LIKE \'test%\')',
676
                $this->string()->check('value LIKE \'test%\''),
677
                [
678
                    'pgsql' => 'varchar(255) CHECK (value LIKE \'test%\')',
679
                    'oci' => 'VARCHAR2(255) CHECK (value LIKE \'test%\')',
680
                ],
681
            ],
682
            [
683
                Schema::TYPE_STRING . ' NOT NULL',
684
                $this->string()->notNull(),
685
                [
686
                    'mysql' => 'varchar(255) NOT NULL',
687
                    'pgsql' => 'varchar(255) NOT NULL',
688
                    'sqlite' => 'varchar(255) NOT NULL',
689
                    'oci' => 'VARCHAR2(255) NOT NULL',
690
                    'sqlsrv' => 'nvarchar(255) NOT NULL',
691
                ],
692
            ],
693
            [
694
                Schema::TYPE_STRING . "(32) CHECK (value LIKE 'test%')",
695
                $this->string(32)->check("value LIKE 'test%'"),
696
                [
697
                    'mysql' => "varchar(32) CHECK (value LIKE 'test%')",
698
                    'sqlite' => "varchar(32) CHECK (value LIKE 'test%')",
699
                    'sqlsrv' => "nvarchar(32) CHECK (value LIKE 'test%')",
700
                ],
701
            ],
702
            [
703
                Schema::TYPE_STRING . '(32) CHECK (value LIKE \'test%\')',
704
                $this->string(32)->check('value LIKE \'test%\''),
705
                [
706
                    'pgsql' => 'varchar(32) CHECK (value LIKE \'test%\')',
707
                    'oci' => 'VARCHAR2(32) CHECK (value LIKE \'test%\')',
708
                ],
709
            ],
710
            [
711
                Schema::TYPE_STRING . '(32)',
712
                $this->string(32),
713
                [
714
                    'mysql' => 'varchar(32)',
715
                    'pgsql' => 'varchar(32)',
716
                    'sqlite' => 'varchar(32)',
717
                    'oci' => 'VARCHAR2(32)',
718
                    'sqlsrv' => 'nvarchar(32)',
719
                ],
720
            ],
721
            [
722
                Schema::TYPE_STRING,
723
                $this->string(),
724
                [
725
                    'mysql' => 'varchar(255)',
726
                    'pgsql' => 'varchar(255)',
727
                    'sqlite' => 'varchar(255)',
728
                    'oci' => 'VARCHAR2(255)',
729
                    'sqlsrv' => 'nvarchar(255)',
730
                ],
731
            ],
732
            [
733
                Schema::TYPE_TEXT . " CHECK (value LIKE 'test%')",
734
                $this->text()->check("value LIKE 'test%'"),
735
                [
736
                    'mysql' => "text CHECK (value LIKE 'test%')",
737
                    'sqlite' => "text CHECK (value LIKE 'test%')",
738
                    'sqlsrv' => "nvarchar(max) CHECK (value LIKE 'test%')",
739
                ],
740
            ],
741
            [
742
                Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')',
743
                $this->text()->check('value LIKE \'test%\''),
744
                [
745
                    'pgsql' => 'text CHECK (value LIKE \'test%\')',
746
                    'oci' => 'CLOB CHECK (value LIKE \'test%\')',
747
                ],
748
            ],
749
            [
750
                Schema::TYPE_TEXT . ' NOT NULL',
751
                $this->text()->notNull(),
752
                [
753
                    'mysql' => 'text NOT NULL',
754
                    'pgsql' => 'text NOT NULL',
755
                    'sqlite' => 'text NOT NULL',
756
                    'oci' => 'CLOB NOT NULL',
757
                    'sqlsrv' => 'nvarchar(max) NOT NULL',
758
                ],
759
            ],
760
            [
761
                Schema::TYPE_TEXT . " CHECK (value LIKE 'test%')",
762
                $this->text()->check("value LIKE 'test%'"),
763
                [
764
                    'mysql' => "text CHECK (value LIKE 'test%')",
765
                    'sqlite' => "text CHECK (value LIKE 'test%')",
766
                    'sqlsrv' => "nvarchar(max) CHECK (value LIKE 'test%')",
767
                ],
768
                Schema::TYPE_TEXT . " CHECK (value LIKE 'test%')",
769
            ],
770
            [
771
                Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')',
772
                $this->text()->check('value LIKE \'test%\''),
773
                [
774
                    'pgsql' => 'text CHECK (value LIKE \'test%\')',
775
                    'oci' => 'CLOB CHECK (value LIKE \'test%\')',
776
                ],
777
                Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')',
778
            ],
779
            [
780
                Schema::TYPE_TEXT . ' NOT NULL',
781
                $this->text()->notNull(),
782
                [
783
                    'mysql' => 'text NOT NULL',
784
                    'pgsql' => 'text NOT NULL',
785
                    'sqlite' => 'text NOT NULL',
786
                    'oci' => 'CLOB NOT NULL',
787
                    'sqlsrv' => 'nvarchar(max) NOT NULL',
788
                ],
789
                Schema::TYPE_TEXT . ' NOT NULL',
790
            ],
791
            [
792
                Schema::TYPE_TEXT,
793
                $this->text(),
794
                [
795
                    'mysql' => 'text',
796
                    'pgsql' => 'text',
797
                    'sqlite' => 'text',
798
                    'oci' => 'CLOB',
799
                    'sqlsrv' => 'nvarchar(max)',
800
                ],
801
                Schema::TYPE_TEXT,
802
            ],
803
            [
804
                Schema::TYPE_TEXT,
805
                $this->text(),
806
                [
807
                    'mysql' => 'text',
808
                    'pgsql' => 'text',
809
                    'sqlite' => 'text',
810
                    'oci' => 'CLOB',
811
                    'sqlsrv' => 'nvarchar(max)',
812
                ],
813
            ],
814
            [
815
                Schema::TYPE_TIME . ' NOT NULL',
816
                $this->time()->notNull(),
817
                [
818
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'time(0) NOT NULL' : 'time NOT NULL',
819
                    'pgsql' => 'time(0) NOT NULL',
820
                    'sqlite' => 'time NOT NULL',
821
                    'oci' => 'TIMESTAMP NOT NULL',
822
                    'sqlsrv' => 'time NOT NULL',
823
                ],
824
            ],
825
            [
826
                Schema::TYPE_TIME,
827
                $this->time(),
828
                [
829
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'time(0)' : 'time',
830
                    'pgsql' => 'time(0)',
831
                    'sqlite' => 'time',
832
                    'oci' => 'TIMESTAMP',
833
                    'sqlsrv' => 'time',
834
                ],
835
            ],
836
            [
837
                Schema::TYPE_TIMESTAMP . ' NOT NULL',
838
                $this->timestamp()->notNull(),
839
                [
840
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'timestamp(0) NOT NULL'
841
                        : 'timestamp NOT NULL',
842
                    'pgsql' => 'timestamp(0) NOT NULL',
843
                    'sqlite' => 'timestamp NOT NULL',
844
                    'oci' => 'TIMESTAMP NOT NULL',
845
                    'sqlsrv' => 'datetime NOT NULL',
846
                ],
847
            ],
848
            [
849
                Schema::TYPE_TIMESTAMP . ' NULL DEFAULT NULL',
850
                $this->timestamp()->defaultValue(null),
851
                [
852
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'timestamp(0) NULL DEFAULT NULL'
853
                        : 'timestamp NULL DEFAULT NULL',
854
                    'pgsql' => 'timestamp(0) NULL DEFAULT NULL',
855
                    'sqlite' => 'timestamp NULL DEFAULT NULL',
856
                    'sqlsrv' => 'datetime NULL DEFAULT NULL',
857
                ],
858
            ],
859
            [
860
                Schema::TYPE_TIMESTAMP . '(4)',
861
                $this->timestamp(4),
862
                [
863
                    'pgsql' => 'timestamp(4)',
864
                ],
865
            ],
866
            [
867
                Schema::TYPE_TIMESTAMP,
868
                $this->timestamp(),
869
                [
870
                    /**
871
                     * MySQL has its own TIMESTAMP test realization.
872
                     *
873
                     * {@see QueryBuilderTest::columnTypes()}
874
                     */
875
                    'pgsql' => 'timestamp(0)',
876
                    'sqlite' => 'timestamp',
877
                    'oci' => 'TIMESTAMP',
878
                    'sqlsrv' => 'datetime',
879
                ],
880
            ],
881
            [
882
                Schema::TYPE_UPK,
883
                $this->primaryKey()->unsigned(),
884
                [
885
                    'mysql' => 'int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
886
                    'pgsql' => 'serial NOT NULL PRIMARY KEY',
887
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL',
888
                ],
889
            ],
890
            [
891
                Schema::TYPE_UBIGPK,
892
                $this->bigPrimaryKey()->unsigned(),
893
                [
894
                    'mysql' => 'bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
895
                    'pgsql' => 'bigserial NOT NULL PRIMARY KEY',
896
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL',
897
                ],
898
            ],
899
            [
900
                Schema::TYPE_INTEGER . " COMMENT 'test comment'",
901
                $this->integer()->comment('test comment'),
902
                [
903
                    'mysql' => "int(11) COMMENT 'test comment'",
904
                    'sqlsrv' => 'int',
905
                ],
906
                [
907
                    'sqlsrv' => 'integer',
908
                ],
909
            ],
910
            [
911
                Schema::TYPE_PK . " COMMENT 'test comment'",
912
                $this->primaryKey()->comment('test comment'),
913
                [
914
                    'mysql' => "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'test comment'",
915
                    'sqlsrv' => 'int IDENTITY PRIMARY KEY',
916
                ],
917
                [
918
                    'sqlsrv' => 'pk',
919
                ],
920
            ],
921
            [
922
                Schema::TYPE_PK . ' FIRST',
923
                $this->primaryKey()->first(),
924
                [
925
                    'mysql' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST',
926
                    'sqlsrv' => 'int IDENTITY PRIMARY KEY',
927
                ],
928
                [
929
                    'oci' => 'NUMBER(10) NOT NULL PRIMARY KEY FIRST',
930
                    'sqlsrv' => 'pk',
931
                ],
932
            ],
933
            [
934
                Schema::TYPE_INTEGER . ' FIRST',
935
                $this->integer()->first(),
936
                [
937
                    'mysql' => 'int(11) FIRST',
938
                    'sqlsrv' => 'int',
939
                ],
940
                [
941
                    'oci' => 'NUMBER(10) FIRST',
942
                    'pgsql' => 'integer',
943
                    'sqlsrv' => 'integer',
944
                ],
945
            ],
946
            [
947
                Schema::TYPE_STRING . ' FIRST',
948
                $this->string()->first(),
949
                [
950
                    'mysql' => 'varchar(255) FIRST',
951
                    'sqlsrv' => 'nvarchar(255)',
952
                ],
953
                [
954
                    'oci' => 'VARCHAR2(255) FIRST',
955
                    'sqlsrv' => 'string',
956
                ],
957
            ],
958
            [
959
                Schema::TYPE_INTEGER . ' NOT NULL FIRST',
960
                $this->integer()->append('NOT NULL')->first(),
961
                [
962
                    'mysql' => 'int(11) NOT NULL FIRST',
963
                    'sqlsrv' => 'int NOT NULL',
964
                ],
965
                [
966
                    'oci' => 'NUMBER(10) NOT NULL FIRST',
967
                    'sqlsrv' => 'integer NOT NULL',
968
                ],
969
            ],
970
            [
971
                Schema::TYPE_STRING . ' NOT NULL FIRST',
972
                $this->string()->append('NOT NULL')->first(),
973
                [
974
                    'mysql' => 'varchar(255) NOT NULL FIRST',
975
                    'sqlsrv' => 'nvarchar(255) NOT NULL',
976
                ],
977
                [
978
                    'oci' => 'VARCHAR2(255) NOT NULL FIRST',
979
                    'sqlsrv' => 'string NOT NULL',
980
                ],
981
            ],
982
            [
983
                Schema::TYPE_JSON,
984
                $this->json(),
985
                [
986
                    'pgsql' => 'jsonb',
987
                ],
988
            ],
989
        ];
990
991
        $driverName = $this->db->getName();
992
993
        foreach ($items as $i => $item) {
994
            if (array_key_exists($driverName, $item[2])) {
995
                $item[2] = $item[2][$driverName];
996
                $items[$i] = $item;
997
            } else {
998
                unset($items[$i]);
999
            }
1000
        }
1001
1002
        return array_values($items);
1003
    }
1004
}
1005