2 declare(strict_types = 1);
23 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
47 'PRIMARY KEY (single column)' => [
48 'PRIMARY KEY (`aField`)',
50 [[
'aField', 0,
null]],
58 'PRIMARY KEY (multiple columns)' => [
59 'PRIMARY KEY (`aField`, `bField`(199), cField)',
61 [[
'aField', 0,
null], [
'bField', 199,
null], [
'cField', 0,
null]],
69 'PRIMARY KEY (index type)' => [
70 'PRIMARY KEY USING HASH (`aField`)',
72 [[
'aField', 0,
null]],
80 'PRIMARY KEY (index options)' => [
81 "PRIMARY KEY (`aField`, bField(199)) KEY_BLOCK_SIZE 4 WITH PARSER `something` COMMENT 'aTest'",
83 [[
'aField', 0,
null], [
'bField', 199,
null]],
90 'key_block_size' => 4,
95 'PRIMARY KEY (all parts)' => [
96 "PRIMARY KEY USING BTREE (`aField`, bField(199)) KEY_BLOCK_SIZE 4 COMMENT 'aTest'",
98 [[
'aField', 0,
null], [
'bField', 199,
null]],
105 'key_block_size' => 4,
106 'comment' =>
'aTest',
109 'INDEX (single column)' => [
110 'INDEX (`aField`(24))',
112 [[
'aField', 24,
null]],
120 'INDEX (multiple columns)' => [
121 'INDEX (`aField`(24), bField)',
123 [[
'aField', 24,
null], [
'bField', 0,
null]],
131 'INDEX (index name)' => [
132 'INDEX aIndex (`aField`)',
134 [[
'aField', 0,
null]],
142 'INDEX (index type)' => [
143 'INDEX USING HASH (`aField`)',
145 [[
'aField', 0,
null]],
153 'INDEX (index name & type)' => [
154 'INDEX `aIndex` USING BTREE (`aField`)',
156 [[
'aField', 0,
null]],
164 'INDEX (all parts)' => [
165 "INDEX `aIndex` USING BTREE (`aField`) COMMENT 'aComment'",
167 [[
'aField', 0,
null]],
174 'comment' =>
'aComment',
177 'KEY (single column)' => [
178 'KEY (`aField`(24))',
180 [[
'aField', 24,
null]],
188 'KEY (multiple columns)' => [
189 'KEY (`aField`(24), bField)',
191 [[
'aField', 24,
null], [
'bField', 0,
null]],
199 'KEY (index name)' => [
200 'KEY aIndex (`aField`)',
202 [[
'aField', 0,
null]],
210 'KEY (index type)' => [
211 'KEY USING BTREE (aField(96))',
213 [[
'aField', 96,
null]],
221 'KEY (index name & type)' => [
222 'KEY `aIndex` USING HASH (`aField`)',
224 [[
'aField', 0,
null]],
232 'KEY (all parts)' => [
233 'KEY `aIndex` USING HASH (`aField`) WITH PARSER aParser',
235 [[
'aField', 0,
null]],
245 'UNIQUE (single column)' => [
248 [[
'aField', 0,
null]],
256 'UNIQUE (multiple columns)' => [
257 'UNIQUE (`aField`, bField, cField(40))',
259 [[
'aField', 0,
null], [
'bField', 0,
null], [
'cField', 40,
null]],
267 'UNIQUE INDEX (single column)' => [
268 'UNIQUE INDEX (`aField`)',
270 [[
'aField', 0,
null]],
278 'UNIQUE KEY (multiple columns)' => [
279 'UNIQUE KEY (`aField`, bField, cField(40))',
281 [[
'aField', 0,
null], [
'bField', 0,
null], [
'cField', 40,
null]],
289 'UNIQUE (index name)' => [
290 'UNIQUE aIndex (`aField`)',
292 [[
'aField', 0,
null]],
300 'UNIQUE (index type)' => [
301 'UNIQUE USING BTREE (`aField`)',
303 [[
'aField', 0,
null]],
311 'UNIQUE (index name & type)' => [
312 'UNIQUE `aIndex` USING BTREE (`aField`)',
314 [[
'aField', 0,
null]],
322 'UNIQUE (all parts)' => [
323 'UNIQUE `aIndex` USING BTREE (`aField`) KEY_BLOCK_SIZE = 24',
325 [[
'aField', 0,
null]],
332 'key_block_size' => 24,
335 'FULLTEXT (single column)' => [
336 'FULLTEXT (`aField`)',
338 [[
'aField', 0,
null]],
346 'FULLTEXT (multiple columns)' => [
347 'FULLTEXT (`aField`, `bField`)',
349 [[
'aField', 0,
null], [
'bField', 0,
null]],
357 'FULLTEXT (index name)' => [
358 'FULLTEXT aIndex (`aField`, `bField`)',
360 [[
'aField', 0,
null], [
'bField', 0,
null]],
368 'FULLTEXT (all parts)' => [
369 "FULLTEXT `aIndex` (`aField`, `bField`) COMMENT 'aComment'",
371 [[
'aField', 0,
null], [
'bField', 0,
null]],
378 'comment' =>
'aComment',
381 'FULLTEXT INDEX (single column)' => [
382 'FULLTEXT INDEX (`aField`)',
384 [[
'aField', 0,
null]],
392 'FULLTEXT INDEX (multiple columns)' => [
393 'FULLTEXT INDEX (`aField`, bField(19))',
395 [[
'aField', 0,
null], [
'bField', 19,
null]],
403 'FULLTEXT KEY (single column)' => [
404 'FULLTEXT KEY (aField(20))',
406 [[
'aField', 20,
null]],
414 'FULLTEXT KEY (multiple columns)' => [
415 'FULLTEXT KEY (aField(20), `bField`)',
417 [[
'aField', 20,
null], [
'bField', 0,
null]],
425 'SPATIAL (single column)' => [
426 'SPATIAL (`aField`)',
428 [[
'aField', 0,
null]],
436 'SPATIAL (multiple columns)' => [
437 'SPATIAL (`aField`, `bField`)',
439 [[
'aField', 0,
null], [
'bField', 0,
null]],
447 'SPATIAL (index name)' => [
448 'SPATIAL `aIndex` (`aField`, `bField`)',
450 [[
'aField', 0,
null], [
'bField', 0,
null]],
458 'SPATIAL (all parts)' => [
459 "SPATIAL `aIndex` (`aField`, `bField`) WITH PARSER aParser COMMENT 'aComment'",
461 [[
'aField', 0,
null], [
'bField', 0,
null]],
469 'comment' =>
'aComment',
472 'SPATIAL INDEX (single column)' => [
473 'SPATIAL INDEX (`aField`)',
475 [[
'aField', 0,
null]],
483 'SPATIAL INDEX (multiple columns)' => [
484 'SPATIAL INDEX (aField, bField)',
486 [[
'aField', 0,
null], [
'bField', 0,
null]],
494 'SPATIAL KEY (single column)' => [
495 'SPATIAL KEY (aField)',
497 [[
'aField', 0,
null]],
505 'SPATIAL KEY (multiple columns)' => [
506 'SPATIAL KEY (aField, bField(240))',
508 [[
'aField', 0,
null], [
'bField', 240,
null]],
533 string $indexDefinition,
543 $statement = sprintf(
'CREATE TABLE `aTable`(`aField` INT(11), %s);', $indexDefinition);
546 $this->assertInstanceOf(CreateIndexDefinitionItem::class, $subject);
547 $this->assertSame($indexName, $subject->indexName->schemaObjectName);
548 $this->assertSame($isPrimary, $subject->isPrimary);
549 $this->assertSame($isUnique, $subject->isUnique);
550 $this->assertSame($isFulltext, $subject->isFulltext);
551 $this->assertSame($isSpatial, $subject->isSpatial);
552 $this->assertSame($indexType, $subject->indexType);
553 $this->assertEquals($indexOptions, $subject->options);
555 foreach ($indexColumns as $index => $column) {
556 $this->assertSame($column[0], $subject->columnNames[$index]->columnName->schemaObjectName);
557 $this->assertSame($column[1], $subject->columnNames[$index]->length);
558 $this->assertSame($column[2], $subject->columnNames[$index]->direction);
572 $createTableStatement =
$parser->getAST();
574 return $createTableStatement->createDefinition->items[1];