From cb5b9f6f9e6cda72f090d1c69a21e0363cade02b Mon Sep 17 00:00:00 2001 From: Ariel Mashraki <7413593+a8m@users.noreply.github.com> Date: Thu, 23 Jan 2020 20:25:48 +0200 Subject: [PATCH] dialect/sql: add drop/add-index for older version of mysql (#315) Add support for MySQL 5.6.35 --- dialect/sql/builder.go | 22 ++++++++++++++++++++++ dialect/sql/builder_test.go | 7 +++++++ 2 files changed, 29 insertions(+) diff --git a/dialect/sql/builder.go b/dialect/sql/builder.go index 44b526049..1f4fc5983 100644 --- a/dialect/sql/builder.go +++ b/dialect/sql/builder.go @@ -265,6 +265,28 @@ func (t *TableAlter) RenameIndex(curr, new string) *TableAlter { return t } +// DropIndex appends the `DROP INDEX` clause to the given `ALTER TABLE` statement. +func (t *TableAlter) DropIndex(name string) *TableAlter { + t.Queries = append(t.Queries, Raw(fmt.Sprintf("DROP INDEX %s", t.Quote(name)))) + return t +} + +// AddIndex appends the `ADD INDEX` clause to the given `ALTER TABLE` statement. +func (t *TableAlter) AddIndex(idx *IndexBuilder) *TableAlter { + b := &Builder{dialect: t.dialect} + b.WriteString("ADD ") + if idx.unique { + b.WriteString("UNIQUE ") + } + b.WriteString("INDEX ") + b.Ident(idx.name) + b.Nested(func(b *Builder) { + b.IdentComma(idx.columns...) + }) + t.Queries = append(t.Queries, b) + return t +} + // AddForeignKey adds a foreign key constraint to the `ALTER TABLE` statement. func (t *TableAlter) AddForeignKey(fk *ForeignKeyBuilder) *TableAlter { t.Queries = append(t.Queries, &Wrapper{"ADD CONSTRAINT %s", fk}) diff --git a/dialect/sql/builder_test.go b/dialect/sql/builder_test.go index 5440305c1..e9e40efca 100644 --- a/dialect/sql/builder_test.go +++ b/dialect/sql/builder_test.go @@ -200,6 +200,13 @@ func TestBuilder(t *testing.T) { input: AlterTable("users").RenameIndex("old", "new"), wantQuery: "ALTER TABLE `users` RENAME INDEX `old` TO `new`", }, + { + input: AlterTable("users"). + DropIndex("old"). + AddIndex(CreateIndex("new1").Columns("c1", "c2")). + AddIndex(CreateIndex("new2").Columns("c1", "c2").Unique()), + wantQuery: "ALTER TABLE `users` DROP INDEX `old`, ADD INDEX `new1`(`c1`, `c2`), ADD UNIQUE INDEX `new2`(`c1`, `c2`)", + }, { input: Dialect(dialect.Postgres).AlterIndex("old"). Rename("new"),