Completed
Pull Request — master (#3221)
by Gawain
15:28
created

testRemoveDoctrineTypeFromDefault()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 10
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
1
<?php
2
3
namespace Doctrine\Tests\DBAL\Schema;
4
5
use Doctrine\DBAL\Connection;
6
use Doctrine\DBAL\Platforms\SqlitePlatform;
7
use Doctrine\DBAL\Schema\SqliteSchemaManager;
8
9
class SqliteSchemaManagerTest extends \PHPUnit\Framework\TestCase
10
{
11
    /**
12
     * @dataProvider getDataColumnCollation
13
     *
14
     * @group 2865
15
     */
16
    public function testParseColumnCollation(?string $collation, string $column, string $sql) : void
17
    {
18
        $conn = $this->createMock(Connection::class);
19
        $conn->method('getDatabasePlatform')->willReturn(new SqlitePlatform());
20
21
        $manager = new SqliteSchemaManager($conn);
22
        $ref     = new \ReflectionMethod($manager, 'parseColumnCollationFromSQL');
23
        $ref->setAccessible(true);
24
25
        self::assertSame($collation, $ref->invoke($manager, $column, $sql));
26
    }
27
28
    public function getDataColumnCollation()
29
    {
30
        return [
31
            ['RTRIM', 'a', 'CREATE TABLE "a" ("a" text DEFAULT "aa" COLLATE "RTRIM" NOT NULL)'],
32
            ['utf-8', 'a', 'CREATE TABLE "a" ("b" text UNIQUE NOT NULL COLLATE NOCASE, "a" text DEFAULT "aa" COLLATE "utf-8" NOT NULL)'],
33
            ['NOCASE', 'a', 'CREATE TABLE "a" ("a" text DEFAULT (lower(ltrim(" a") || rtrim("a "))) CHECK ("a") NOT NULL COLLATE NOCASE UNIQUE, "b" text COLLATE RTRIM)'],
34
            [null, 'a', 'CREATE TABLE "a" ("a" text CHECK ("a") NOT NULL, "b" text COLLATE RTRIM)'],
35
            ['RTRIM', 'a"b', 'CREATE TABLE "a" ("a""b" text COLLATE RTRIM)'],
36
            ['BINARY', 'b', 'CREATE TABLE "a" (bb TEXT COLLATE RTRIM, b VARCHAR(42) NOT NULL COLLATE BINARY)'],
37
            ['BINARY', 'b', 'CREATE TABLE "a" (bbb TEXT COLLATE NOCASE, bb TEXT COLLATE RTRIM, b VARCHAR(42) NOT NULL COLLATE BINARY)'],
38
            ['BINARY', 'b', 'CREATE TABLE "a" (b VARCHAR(42) NOT NULL COLLATE BINARY, bb TEXT COLLATE RTRIM)'],
39
            ['utf-8', 'bar#', 'CREATE TABLE dummy_table (id INTEGER NOT NULL, foo VARCHAR(255) COLLATE "utf-8" NOT NULL, "bar#" VARCHAR(255) COLLATE "utf-8" NOT NULL, baz VARCHAR(255) COLLATE "utf-8" NOT NULL, PRIMARY KEY(id))'],
40
            [null,    'bar#', 'CREATE TABLE dummy_table (id INTEGER NOT NULL, foo VARCHAR(255) NOT NULL, "bar#" VARCHAR(255) NOT NULL, baz VARCHAR(255) NOT NULL, PRIMARY KEY(id))'],
41
            ['utf-8', 'baz',  'CREATE TABLE dummy_table (id INTEGER NOT NULL, foo VARCHAR(255) COLLATE "utf-8" NOT NULL, "bar#" INTEGER NOT NULL, baz VARCHAR(255) COLLATE "utf-8" NOT NULL, PRIMARY KEY(id))'],
42
            [null,    'baz',  'CREATE TABLE dummy_table (id INTEGER NOT NULL, foo VARCHAR(255) NOT NULL, "bar#" INTEGER NOT NULL, baz VARCHAR(255) NOT NULL, PRIMARY KEY(id))'],
43
            ['utf-8', 'bar/', 'CREATE TABLE dummy_table (id INTEGER NOT NULL, foo VARCHAR(255) COLLATE "utf-8" NOT NULL, "bar/" VARCHAR(255) COLLATE "utf-8" NOT NULL, baz VARCHAR(255) COLLATE "utf-8" NOT NULL, PRIMARY KEY(id))'],
44
            [null,    'bar/', 'CREATE TABLE dummy_table (id INTEGER NOT NULL, foo VARCHAR(255) NOT NULL, "bar/" VARCHAR(255) NOT NULL, baz VARCHAR(255) NOT NULL, PRIMARY KEY(id))'],
45
            ['utf-8', 'baz',  'CREATE TABLE dummy_table (id INTEGER NOT NULL, foo VARCHAR(255) COLLATE "utf-8" NOT NULL, "bar/" INTEGER NOT NULL, baz VARCHAR(255) COLLATE "utf-8" NOT NULL, PRIMARY KEY(id))'],
46
            [null,    'baz',  'CREATE TABLE dummy_table (id INTEGER NOT NULL, foo VARCHAR(255) NOT NULL, "bar/" INTEGER NOT NULL, baz VARCHAR(255) NOT NULL, PRIMARY KEY(id))'],
47
        ];
48
    }
49
50
    /**
51
     * @dataProvider getDataColumnComment
52
     *
53
     * @group 2865
54
     */
55
    public function testParseColumnCommentFromSQL(?string $comment, string $column, string $sql) : void
56
    {
57
        $conn = $this->createMock(Connection::class);
58
        $conn->method('getDatabasePlatform')->willReturn(new SqlitePlatform());
59
60
        $manager = new SqliteSchemaManager($conn);
61
        $ref     = new \ReflectionMethod($manager, 'parseColumnCommentFromSQL');
62
        $ref->setAccessible(true);
63
64
        self::assertSame($comment, $ref->invoke($manager, $column, $sql));
65
    }
66
67
    public function getDataColumnComment()
68
    {
69
        return [
70
            'Single column with no comment' => [
71
                null, 'a', 'CREATE TABLE "a" ("a" TEXT DEFAULT "a" COLLATE RTRIM)',
72
            ],
73
            'Single column with type comment' => [
74
                '(DC2Type:x)', 'a', 'CREATE TABLE "a" ("a" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
75
)',
76
            ],
77
            'Multiple similar columns with type comment 1' => [
78
                null, 'b', 'CREATE TABLE "a" (a TEXT COLLATE RTRIM, "b" TEXT DEFAULT "a" COLLATE RTRIM, "bb" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
79
)',
80
            ],
81
            'Multiple similar columns with type comment 2' => [
82
                '(DC2Type:x)', 'b', 'CREATE TABLE "a" (a TEXT COLLATE RTRIM, "bb" TEXT DEFAULT "a" COLLATE RTRIM, "b" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
83
)',
84
            ],
85
            'Multiple similar columns on different lines, with type comment 1' => [
86
                null, 'bb', 'CREATE TABLE "a" (a TEXT COLLATE RTRIM, "b" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
87
, "bb" TEXT DEFAULT "a" COLLATE RTRIM',
88
            ],
89
            'Multiple similar columns on different lines, with type comment 2' => [
90
                '(DC2Type:x)', 'bb', 'CREATE TABLE "a" (a TEXT COLLATE RTRIM, "bb" CLOB DEFAULT NULL COLLATE BINARY --(DC2Type:x)
91
, "b" TEXT DEFAULT "a" COLLATE RTRIM',
92
            ],
93
            'Column with numeric but no comment 1' => [
94
                null, 'a', 'CREATE TABLE "a" ("a" NUMERIC(10, 0) NOT NULL, "b" CLOB NOT NULL --(DC2Type:array)
95
, "c" CHAR(36) NOT NULL --(DC2Type:guid)
96
)',
97
            ],
