@@ -583,6 +583,87 @@ func TestPlanChanges_AddIndex(t *testing.T) {
583583 },
584584 },
585585 },
586+ {
587+ name : "add async index" ,
588+ changes : []schema.Change {
589+ & schema.ModifyTable {
590+ T : usersTable ,
591+ Changes : []schema.Change {
592+ & schema.AddIndex {
593+ I : func () * schema.Index {
594+ idx := schema .NewIndex ("idx_name_async" ).AddColumns (usersTable .Columns [1 ])
595+ idx .Attrs = append (idx .Attrs , & IndexAttributes {Async : true })
596+ return idx
597+ }(),
598+ },
599+ },
600+ },
601+ },
602+ wantPlan : & migrate.Plan {
603+ Transactional : false ,
604+ Changes : []* migrate.Change {
605+ {
606+ Cmd : "ALTER TABLE `users` ADD INDEX `idx_name_async` GLOBAL ASYNC ON (`name`)" ,
607+ Reverse : "ALTER TABLE `users` DROP INDEX `idx_name_async`" ,
608+ Comment : `create index "idx_name_async" to table: "users"` ,
609+ },
610+ },
611+ },
612+ },
613+ {
614+ name : "add index with cover columns" ,
615+ changes : []schema.Change {
616+ & schema.ModifyTable {
617+ T : usersTable ,
618+ Changes : []schema.Change {
619+ & schema.AddIndex {
620+ I : func () * schema.Index {
621+ idx := schema .NewIndex ("idx_name_cover" ).AddColumns (usersTable .Columns [1 ])
622+ idx .Attrs = append (idx .Attrs , & IndexAttributes {CoverColumns : []string {"email" }})
623+ return idx
624+ }(),
625+ },
626+ },
627+ },
628+ },
629+ wantPlan : & migrate.Plan {
630+ Transactional : false ,
631+ Changes : []* migrate.Change {
632+ {
633+ Cmd : "ALTER TABLE `users` ADD INDEX `idx_name_cover` GLOBAL SYNC ON (`name`) COVER (`email`)" ,
634+ Reverse : "ALTER TABLE `users` DROP INDEX `idx_name_cover`" ,
635+ Comment : `create index "idx_name_cover" to table: "users"` ,
636+ },
637+ },
638+ },
639+ },
640+ {
641+ name : "add async index with cover columns" ,
642+ changes : []schema.Change {
643+ & schema.ModifyTable {
644+ T : usersTable ,
645+ Changes : []schema.Change {
646+ & schema.AddIndex {
647+ I : func () * schema.Index {
648+ idx := schema .NewIndex ("idx_name_async_cover" ).AddColumns (usersTable .Columns [1 ])
649+ idx .Attrs = append (idx .Attrs , & IndexAttributes {Async : true , CoverColumns : []string {"email" , "id" }})
650+ return idx
651+ }(),
652+ },
653+ },
654+ },
655+ },
656+ wantPlan : & migrate.Plan {
657+ Transactional : false ,
658+ Changes : []* migrate.Change {
659+ {
660+ Cmd : "ALTER TABLE `users` ADD INDEX `idx_name_async_cover` GLOBAL ASYNC ON (`name`) COVER (`email`, `id`)" ,
661+ Reverse : "ALTER TABLE `users` DROP INDEX `idx_name_async_cover`" ,
662+ Comment : `create index "idx_name_async_cover" to table: "users"` ,
663+ },
664+ },
665+ },
666+ },
586667 {
587668 name : "add multiple indexes" ,
588669 changes : []schema.Change {
@@ -702,6 +783,60 @@ func TestPlanChanges_DropIndex(t *testing.T) {
702783 },
703784 },
704785 },
786+ {
787+ name : "drop async index" ,
788+ changes : []schema.Change {
789+ & schema.ModifyTable {
790+ T : usersTable ,
791+ Changes : []schema.Change {
792+ & schema.DropIndex {
793+ I : func () * schema.Index {
794+ idx := schema .NewIndex ("idx_name_async" ).AddColumns (usersTable .Columns [1 ])
795+ idx .Attrs = append (idx .Attrs , & IndexAttributes {Async : true })
796+ return idx
797+ }(),
798+ },
799+ },
800+ },
801+ },
802+ wantPlan : & migrate.Plan {
803+ Transactional : false ,
804+ Changes : []* migrate.Change {
805+ {
806+ Cmd : "ALTER TABLE `users` DROP INDEX `idx_name_async`" ,
807+ Reverse : "ALTER TABLE `users` ADD INDEX `idx_name_async` GLOBAL ASYNC ON (`name`)" ,
808+ Comment : `drop index "idx_name_async" from table: "users"` ,
809+ },
810+ },
811+ },
812+ },
813+ {
814+ name : "drop index with cover columns" ,
815+ changes : []schema.Change {
816+ & schema.ModifyTable {
817+ T : usersTable ,
818+ Changes : []schema.Change {
819+ & schema.DropIndex {
820+ I : func () * schema.Index {
821+ idx := schema .NewIndex ("idx_name_cover" ).AddColumns (usersTable .Columns [1 ])
822+ idx .Attrs = append (idx .Attrs , & IndexAttributes {CoverColumns : []string {"email" }})
823+ return idx
824+ }(),
825+ },
826+ },
827+ },
828+ },
829+ wantPlan : & migrate.Plan {
830+ Transactional : false ,
831+ Changes : []* migrate.Change {
832+ {
833+ Cmd : "ALTER TABLE `users` DROP INDEX `idx_name_cover`" ,
834+ Reverse : "ALTER TABLE `users` ADD INDEX `idx_name_cover` GLOBAL SYNC ON (`name`) COVER (`email`)" ,
835+ Comment : `drop index "idx_name_cover" from table: "users"` ,
836+ },
837+ },
838+ },
839+ },
705840 }
706841
707842 for _ , tt := range tests {
0 commit comments