diff --git a/migrations/20210118163847_fix_unique_index.sql b/migrations/20210118163847_fix_unique_index.sql new file mode 100644 index 000000000..d61819f07 --- /dev/null +++ b/migrations/20210118163847_fix_unique_index.sql @@ -0,0 +1,15 @@ +-- +up +-- +begin +ALTER TABLE `trades` DROP INDEX `id`; +-- +end +-- +begin +ALTER TABLE `trades` ADD UNIQUE INDEX `id` (`exchange`,`symbol`, `side`, `id`); +-- +end + +-- +down +-- +begin +ALTER TABLE `trades` DROP INDEX `id`; +-- +end +-- +begin +ALTER TABLE `trades` ADD UNIQUE INDEX `id` (`id`); +-- +end diff --git a/pkg/migrations/20210118163847_fix_unique_index.go b/pkg/migrations/20210118163847_fix_unique_index.go new file mode 100644 index 000000000..bc00f7a93 --- /dev/null +++ b/pkg/migrations/20210118163847_fix_unique_index.go @@ -0,0 +1,43 @@ +package migrations + +import ( + "context" + + "github.com/c9s/rockhopper" +) + +func init() { + rockhopper.AddMigration(upFixUniqueIndex, downFixUniqueIndex) +} + +func upFixUniqueIndex(ctx context.Context, tx rockhopper.SQLExecutor) (err error) { + // This code is executed when the migration is applied. + + _, err = tx.ExecContext(ctx, "ALTER TABLE `trades` DROP INDEX `id`;") + if err != nil { + return err + } + + _, err = tx.ExecContext(ctx, "ALTER TABLE `trades` ADD INDEX UNIQUE `id` ON (`exchange`,`symbol`, `side`, `id`);") + if err != nil { + return err + } + + return err +} + +func downFixUniqueIndex(ctx context.Context, tx rockhopper.SQLExecutor) (err error) { + // This code is executed when the migration is rolled back. + + _, err = tx.ExecContext(ctx, "ALTER TABLE `trades` DROP INDEX `id`;") + if err != nil { + return err + } + + _, err = tx.ExecContext(ctx, "ALTER TABLE `trades` ADD INDEX UNIQUE `id` ON (`id`);") + if err != nil { + return err + } + + return err +}