Passed
Pull Request — master (#380)
by Wilmer
13:12
created

ColumnTypesProvider   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 990
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 572
dl 0
loc 990
rs 10
c 0
b 0
f 0
wmc 9

1 Method

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