@@ -7,109 +7,37 @@ package migrations
7
7
import (
8
8
"xorm.io/builder"
9
9
"xorm.io/xorm"
10
- "xorm.io/xorm/schemas"
11
10
)
12
11
13
12
func recreateUserTableToFixDefaultValues (x * xorm.Engine ) error {
14
13
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"`
80
16
}
81
17
82
- if err := x .Sync2 (new (User )); err != nil {
18
+ sess := x .NewSession ()
19
+ defer sess .Close ()
20
+ if err := sess .Begin (); err != nil {
83
21
return err
84
22
}
85
23
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 {
89
26
return err
90
27
}
91
28
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 {
101
30
return err
102
31
}
103
32
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 {
108
34
return err
109
35
}
110
36
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
+ }
113
41
}
114
42
115
43
return sess .Commit ()
0 commit comments