98
            'Column with numeric but no comment 2' => [
99
                null, 'a', 'CREATE TABLE "b" ("a" NUMERIC(10, 0) NOT NULL, "b" CLOB NOT NULL --(DC2Type:array)
100
, "c" CHAR(36) NOT NULL --(DC2Type:guid)
101
)',
102
            ],
103
            'Column with numeric but no comment 3' => [
104
                '(DC2Type:guid)', 'c', 'CREATE TABLE "b" ("a" NUMERIC(10, 0) NOT NULL, "b" CLOB NOT NULL --(DC2Type:array)
105
, "c" CHAR(36) NOT NULL --(DC2Type:guid)
106
)',
107
            ],
108
            'Column with numeric but no comment 4' => [
109
                '(DC2Type:array)',
110
                'b',
111
                'CREATE TABLE "b" ("a" NUMERIC(10, 0) NOT NULL,
112
                    "b" CLOB NOT NULL, --(DC2Type:array)
113
                    "c" CHAR(36) NOT NULL --(DC2Type:guid)
114
                )',
115
            ],
116
            'Column "bar", select "bar" with no comment' => [
117
                null,
118
                'bar',
119
                'CREATE TABLE dummy_table (
120
                    id INTEGER NOT NULL,
121
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
122
                    "bar" VARCHAR(255) COLLATE "utf-8" NOT NULL,
123
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL,
124
                    PRIMARY KEY(id)
125
                )',
126
            ],
127
            'Column "bar", select "bar" with type comment' => [
128
                '(DC2Type:x)',
129
                'bar',
130
                'CREATE TABLE dummy_table (
131
                    id INTEGER NOT NULL,
132
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
133
                    "bar" VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:x)
134
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:y)
135
                    PRIMARY KEY(id)
