package models import ( "code.gitea.io/gitea/modules/log" "xorm.io/xorm" ) type CustomMigration struct { Description string Migrate func(*xorm.Engine) error } type CustomMigrationStatic struct { Description string Migrate func(*xorm.Engine, *xorm.Engine) error } var customMigrations = []CustomMigration{ //手机号功能可以不启用,不启用时手机号为空串,为了避免启用时唯一性约束报错,定制唯一性约束(对null和空字符串不做唯一性检查) {"set phone number unique index", setPhoneNumberUniqueIndex}, } var customMigrationsStatic []CustomMigrationStatic func MigrateCustom(x *xorm.Engine) { for _, m := range customMigrations { log.Info("Migration: %s", m.Description) if err := m.Migrate(x); err != nil { log.Error("Migration: %v", err) } } } func MigrateCustomStatic(x *xorm.Engine, static *xorm.Engine) { for _, m := range customMigrationsStatic { log.Info("Migration: %s", m.Description) if err := m.Migrate(x, static); err != nil { log.Error("Migration: %v", err) } } } func setPhoneNumberUniqueIndex(x *xorm.Engine) error { query := "CREATE UNIQUE INDEX IF NOT EXISTS \"UQE_user_phone_number\" ON \"user\" (phone_number) WHERE phone_number IS NOT NULL and phone_number !='';" _, err := x.Exec(query) return err } func syncTopicStruct(x *xorm.Engine) error { query := "ALTER TABLE topic ALTER COLUMN name TYPE varchar(105);" _, err := x.Exec(query) return err } func updateIssueFixedRate(x *xorm.Engine, static *xorm.Engine) error { updateSQL := "update repo_statistic set issue_fixed_rate=1.0 where num_issues=0" _, err := static.Exec(updateSQL) return err }