@@ -583,6 +583,103 @@ 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 (
623+ idx .Attrs ,
624+ & IndexAttributes {
625+ CoverColumns : []* schema.Column {
626+ {Name : "email" },
627+ },
628+ },
629+ )
630+ return idx
631+ }(),
632+ },
633+ },
634+ },
635+ },
636+ wantPlan : & migrate.Plan {
637+ Transactional : false ,
638+ Changes : []* migrate.Change {
639+ {
640+ Cmd : "ALTER TABLE `users` ADD INDEX `idx_name_cover` GLOBAL SYNC ON (`name`) COVER (`email`)" ,
641+ Reverse : "ALTER TABLE `users` DROP INDEX `idx_name_cover`" ,
642+ Comment : `create index "idx_name_cover" to table: "users"` ,
643+ },
644+ },
645+ },
646+ },
647+ {
648+ name : "add async index with cover columns" ,
649+ changes : []schema.Change {
650+ & schema.ModifyTable {
651+ T : usersTable ,
652+ Changes : []schema.Change {
653+ & schema.AddIndex {
654+ I : func () * schema.Index {
655+ idx := schema .NewIndex ("idx_name_async_cover" ).AddColumns (usersTable .Columns [1 ])
656+ idx .Attrs = append (
657+ idx .Attrs ,
658+ & IndexAttributes {
659+ Async : true ,
660+ CoverColumns : []* schema.Column {
661+ {Name : "email" },
662+ {Name : "id" },
663+ },
664+ },
665+ )
666+ return idx
667+ }(),
668+ },
669+ },
670+ },
671+ },
672+ wantPlan : & migrate.Plan {
673+ Transactional : false ,
674+ Changes : []* migrate.Change {
675+ {
676+ Cmd : "ALTER TABLE `users` ADD INDEX `idx_name_async_cover` GLOBAL ASYNC ON (`name`) COVER (`email`, `id`)" ,
677+ Reverse : "ALTER TABLE `users` DROP INDEX `idx_name_async_cover`" ,
678+ Comment : `create index "idx_name_async_cover" to table: "users"` ,
679+ },
680+ },
681+ },
682+ },
586683 {
587684 name : "add multiple indexes" ,
588685 changes : []schema.Change {
@@ -702,6 +799,67 @@ func TestPlanChanges_DropIndex(t *testing.T) {
702799 },
703800 },
704801 },
802+ {
803+ name : "drop async index" ,
804+ changes : []schema.Change {
805+ & schema.ModifyTable {
806+ T : usersTable ,
807+ Changes : []schema.Change {
808+ & schema.DropIndex {
809+ I : func () * schema.Index {
810+ idx := schema .NewIndex ("idx_name_async" ).AddColumns (usersTable .Columns [1 ])
811+ idx .Attrs = append (idx .Attrs , & IndexAttributes {Async : true })
812+ return idx
813+ }(),
814+ },
815+ },
816+ },
817+ },
818+ wantPlan : & migrate.Plan {
819+ Transactional : false ,
820+ Changes : []* migrate.Change {
821+ {
822+ Cmd : "ALTER TABLE `users` DROP INDEX `idx_name_async`" ,
823+ Reverse : "ALTER TABLE `users` ADD INDEX `idx_name_async` GLOBAL ASYNC ON (`name`)" ,
824+ Comment : `drop index "idx_name_async" from table: "users"` ,
825+ },
826+ },
827+ },
828+ },
829+ {
830+ name : "drop index with cover columns" ,
831+ changes : []schema.Change {
832+ & schema.ModifyTable {
833+ T : usersTable ,
834+ Changes : []schema.Change {
835+ & schema.DropIndex {
836+ I : func () * schema.Index {
837+ idx := schema .NewIndex ("idx_name_cover" ).AddColumns (usersTable .Columns [1 ])
838+ idx .Attrs = append (
839+ idx .Attrs ,
840+ & IndexAttributes {
841+ CoverColumns : []* schema.Column {
842+ {Name : "email" },
843+ },
844+ },
845+ )
846+ return idx
847+ }(),
848+ },
849+ },
850+ },
851+ },
852+ wantPlan : & migrate.Plan {
853+ Transactional : false ,
854+ Changes : []* migrate.Change {
855+ {
856+ Cmd : "ALTER TABLE `users` DROP INDEX `idx_name_cover`" ,
857+ Reverse : "ALTER TABLE `users` ADD INDEX `idx_name_cover` GLOBAL SYNC ON (`name`) COVER (`email`)" ,
858+ Comment : `drop index "idx_name_cover" from table: "users"` ,
859+ },
860+ },
861+ },
862+ },
705863 }
706864
707865 for _ , tt := range tests {
0 commit comments