136
                )',
137
            ],
138
            'Column "bar", select "baz" with no comment' => [
139
                null,
140
                'baz',
141
                'CREATE TABLE dummy_table (
142
                    id INTEGER NOT NULL,
143
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
144
                    "bar" INTEGER NOT NULL,
145
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL,
146
                    PRIMARY KEY(id)
147
                )',
148
            ],
149
            'Column "bar", select "baz" with type comment' => [
150
                '(DC2Type:y)',
151
                'baz',
152
                'CREATE TABLE dummy_table (
153
                    id INTEGER NOT NULL,
154
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
155
                    "bar" INTEGER NOT NULL, --(DC2Type:x)
156
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:y)
157
                    PRIMARY KEY(id)
158
                )',
159
            ],
160
161
            'Column "bar#", select "bar#" with no comment' => [
162
                null,
163
                'bar#',
164
                'CREATE TABLE dummy_table (
165
                    id INTEGER NOT NULL,
166
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
167
                    "bar#" VARCHAR(255) COLLATE "utf-8" NOT NULL,
168
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL,
169
                    PRIMARY KEY(id)
170
                )',
171
            ],
172
            'Column "bar#", select "bar#" with type comment' => [
173
                '(DC2Type:x)',
174
                'bar#',
175
                'CREATE TABLE dummy_table (
176
                    id INTEGER NOT NULL,
177
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
178
                    "bar#" VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:x)
179
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:y)
180
                    PRIMARY KEY(id)
181
                )',
182
            ],
183
            'Column "bar#", select "baz" with no comment' => [
184
                null,
185
                'baz',
186
                'CREATE TABLE dummy_table (
187
                    id INTEGER NOT NULL,
188
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
189
                    "bar#" INTEGER NOT NULL,
190
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL,
191
                    PRIMARY KEY(id)
192
                )',
193
            ],
194
            'Column "bar#", select "baz" with type comment' => [
195
                '(DC2Type:y)',
196
                'baz',
197
                'CREATE TABLE dummy_table (
198
                    id INTEGER NOT NULL,
199
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
200
                    "bar#" INTEGER NOT NULL, --(DC2Type:x)
201
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:y)
202
                    PRIMARY KEY(id)
203
                )',
204
            ],
205
206
            'Column "bar/", select "bar/" with no comment' => [
207
                null,
208
                'bar/',
209
                'CREATE TABLE dummy_table (
210
                    id INTEGER NOT NULL,
211
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
212
                    "bar/" VARCHAR(255) COLLATE "utf-8" NOT NULL,
213
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL,
214
                    PRIMARY KEY(id)
215
                    )',
216
            ],
217
            'Column "bar/", select "bar/" with type comment' => [
218
                '(DC2Type:x)',
219
                'bar/',
220
                'CREATE TABLE dummy_table (
221
                    id INTEGER NOT NULL,
222
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
223
                    "bar/" VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:x)
224
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:y)
225
                    PRIMARY KEY(id)
226
                )',
227
            ],
228
            'Column "bar/", select "baz" with no comment' => [
229
                null,
230
                'baz',
231
                'CREATE TABLE dummy_table (
232
                    id INTEGER NOT NULL,
233
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
234
                    "bar/" INTEGER NOT NULL,
235
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL,
236
                    PRIMARY KEY(id)
237
                )',
238
            ],
239
            'Column "bar/", select "baz" with type comment' => [
240
                '(DC2Type:y)',
241
                'baz',
242
                'CREATE TABLE dummy_table (
243
                    id INTEGER NOT NULL,
244
                    foo VARCHAR(255) COLLATE "utf-8" NOT NULL,
245
                    "bar/" INTEGER COLLATE "utf-8" NOT NULL, --(DC2Type:x)
246
                    baz VARCHAR(255) COLLATE "utf-8" NOT NULL, --(DC2Type:y)
247
                    PRIMARY KEY(id)
248
                )',
249
            ],
250
        ];
251
    }
252
    /**
253
     * @dataProvider getDoctrineTypeDefault
254
     *
255
     * @group 2865
256
     */
257
    public function testRemoveDoctrineTypeFromDefault(?string $default, string $sql) : void
258
    {
259
        $conn = $this->createMock(Connection::class);
260
        $conn->method('getDatabasePlatform')->willReturn(new SqlitePlatform());
261
262
        $manager = new SqliteSchemaManager($conn);
263
        $ref     = new \ReflectionMethod($manager, 'removeDoctrineTypeFromDefault');
264
        $ref->setAccessible(true);
265
266
        self::assertSame($default, $ref->invoke($manager, $sql));
267
    }
268
269
    public function getDoctrineTypeDefault()
270
    {
271
        return [
272
            'No default'   => [null, '--(DC2Type:x)'],
273
            'Null default' => ['NULL', 'NULL --(DC2Type:x)'],
274
        ];
275
    }
276
}
277