Passed
Branch add-more-test-schema (1ebac6)
by Wilmer
02:54
created

ColumnTypes::getColumnTypes()   C

Complexity

Conditions 9
Paths 192

Size

Total Lines 857
Code Lines 511

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 9
eloc 511
c 1
b 0
f 0
nc 192
nop 0
dl 0
loc 857
rs 5.8311

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

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\Migration\AbstractMigrationBuilder;
9
use Yiisoft\Db\Schema\Schema;
10
11
use function array_key_exists;
12
use function array_values;
13
14
final class ColumnTypes extends AbstractMigrationBuilder
15
{
16
    public function __construct(private ConnectionPDOInterface $db)
17
    {
18
        parent::__construct($this->db->getSchema());
19
    }
20
21
    /**
22
     * This is not used as a dataprovider for testGetColumnType to speed up the test when used as dataprovider every
23
     * single line will cause a reconnect with the database which is not needed here.
24
     */
25
    public function getColumnTypes(): array
26
    {
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 . ' CHECK (value > 5)',
517
                $this->primaryKey()->check('value > 5'),
518
                [
519
                    'mysql' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY CHECK (value > 5)',
520
                    'pgsql' => 'serial NOT NULL PRIMARY KEY CHECK (value > 5)',
521
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL CHECK (value > 5)',
522
                    'oci' => 'NUMBER(10) NOT NULL PRIMARY KEY CHECK (value > 5)',
523
                    'sqlsrv' => 'int IDENTITY PRIMARY KEY CHECK (value > 5)',
524
                ],
525
            ],
526
            [
527
                Schema::TYPE_PK . '(8) CHECK (value > 5)',
528
                $this->primaryKey(8)->check('value > 5'),
529
                [
530
                    'mysql' => 'int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY CHECK (value > 5)',
531
                    'oci' => 'NUMBER(8) NOT NULL PRIMARY KEY CHECK (value > 5)',
532
                ],
533
            ],
534
            [
535
                Schema::TYPE_PK . '(8)',
536
                $this->primaryKey(8),
537
                [
538
                    'mysql' => 'int(8) NOT NULL AUTO_INCREMENT PRIMARY KEY',
539
                    'oci' => 'NUMBER(8) NOT NULL PRIMARY KEY',
540
                ],
541
            ],
542
            [
543
                Schema::TYPE_PK,
544
                $this->primaryKey(),
545
                [
546
                    'mysql' => 'int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY',
547
                    'pgsql' => 'serial NOT NULL PRIMARY KEY',
548
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL',
549
                    'oci' => 'NUMBER(10) NOT NULL PRIMARY KEY',
550
                    'sqlsrv' => 'int IDENTITY PRIMARY KEY',
551
                ],
552
            ],
553
            [
554
                Schema::TYPE_TINYINT . '(2)',
555
                $this->tinyInteger(2),
556
                [
557
                    'mysql' => 'tinyint(2)',
558
                    'pgsql' => 'smallint',
559
                    'sqlite' => 'tinyint',
560
                    'oci' => 'NUMBER(2)',
561
                    'sqlsrv' => 'tinyint',
562
                ],
563
            ],
564
            [
565
                Schema::TYPE_TINYINT . ' UNSIGNED',
566
                $this->tinyInteger()->unsigned(),
567
                [
568
                    'mysql' => 'tinyint(3) UNSIGNED',
569
                    'sqlite' => 'tinyint UNSIGNED',
570
                ],
571
            ],
572
            [
573
                Schema::TYPE_TINYINT,
574
                $this->tinyInteger(),
575
                [
576
                    'mysql' => 'tinyint(3)',
577
                    'pgsql' => 'smallint',
578
                    'sqlite' => 'tinyint',
579
                    'oci' => 'NUMBER(3)',
580
                    'sqlsrv' => 'tinyint',
581
                ],
582
            ],
583
            [
584
                Schema::TYPE_SMALLINT . '(8)',
585
                $this->smallInteger(8),
586
                [
587
                    'mysql' => 'smallint(8)',
588
                    'pgsql' => 'smallint',
589
                    'sqlite' => 'smallint',
590
                    'oci' => 'NUMBER(8)',
591
                    'sqlsrv' => 'smallint',
592
                ],
593
            ],
594
            [
595
                Schema::TYPE_SMALLINT,
596
                $this->smallInteger(),
597
                [
598
                    'mysql' => 'smallint(6)',
599
                    'pgsql' => 'smallint',
600
                    'sqlite' => 'smallint',
601
                    'oci' => 'NUMBER(5)',
602
                    'sqlsrv' => 'smallint',
603
                ],
604
            ],
605
            [
606
                Schema::TYPE_STRING . " CHECK (value LIKE 'test%')",
607
                $this->string()->check("value LIKE 'test%'"),
608
                [
609
                    'mysql' => "varchar(255) CHECK (value LIKE 'test%')",
610
                    'sqlite' => "varchar(255) CHECK (value LIKE 'test%')",
611
                    'sqlsrv' => "nvarchar(255) CHECK (value LIKE 'test%')",
612
                ],
613
            ],
614
            [
615
                Schema::TYPE_STRING . ' CHECK (value LIKE \'test%\')',
616
                $this->string()->check('value LIKE \'test%\''),
617
                [
618
                    'pgsql' => 'varchar(255) CHECK (value LIKE \'test%\')',
619
                    'oci' => 'VARCHAR2(255) CHECK (value LIKE \'test%\')',
620
                ],
621
            ],
622
            [
623
                Schema::TYPE_STRING . ' NOT NULL',
624
                $this->string()->notNull(),
625
                [
626
                    'mysql' => 'varchar(255) NOT NULL',
627
                    'pgsql' => 'varchar(255) NOT NULL',
628
                    'sqlite' => 'varchar(255) NOT NULL',
629
                    'oci' => 'VARCHAR2(255) NOT NULL',
630
                    'sqlsrv' => 'nvarchar(255) NOT NULL',
631
                ],
632
            ],
633
            [
634
                Schema::TYPE_STRING . "(32) CHECK (value LIKE 'test%')",
635
                $this->string(32)->check("value LIKE 'test%'"),
636
                [
637
                    'mysql' => "varchar(32) CHECK (value LIKE 'test%')",
638
                    'sqlite' => "varchar(32) CHECK (value LIKE 'test%')",
639
                    'sqlsrv' => "nvarchar(32) CHECK (value LIKE 'test%')",
640
                ],
641
            ],
642
            [
643
                Schema::TYPE_STRING . '(32) CHECK (value LIKE \'test%\')',
644
                $this->string(32)->check('value LIKE \'test%\''),
645
                [
646
                    'pgsql' => 'varchar(32) CHECK (value LIKE \'test%\')',
647
                    'oci' => 'VARCHAR2(32) CHECK (value LIKE \'test%\')',
648
                ],
649
            ],
650
            [
651
                Schema::TYPE_STRING . '(32)',
652
                $this->string(32),
653
                [
654
                    'mysql' => 'varchar(32)',
655
                    'pgsql' => 'varchar(32)',
656
                    'sqlite' => 'varchar(32)',
657
                    'oci' => 'VARCHAR2(32)',
658
                    'sqlsrv' => 'nvarchar(32)',
659
                ],
660
            ],
661
            [
662
                Schema::TYPE_STRING,
663
                $this->string(),
664
                [
665
                    'mysql' => 'varchar(255)',
666
                    'pgsql' => 'varchar(255)',
667
                    'sqlite' => 'varchar(255)',
668
                    'oci' => 'VARCHAR2(255)',
669
                    'sqlsrv' => 'nvarchar(255)',
670
                ],
671
            ],
672
            [
673
                Schema::TYPE_TEXT . " CHECK (value LIKE 'test%')",
674
                $this->text()->check("value LIKE 'test%'"),
675
                [
676
                    'mysql' => "text CHECK (value LIKE 'test%')",
677
                    'sqlite' => "text CHECK (value LIKE 'test%')",
678
                    'sqlsrv' => "nvarchar(max) CHECK (value LIKE 'test%')",
679
                ],
680
            ],
681
            [
682
                Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')',
683
                $this->text()->check('value LIKE \'test%\''),
684
                [
685
                    'pgsql' => 'text CHECK (value LIKE \'test%\')',
686
                    'oci' => 'CLOB CHECK (value LIKE \'test%\')',
687
                ],
688
            ],
689
            [
690
                Schema::TYPE_TEXT . ' NOT NULL',
691
                $this->text()->notNull(),
692
                [
693
                    'mysql' => 'text NOT NULL',
694
                    'pgsql' => 'text NOT NULL',
695
                    'sqlite' => 'text NOT NULL',
696
                    'oci' => 'CLOB NOT NULL',
697
                    'sqlsrv' => 'nvarchar(max) NOT NULL',
698
                ],
699
            ],
700
            [
701
                Schema::TYPE_TEXT . " CHECK (value LIKE 'test%')",
702
                $this->text()->check("value LIKE 'test%'"),
703
                [
704
                    'mysql' => "text CHECK (value LIKE 'test%')",
705
                    'sqlite' => "text CHECK (value LIKE 'test%')",
706
                    'sqlsrv' => "nvarchar(max) CHECK (value LIKE 'test%')",
707
                ],
708
                Schema::TYPE_TEXT . " CHECK (value LIKE 'test%')",
709
            ],
710
            [
711
                Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')',
712
                $this->text()->check('value LIKE \'test%\''),
713
                [
714
                    'pgsql' => 'text CHECK (value LIKE \'test%\')',
715
                    'oci' => 'CLOB CHECK (value LIKE \'test%\')',
716
                ],
717
                Schema::TYPE_TEXT . ' CHECK (value LIKE \'test%\')',
718
            ],
719
            [
720
                Schema::TYPE_TEXT . ' NOT NULL',
721
                $this->text()->notNull(),
722
                [
723
                    'mysql' => 'text NOT NULL',
724
                    'pgsql' => 'text NOT NULL',
725
                    'sqlite' => 'text NOT NULL',
726
                    'oci' => 'CLOB NOT NULL',
727
                    'sqlsrv' => 'nvarchar(max) NOT NULL',
728
                ],
729
                Schema::TYPE_TEXT . ' NOT NULL',
730
            ],
731
            [
732
                Schema::TYPE_TEXT,
733
                $this->text(),
734
                [
735
                    'mysql' => 'text',
736
                    'pgsql' => 'text',
737
                    'sqlite' => 'text',
738
                    'oci' => 'CLOB',
739
                    'sqlsrv' => 'nvarchar(max)',
740
                ],
741
                Schema::TYPE_TEXT,
742
            ],
743
            [
744
                Schema::TYPE_TEXT,
745
                $this->text(),
746
                [
747
                    'mysql' => 'text',
748
                    'pgsql' => 'text',
749
                    'sqlite' => 'text',
750
                    'oci' => 'CLOB',
751
                    'sqlsrv' => 'nvarchar(max)',
752
                ],
753
            ],
754
            [
755
                Schema::TYPE_TIME . ' NOT NULL',
756
                $this->time()->notNull(),
757
                [
758
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'time(0) NOT NULL' : 'time NOT NULL',
759
                    'pgsql' => 'time(0) NOT NULL',
760
                    'sqlite' => 'time NOT NULL',
761
                    'oci' => 'TIMESTAMP NOT NULL',
762
                    'sqlsrv' => 'time NOT NULL',
763
                ],
764
            ],
765
            [
766
                Schema::TYPE_TIME,
767
                $this->time(),
768
                [
769
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'time(0)' : 'time',
770
                    'pgsql' => 'time(0)',
771
                    'sqlite' => 'time',
772
                    'oci' => 'TIMESTAMP',
773
                    'sqlsrv' => 'time',
774
                ],
775
            ],
776
            [
777
                Schema::TYPE_TIMESTAMP . ' NOT NULL',
778
                $this->timestamp()->notNull(),
779
                [
780
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'timestamp(0) NOT NULL'
781
                        : 'timestamp NOT NULL',
782
                    'pgsql' => 'timestamp(0) NOT NULL',
783
                    'sqlite' => 'timestamp NOT NULL',
784
                    'oci' => 'TIMESTAMP NOT NULL',
785
                    'sqlsrv' => 'datetime NOT NULL',
786
                ],
787
            ],
788
            [
789
                Schema::TYPE_TIMESTAMP . ' NULL DEFAULT NULL',
790
                $this->timestamp()->defaultValue(null),
791
                [
792
                    'mysql' => version_compare($version, '5.6.4', '>=') ? 'timestamp(0) NULL DEFAULT NULL'
793
                        : 'timestamp NULL DEFAULT NULL',
794
                    'pgsql' => 'timestamp(0) NULL DEFAULT NULL',
795
                    'sqlite' => 'timestamp NULL DEFAULT NULL',
796
                    'sqlsrv' => 'datetime NULL DEFAULT NULL',
797
                ],
798
            ],
799
            [
800
                Schema::TYPE_TIMESTAMP . '(4)',
801
                $this->timestamp(4),
802
                [
803
                    'pgsql' => 'timestamp(4)',
804
                ],
805
            ],
806
            [
807
                Schema::TYPE_TIMESTAMP,
808
                $this->timestamp(),
809
                [
810
                    /**
811
                     * MySQL has its own TIMESTAMP test realization.
812
                     *
813
                     * {@see QueryBuilderTest::columnTypes()}
814
                     */
815
                    'pgsql' => 'timestamp(0)',
816
                    'sqlite' => 'timestamp',
817
                    'oci' => 'TIMESTAMP',
818
                    'sqlsrv' => 'datetime',
819
                ],
820
            ],
821
            [
822
                Schema::TYPE_UPK,
823
                $this->primaryKey()->unsigned(),
824
                [
825
                    'mysql' => 'int(10) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
826
                    'pgsql' => 'serial NOT NULL PRIMARY KEY',
827
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL',
828
                ],
829
            ],
830
            [
831
                Schema::TYPE_UBIGPK,
832
                $this->bigPrimaryKey()->unsigned(),
833
                [
834
                    'mysql' => 'bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY',
835
                    'pgsql' => 'bigserial NOT NULL PRIMARY KEY',
836
                    'sqlite' => 'integer PRIMARY KEY AUTOINCREMENT NOT NULL',
837
                ],
838
            ],
839
            [
840
                Schema::TYPE_INTEGER . " COMMENT 'test comment'",
841
                $this->integer()->comment('test comment'),
842
                [
843
                    'mysql' => "int(11) COMMENT 'test comment'",
844
                    'sqlsrv' => 'int',
845
                ],
846
                [
847
                    'sqlsrv' => 'integer',
848
                ],
849
            ],
850
            [
851
                Schema::TYPE_PK . " COMMENT 'test comment'",
852
                $this->primaryKey()->comment('test comment'),
853
                [
854
                    'mysql' => "int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY COMMENT 'test comment'",
855
                    'sqlsrv' => 'int IDENTITY PRIMARY KEY',
856
                ],
857
                [
858
                    'sqlsrv' => 'pk',
859
                ],
860
            ],
861
            [
862
                Schema::TYPE_JSON,
863
                $this->json(),
864
                [
865
                    'pgsql' => 'jsonb',
866
                ],
867
            ],
868
        ];
869
870
        $driverName = $this->db->getName();
871
872
        foreach ($items as $i => $item) {
873
            if (array_key_exists($driverName, $item[2])) {
874
                $item[2] = $item[2][$driverName];
875
                $items[$i] = $item;
876
            } else {
877
                unset($items[$i]);
878
            }
879
        }
880
881
        return array_values($items);
882
    }
883
}
884