@@ -402,7 +402,7 @@ public function testBuilderCreateProcedure()
402402 . ' SQL SECURITY INVOKER NO SQL SQL SECURITY INVOKER SELECT _var '
403403 );
404404
405- /** @var CreateStatement */
405+ /** @var CreateStatement $stmt */
406406 $ stmt = $ parser ->statements [0 ];
407407
408408 $ this ->assertSame (
@@ -475,7 +475,7 @@ public function testBuilderCreateFunction()
475475 . 'END '
476476 );
477477
478- /** @var CreateStatement */
478+ /** @var CreateStatement $stmt */
479479 $ stmt = $ parser ->statements [0 ];
480480
481481 $ this ->assertSame (
@@ -616,4 +616,74 @@ public function testBuildSelect()
616616 $ parser ->statements [0 ]->build ()
617617 );
618618 }
619+
620+ public function testBuildCreateTableComplexIndexes ()
621+ {
622+ $ parser = new Parser (
623+ <<<'SQL'
624+ CREATE TABLE `page_rebuild_control` (
625+ `proc_row_number` int DEFAULT NULL,
626+ `place_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
627+ `place_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
628+ `place_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
629+ `waterway_id` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
630+ `cache_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
631+ `place_active` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
632+ `alias_type` int NOT NULL DEFAULT '0',
633+ `status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
634+ `time_taken` float DEFAULT NULL,
635+ PRIMARY KEY (`place_id`,`place_type`) USING BTREE,
636+ KEY `place_type_idx` (`place_type`(10)),
637+ KEY `cached_time_idx` (`cache_updated`),
638+ KEY `active_idx` (`place_active`),
639+ KEY `status_idx` (`status`),
640+ KEY `waterway_idx` (`waterway_id`),
641+ KEY `time_taken_idx` (`time_taken`),
642+ KEY `alias_type_idx` (`alias_type`),
643+ KEY `updated_tz_ind2` ((convert_tz(`cache_updated`,_utf8mb4'GMT',_utf8mb4'GB'))) COMMENT 'foo\'s',
644+ KEY `updated_tz_ind` ((convert_tz(`cache_updated`,_utf8mb4'GMT',_utf8mb4'GB')))
645+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
646+ SQL
647+ );
648+
649+ /** @var CreateStatement $stmt */
650+ $ stmt = $ parser ->statements [0 ];
651+
652+ $ tableBody = <<<'SQL'
653+ (
654+ `proc_row_number` int DEFAULT NULL,
655+ `place_id` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
656+ `place_name` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
657+ `place_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
658+ `waterway_id` varchar(20) COLLATE utf8mb4_unicode_ci DEFAULT NULL,
659+ `cache_updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
660+ `place_active` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
661+ `alias_type` int NOT NULL DEFAULT '0',
662+ `status` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL,
663+ `time_taken` float DEFAULT NULL,
664+ PRIMARY KEY (`place_id`,`place_type`) USING BTREE,
665+ KEY `place_type_idx` (`place_type`(10)),
666+ KEY `cached_time_idx` (`cache_updated`),
667+ KEY `active_idx` (`place_active`),
668+ KEY `status_idx` (`status`),
669+ KEY `waterway_idx` (`waterway_id`),
670+ KEY `time_taken_idx` (`time_taken`),
671+ KEY `alias_type_idx` (`alias_type`),
672+ KEY `updated_tz_ind2` ((convert_tz(`cache_updated`,_utf8mb4'GMT',_utf8mb4'GB'))) COMMENT 'foo\'s',
673+ KEY `updated_tz_ind` ((convert_tz(`cache_updated`,_utf8mb4'GMT',_utf8mb4'GB')))
674+ )
675+ SQL;
676+
677+ $ this ->assertEquals (
678+ $ tableBody ,
679+ CreateDefinition::build ($ stmt ->fields )
680+ );
681+
682+ $ this ->assertEquals (
683+ 'CREATE TABLE `page_rebuild_control` '
684+ . $ tableBody
685+ . ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci ' ,
686+ $ stmt ->build ()
687+ );
688+ }
619689}
0 commit comments