Skip to content

Commit d43a529

Browse files
committed
use dropTableColumns instead of recreateTable
1 parent f340581 commit d43a529

File tree

1 file changed

+13
-85
lines changed

1 file changed

+13
-85
lines changed

models/migrations/v167.go

Lines changed: 13 additions & 85 deletions
Original file line numberDiff line numberDiff line change
@@ -7,109 +7,37 @@ package migrations
77
import (
88
"xorm.io/builder"
99
"xorm.io/xorm"
10-
"xorm.io/xorm/schemas"
1110
)
1211

1312
func recreateUserTableToFixDefaultValues(x *xorm.Engine) error {
1413
type User struct {
15-
ID int64 `xorm:"pk autoincr"`
16-
LowerName string `xorm:"UNIQUE NOT NULL"`
17-
Name string `xorm:"UNIQUE NOT NULL"`
18-
FullName string
19-
// Email is the primary email address (to be used for communication)
20-
Email string `xorm:"NOT NULL"`
21-
KeepEmailPrivate bool
22-
EmailNotificationsPreference string `xorm:"VARCHAR(20) NOT NULL DEFAULT 'enabled'"`
23-
Passwd string `xorm:"NOT NULL"`
24-
PasswdHashAlgo string `xorm:"NOT NULL DEFAULT 'argon2'"`
25-
26-
// MustChangePassword is an attribute that determines if a user
27-
// is to change his/her password after registration.
28-
MustChangePassword bool `xorm:"NOT NULL DEFAULT false"`
29-
30-
LoginType int
31-
LoginSource int64 `xorm:"NOT NULL DEFAULT 0"`
32-
LoginName string
33-
Type int
34-
Location string
35-
Website string
36-
Rands string `xorm:"VARCHAR(10)"`
37-
Salt string `xorm:"VARCHAR(10)"`
38-
Language string `xorm:"VARCHAR(5)"`
39-
Description string
40-
41-
CreatedUnix int64 `xorm:"INDEX created"`
42-
UpdatedUnix int64 `xorm:"INDEX updated"`
43-
LastLoginUnix int64 `xorm:"INDEX"`
44-
45-
// Remember visibility choice for convenience, true for private
46-
LastRepoVisibility bool
47-
// Maximum repository creation limit, -1 means use global default
48-
MaxRepoCreation int `xorm:"NOT NULL DEFAULT -1"`
49-
50-
// Permissions
51-
IsActive bool `xorm:"INDEX"` // Activate primary email
52-
IsAdmin bool
53-
IsRestricted bool `xorm:"NOT NULL DEFAULT false"`
54-
AllowGitHook bool
55-
AllowImportLocal bool // Allow migrate repository by local path
56-
AllowCreateOrganization bool `xorm:"DEFAULT true"`
57-
ProhibitLogin bool `xorm:"NOT NULL DEFAULT false"`
58-
59-
// Avatar
60-
Avatar string `xorm:"VARCHAR(2048) NOT NULL"`
61-
AvatarEmail string `xorm:"NOT NULL"`
62-
UseCustomAvatar bool
63-
64-
// Counters
65-
NumFollowers int
66-
NumFollowing int `xorm:"NOT NULL DEFAULT 0"`
67-
NumStars int
68-
NumRepos int
69-
70-
// For organization
71-
NumTeams int
72-
NumMembers int
73-
Visibility int `xorm:"NOT NULL DEFAULT 0"`
74-
RepoAdminChangeTeamAccess bool `xorm:"NOT NULL DEFAULT false"`
75-
76-
// Preferences
77-
DiffViewStyle string `xorm:"NOT NULL DEFAULT ''"`
78-
Theme string `xorm:"NOT NULL DEFAULT ''"`
79-
KeepActivityPrivate bool `xorm:"NOT NULL DEFAULT false"`
14+
ID int64 `xorm:"pk autoincr"`
15+
KeepActivityPrivate bool `xorm:"NOT NULL DEFAULT false"`
8016
}
8117

82-
if err := x.Sync2(new(User)); err != nil {
18+
sess := x.NewSession()
19+
defer sess.Close()
20+
if err := sess.Begin(); err != nil {
8321
return err
8422
}
8523

86-
if _, err := x.Where(builder.Eq{"keep_activity_private": nil}).
87-
Cols("keep_activity_private").
88-
Update(&User{KeepActivityPrivate: false}); err != nil {
24+
var activityPrivateUsers []int64
25+
if err := sess.Select("id").Table("user").Where(builder.Eq{"keep_activity_private": true}).Find(&activityPrivateUsers); err != nil {
8926
return err
9027
}
9128

92-
switch x.Dialect().URI().DBType {
93-
case schemas.MYSQL:
94-
_, err := x.Exec("ALTER TABLE `user` MODIFY COLUMN keep_activity_private tinyint(1) DEFAULT 0 NOT NULL;")
95-
return err
96-
case schemas.MSSQL:
97-
_, err := x.Exec("ALTER TABLE `user` MODIFY COLUMN keep_activity_private BIT DEFAULT 0 NOT NULL;")
98-
return err
99-
case schemas.POSTGRES:
100-
_, err := x.Exec("ALTER TABLE `user` ALTER COLUMN keep_activity_private SET DEFAULT false NOT NULL;")
29+
if err := dropTableColumns(sess, "user", "keep_activity_private"); err != nil {
10130
return err
10231
}
10332

104-
// handle SQLite
105-
sess := x.NewSession()
106-
defer sess.Close()
107-
if err := sess.Begin(); err != nil {
33+
if err := sess.Sync2(new(User)); err != nil {
10834
return err
10935
}
11036

111-
if err := recreateTable(sess, new(User)); err != nil {
112-
return err
37+
for _, uid := range activityPrivateUsers {
38+
if _, err := sess.ID(uid).Cols("keep_activity_private").Update(&User{KeepActivityPrivate: true}); err != nil {
39+
return err
40+
}
11341
}
11442

11543
return sess.Commit()

0 commit comments

Comments
 (0)