github.com/levb/mattermost-server@v5.3.1+incompatible/store/sqlstore/upgrade.go (about) 1 // Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package sqlstore 5 6 import ( 7 "encoding/json" 8 "fmt" 9 "os" 10 "strings" 11 "time" 12 13 "github.com/mattermost/mattermost-server/mlog" 14 "github.com/mattermost/mattermost-server/model" 15 ) 16 17 const ( 18 VERSION_5_3_0 = "5.3.0" 19 VERSION_5_2_0 = "5.2.0" 20 VERSION_5_1_0 = "5.1.0" 21 VERSION_5_0_0 = "5.0.0" 22 VERSION_4_10_0 = "4.10.0" 23 VERSION_4_9_0 = "4.9.0" 24 VERSION_4_8_1 = "4.8.1" 25 VERSION_4_8_0 = "4.8.0" 26 VERSION_4_7_2 = "4.7.2" 27 VERSION_4_7_1 = "4.7.1" 28 VERSION_4_7_0 = "4.7.0" 29 VERSION_4_6_0 = "4.6.0" 30 VERSION_4_5_0 = "4.5.0" 31 VERSION_4_4_0 = "4.4.0" 32 VERSION_4_3_0 = "4.3.0" 33 VERSION_4_2_0 = "4.2.0" 34 VERSION_4_1_0 = "4.1.0" 35 VERSION_4_0_0 = "4.0.0" 36 VERSION_3_10_0 = "3.10.0" 37 VERSION_3_9_0 = "3.9.0" 38 VERSION_3_8_0 = "3.8.0" 39 VERSION_3_7_0 = "3.7.0" 40 VERSION_3_6_0 = "3.6.0" 41 VERSION_3_5_0 = "3.5.0" 42 VERSION_3_4_0 = "3.4.0" 43 VERSION_3_3_0 = "3.3.0" 44 VERSION_3_2_0 = "3.2.0" 45 VERSION_3_1_0 = "3.1.0" 46 VERSION_3_0_0 = "3.0.0" 47 OLDEST_SUPPORTED_VERSION = VERSION_3_0_0 48 ) 49 50 const ( 51 EXIT_VERSION_SAVE_MISSING = 1001 52 EXIT_TOO_OLD = 1002 53 EXIT_VERSION_SAVE = 1003 54 EXIT_THEME_MIGRATION = 1004 55 ) 56 57 func UpgradeDatabase(sqlStore SqlStore) { 58 59 UpgradeDatabaseToVersion31(sqlStore) 60 UpgradeDatabaseToVersion32(sqlStore) 61 UpgradeDatabaseToVersion33(sqlStore) 62 UpgradeDatabaseToVersion34(sqlStore) 63 UpgradeDatabaseToVersion35(sqlStore) 64 UpgradeDatabaseToVersion36(sqlStore) 65 UpgradeDatabaseToVersion37(sqlStore) 66 UpgradeDatabaseToVersion38(sqlStore) 67 UpgradeDatabaseToVersion39(sqlStore) 68 UpgradeDatabaseToVersion310(sqlStore) 69 UpgradeDatabaseToVersion40(sqlStore) 70 UpgradeDatabaseToVersion41(sqlStore) 71 UpgradeDatabaseToVersion42(sqlStore) 72 UpgradeDatabaseToVersion43(sqlStore) 73 UpgradeDatabaseToVersion44(sqlStore) 74 UpgradeDatabaseToVersion45(sqlStore) 75 UpgradeDatabaseToVersion46(sqlStore) 76 UpgradeDatabaseToVersion47(sqlStore) 77 UpgradeDatabaseToVersion471(sqlStore) 78 UpgradeDatabaseToVersion472(sqlStore) 79 UpgradeDatabaseToVersion48(sqlStore) 80 UpgradeDatabaseToVersion481(sqlStore) 81 UpgradeDatabaseToVersion49(sqlStore) 82 UpgradeDatabaseToVersion410(sqlStore) 83 UpgradeDatabaseToVersion50(sqlStore) 84 UpgradeDatabaseToVersion51(sqlStore) 85 UpgradeDatabaseToVersion52(sqlStore) 86 UpgradeDatabaseToVersion53(sqlStore) 87 88 // If the SchemaVersion is empty this this is the first time it has ran 89 // so lets set it to the current version. 90 if sqlStore.GetCurrentSchemaVersion() == "" { 91 if result := <-sqlStore.System().SaveOrUpdate(&model.System{Name: "Version", Value: model.CurrentVersion}); result.Err != nil { 92 mlog.Critical(result.Err.Error()) 93 time.Sleep(time.Second) 94 os.Exit(EXIT_VERSION_SAVE_MISSING) 95 } 96 97 mlog.Info(fmt.Sprintf("The database schema has been set to version %v", model.CurrentVersion)) 98 } 99 100 // If we're not on the current version then it's too old to be upgraded 101 if sqlStore.GetCurrentSchemaVersion() != model.CurrentVersion { 102 mlog.Critical(fmt.Sprintf("Database schema version %v is no longer supported. This Mattermost server supports automatic upgrades from schema version %v through schema version %v. Downgrades are not supported. Please manually upgrade to at least version %v before continuing", sqlStore.GetCurrentSchemaVersion(), OLDEST_SUPPORTED_VERSION, model.CurrentVersion, OLDEST_SUPPORTED_VERSION)) 103 time.Sleep(time.Second) 104 os.Exit(EXIT_TOO_OLD) 105 } 106 } 107 108 func saveSchemaVersion(sqlStore SqlStore, version string) { 109 if result := <-sqlStore.System().Update(&model.System{Name: "Version", Value: version}); result.Err != nil { 110 mlog.Critical(result.Err.Error()) 111 time.Sleep(time.Second) 112 os.Exit(EXIT_VERSION_SAVE) 113 } 114 115 mlog.Warn(fmt.Sprintf("The database schema has been upgraded to version %v", version)) 116 } 117 118 func shouldPerformUpgrade(sqlStore SqlStore, currentSchemaVersion string, expectedSchemaVersion string) bool { 119 if sqlStore.GetCurrentSchemaVersion() == currentSchemaVersion { 120 mlog.Warn(fmt.Sprintf("The database schema version of %v appears to be out of date", currentSchemaVersion)) 121 mlog.Warn(fmt.Sprintf("Attempting to upgrade the database schema version to %v", expectedSchemaVersion)) 122 123 return true 124 } 125 126 return false 127 } 128 129 func UpgradeDatabaseToVersion31(sqlStore SqlStore) { 130 if shouldPerformUpgrade(sqlStore, VERSION_3_0_0, VERSION_3_1_0) { 131 sqlStore.CreateColumnIfNotExists("OutgoingWebhooks", "ContentType", "varchar(128)", "varchar(128)", "") 132 saveSchemaVersion(sqlStore, VERSION_3_1_0) 133 } 134 } 135 136 func UpgradeDatabaseToVersion32(sqlStore SqlStore) { 137 if shouldPerformUpgrade(sqlStore, VERSION_3_1_0, VERSION_3_2_0) { 138 sqlStore.CreateColumnIfNotExists("TeamMembers", "DeleteAt", "bigint(20)", "bigint", "0") 139 140 saveSchemaVersion(sqlStore, VERSION_3_2_0) 141 } 142 } 143 144 func themeMigrationFailed(err error) { 145 mlog.Critical(fmt.Sprintf("Failed to migrate User.ThemeProps to Preferences table %v", err)) 146 time.Sleep(time.Second) 147 os.Exit(EXIT_THEME_MIGRATION) 148 } 149 150 func UpgradeDatabaseToVersion33(sqlStore SqlStore) { 151 if shouldPerformUpgrade(sqlStore, VERSION_3_2_0, VERSION_3_3_0) { 152 if sqlStore.DoesColumnExist("Users", "ThemeProps") { 153 params := map[string]interface{}{ 154 "Category": model.PREFERENCE_CATEGORY_THEME, 155 "Name": "", 156 } 157 158 transaction, err := sqlStore.GetMaster().Begin() 159 if err != nil { 160 themeMigrationFailed(err) 161 } 162 163 // increase size of Value column of Preferences table to match the size of the ThemeProps column 164 if sqlStore.DriverName() == model.DATABASE_DRIVER_POSTGRES { 165 if _, err := transaction.Exec("ALTER TABLE Preferences ALTER COLUMN Value TYPE varchar(2000)"); err != nil { 166 themeMigrationFailed(err) 167 } 168 } else if sqlStore.DriverName() == model.DATABASE_DRIVER_MYSQL { 169 if _, err := transaction.Exec("ALTER TABLE Preferences MODIFY Value text"); err != nil { 170 themeMigrationFailed(err) 171 } 172 } 173 174 // copy data across 175 if _, err := transaction.Exec( 176 `INSERT INTO 177 Preferences(UserId, Category, Name, Value) 178 SELECT 179 Id, '`+model.PREFERENCE_CATEGORY_THEME+`', '', ThemeProps 180 FROM 181 Users 182 WHERE 183 Users.ThemeProps != 'null'`, params); err != nil { 184 themeMigrationFailed(err) 185 } 186 187 // delete old data 188 if _, err := transaction.Exec("ALTER TABLE Users DROP COLUMN ThemeProps"); err != nil { 189 themeMigrationFailed(err) 190 } 191 192 if err := transaction.Commit(); err != nil { 193 themeMigrationFailed(err) 194 } 195 196 // rename solarized_* code themes to solarized-* to match client changes in 3.0 197 var data model.Preferences 198 if _, err := sqlStore.GetMaster().Select(&data, "SELECT * FROM Preferences WHERE Category = '"+model.PREFERENCE_CATEGORY_THEME+"' AND Value LIKE '%solarized_%'"); err == nil { 199 for i := range data { 200 data[i].Value = strings.Replace(data[i].Value, "solarized_", "solarized-", -1) 201 } 202 203 sqlStore.Preference().Save(&data) 204 } 205 } 206 207 sqlStore.CreateColumnIfNotExists("OAuthApps", "IsTrusted", "tinyint(1)", "boolean", "0") 208 sqlStore.CreateColumnIfNotExists("OAuthApps", "IconURL", "varchar(512)", "varchar(512)", "") 209 sqlStore.CreateColumnIfNotExists("OAuthAccessData", "ClientId", "varchar(26)", "varchar(26)", "") 210 sqlStore.CreateColumnIfNotExists("OAuthAccessData", "UserId", "varchar(26)", "varchar(26)", "") 211 sqlStore.CreateColumnIfNotExists("OAuthAccessData", "ExpiresAt", "bigint", "bigint", "0") 212 213 if sqlStore.DoesColumnExist("OAuthAccessData", "AuthCode") { 214 sqlStore.RemoveIndexIfExists("idx_oauthaccessdata_auth_code", "OAuthAccessData") 215 sqlStore.RemoveColumnIfExists("OAuthAccessData", "AuthCode") 216 } 217 218 sqlStore.RemoveColumnIfExists("Users", "LastActivityAt") 219 sqlStore.RemoveColumnIfExists("Users", "LastPingAt") 220 221 sqlStore.CreateColumnIfNotExists("OutgoingWebhooks", "TriggerWhen", "tinyint", "integer", "0") 222 223 saveSchemaVersion(sqlStore, VERSION_3_3_0) 224 } 225 } 226 227 func UpgradeDatabaseToVersion34(sqlStore SqlStore) { 228 if shouldPerformUpgrade(sqlStore, VERSION_3_3_0, VERSION_3_4_0) { 229 sqlStore.CreateColumnIfNotExists("Status", "Manual", "BOOLEAN", "BOOLEAN", "0") 230 sqlStore.CreateColumnIfNotExists("Status", "ActiveChannel", "varchar(26)", "varchar(26)", "") 231 232 saveSchemaVersion(sqlStore, VERSION_3_4_0) 233 } 234 } 235 236 func UpgradeDatabaseToVersion35(sqlStore SqlStore) { 237 if shouldPerformUpgrade(sqlStore, VERSION_3_4_0, VERSION_3_5_0) { 238 sqlStore.GetMaster().Exec("UPDATE Users SET Roles = 'system_user' WHERE Roles = ''") 239 sqlStore.GetMaster().Exec("UPDATE Users SET Roles = 'system_user system_admin' WHERE Roles = 'system_admin'") 240 sqlStore.GetMaster().Exec("UPDATE TeamMembers SET Roles = 'team_user' WHERE Roles = ''") 241 sqlStore.GetMaster().Exec("UPDATE TeamMembers SET Roles = 'team_user team_admin' WHERE Roles = 'admin'") 242 sqlStore.GetMaster().Exec("UPDATE ChannelMembers SET Roles = 'channel_user' WHERE Roles = ''") 243 sqlStore.GetMaster().Exec("UPDATE ChannelMembers SET Roles = 'channel_user channel_admin' WHERE Roles = 'admin'") 244 245 // The rest of the migration from Filenames -> FileIds is done lazily in api.GetFileInfosForPost 246 sqlStore.CreateColumnIfNotExists("Posts", "FileIds", "varchar(150)", "varchar(150)", "[]") 247 248 // Increase maximum length of the Channel table Purpose column. 249 if sqlStore.GetMaxLengthOfColumnIfExists("Channels", "Purpose") != "250" { 250 sqlStore.AlterColumnTypeIfExists("Channels", "Purpose", "varchar(250)", "varchar(250)") 251 } 252 253 sqlStore.Session().RemoveAllSessions() 254 255 saveSchemaVersion(sqlStore, VERSION_3_5_0) 256 } 257 } 258 259 func UpgradeDatabaseToVersion36(sqlStore SqlStore) { 260 if shouldPerformUpgrade(sqlStore, VERSION_3_5_0, VERSION_3_6_0) { 261 sqlStore.CreateColumnIfNotExists("Posts", "HasReactions", "tinyint", "boolean", "0") 262 263 // Create Team Description column 264 sqlStore.CreateColumnIfNotExists("Teams", "Description", "varchar(255)", "varchar(255)", "") 265 266 // Add a Position column to users. 267 sqlStore.CreateColumnIfNotExists("Users", "Position", "varchar(64)", "varchar(64)", "") 268 269 // Remove ActiveChannel column from Status 270 sqlStore.RemoveColumnIfExists("Status", "ActiveChannel") 271 272 saveSchemaVersion(sqlStore, VERSION_3_6_0) 273 } 274 } 275 276 func UpgradeDatabaseToVersion37(sqlStore SqlStore) { 277 if shouldPerformUpgrade(sqlStore, VERSION_3_6_0, VERSION_3_7_0) { 278 // Add EditAt column to Posts 279 sqlStore.CreateColumnIfNotExists("Posts", "EditAt", " bigint", " bigint", "0") 280 281 saveSchemaVersion(sqlStore, VERSION_3_7_0) 282 } 283 } 284 285 func UpgradeDatabaseToVersion38(sqlStore SqlStore) { 286 if shouldPerformUpgrade(sqlStore, VERSION_3_7_0, VERSION_3_8_0) { 287 // Add the IsPinned column to posts. 288 sqlStore.CreateColumnIfNotExists("Posts", "IsPinned", "boolean", "boolean", "0") 289 290 saveSchemaVersion(sqlStore, VERSION_3_8_0) 291 } 292 } 293 294 func UpgradeDatabaseToVersion39(sqlStore SqlStore) { 295 if shouldPerformUpgrade(sqlStore, VERSION_3_8_0, VERSION_3_9_0) { 296 sqlStore.CreateColumnIfNotExists("OAuthAccessData", "Scope", "varchar(128)", "varchar(128)", model.DEFAULT_SCOPE) 297 sqlStore.RemoveTableIfExists("PasswordRecovery") 298 299 saveSchemaVersion(sqlStore, VERSION_3_9_0) 300 } 301 } 302 303 func UpgradeDatabaseToVersion310(sqlStore SqlStore) { 304 if shouldPerformUpgrade(sqlStore, VERSION_3_9_0, VERSION_3_10_0) { 305 saveSchemaVersion(sqlStore, VERSION_3_10_0) 306 } 307 } 308 309 func UpgradeDatabaseToVersion40(sqlStore SqlStore) { 310 if shouldPerformUpgrade(sqlStore, VERSION_3_10_0, VERSION_4_0_0) { 311 saveSchemaVersion(sqlStore, VERSION_4_0_0) 312 } 313 } 314 315 func UpgradeDatabaseToVersion41(sqlStore SqlStore) { 316 if shouldPerformUpgrade(sqlStore, VERSION_4_0_0, VERSION_4_1_0) { 317 // Increase maximum length of the Users table Roles column. 318 if sqlStore.GetMaxLengthOfColumnIfExists("Users", "Roles") != "256" { 319 sqlStore.AlterColumnTypeIfExists("Users", "Roles", "varchar(256)", "varchar(256)") 320 } 321 322 sqlStore.RemoveTableIfExists("JobStatuses") 323 324 saveSchemaVersion(sqlStore, VERSION_4_1_0) 325 } 326 } 327 328 func UpgradeDatabaseToVersion42(sqlStore SqlStore) { 329 if shouldPerformUpgrade(sqlStore, VERSION_4_1_0, VERSION_4_2_0) { 330 saveSchemaVersion(sqlStore, VERSION_4_2_0) 331 } 332 } 333 334 func UpgradeDatabaseToVersion43(sqlStore SqlStore) { 335 if shouldPerformUpgrade(sqlStore, VERSION_4_2_0, VERSION_4_3_0) { 336 saveSchemaVersion(sqlStore, VERSION_4_3_0) 337 } 338 } 339 340 func UpgradeDatabaseToVersion44(sqlStore SqlStore) { 341 if shouldPerformUpgrade(sqlStore, VERSION_4_3_0, VERSION_4_4_0) { 342 // Add the IsActive column to UserAccessToken. 343 sqlStore.CreateColumnIfNotExists("UserAccessTokens", "IsActive", "boolean", "boolean", "1") 344 345 saveSchemaVersion(sqlStore, VERSION_4_4_0) 346 } 347 } 348 349 func UpgradeDatabaseToVersion45(sqlStore SqlStore) { 350 if shouldPerformUpgrade(sqlStore, VERSION_4_4_0, VERSION_4_5_0) { 351 saveSchemaVersion(sqlStore, VERSION_4_5_0) 352 } 353 } 354 355 func UpgradeDatabaseToVersion46(sqlStore SqlStore) { 356 if shouldPerformUpgrade(sqlStore, VERSION_4_5_0, VERSION_4_6_0) { 357 sqlStore.CreateColumnIfNotExists("IncomingWebhooks", "Username", "varchar(64)", "varchar(64)", "") 358 sqlStore.CreateColumnIfNotExists("IncomingWebhooks", "IconURL", "varchar(1024)", "varchar(1024)", "") 359 saveSchemaVersion(sqlStore, VERSION_4_6_0) 360 } 361 } 362 363 func UpgradeDatabaseToVersion47(sqlStore SqlStore) { 364 if shouldPerformUpgrade(sqlStore, VERSION_4_6_0, VERSION_4_7_0) { 365 sqlStore.AlterColumnTypeIfExists("Users", "Position", "varchar(128)", "varchar(128)") 366 sqlStore.AlterColumnTypeIfExists("OAuthAuthData", "State", "varchar(1024)", "varchar(1024)") 367 sqlStore.RemoveColumnIfExists("ChannelMemberHistory", "Email") 368 sqlStore.RemoveColumnIfExists("ChannelMemberHistory", "Username") 369 saveSchemaVersion(sqlStore, VERSION_4_7_0) 370 } 371 } 372 373 // If any new instances started with 4.7, they would have the bad Email column on the 374 // ChannelMemberHistory table. So for those cases we need to do an upgrade between 375 // 4.7.0 and 4.7.1 376 func UpgradeDatabaseToVersion471(sqlStore SqlStore) { 377 if shouldPerformUpgrade(sqlStore, VERSION_4_7_0, VERSION_4_7_1) { 378 sqlStore.RemoveColumnIfExists("ChannelMemberHistory", "Email") 379 saveSchemaVersion(sqlStore, VERSION_4_7_1) 380 } 381 } 382 383 func UpgradeDatabaseToVersion472(sqlStore SqlStore) { 384 if shouldPerformUpgrade(sqlStore, VERSION_4_7_1, VERSION_4_7_2) { 385 sqlStore.RemoveIndexIfExists("idx_channels_displayname", "Channels") 386 saveSchemaVersion(sqlStore, VERSION_4_7_2) 387 } 388 } 389 390 func UpgradeDatabaseToVersion48(sqlStore SqlStore) { 391 if shouldPerformUpgrade(sqlStore, VERSION_4_7_2, VERSION_4_8_0) { 392 saveSchemaVersion(sqlStore, VERSION_4_8_0) 393 } 394 } 395 396 func UpgradeDatabaseToVersion481(sqlStore SqlStore) { 397 if shouldPerformUpgrade(sqlStore, VERSION_4_8_0, VERSION_4_8_1) { 398 sqlStore.RemoveIndexIfExists("idx_channels_displayname", "Channels") 399 saveSchemaVersion(sqlStore, VERSION_4_8_1) 400 } 401 } 402 403 func UpgradeDatabaseToVersion49(sqlStore SqlStore) { 404 // This version of Mattermost includes an App-Layer migration which migrates from hard-coded roles configured by 405 // a number of parameters in `config.json` to a `Roles` table in the database. The migration code can be seen 406 // in the file `app/app.go` in the function `DoAdvancedPermissionsMigration()`. 407 408 if shouldPerformUpgrade(sqlStore, VERSION_4_8_1, VERSION_4_9_0) { 409 sqlStore.CreateColumnIfNotExists("Teams", "LastTeamIconUpdate", "bigint", "bigint", "0") 410 defaultTimezone := model.DefaultUserTimezone() 411 defaultTimezoneValue, err := json.Marshal(defaultTimezone) 412 if err != nil { 413 mlog.Critical(fmt.Sprint(err)) 414 } 415 sqlStore.CreateColumnIfNotExists("Users", "Timezone", "varchar(256)", "varchar(256)", string(defaultTimezoneValue)) 416 sqlStore.RemoveIndexIfExists("idx_channels_displayname", "Channels") 417 saveSchemaVersion(sqlStore, VERSION_4_9_0) 418 } 419 } 420 421 func UpgradeDatabaseToVersion410(sqlStore SqlStore) { 422 if shouldPerformUpgrade(sqlStore, VERSION_4_9_0, VERSION_4_10_0) { 423 424 sqlStore.RemoveIndexIfExists("Name_2", "Channels") 425 sqlStore.RemoveIndexIfExists("Name_2", "Emoji") 426 sqlStore.RemoveIndexIfExists("ClientId_2", "OAuthAccessData") 427 428 saveSchemaVersion(sqlStore, VERSION_4_10_0) 429 sqlStore.GetMaster().Exec("UPDATE Users SET AuthData=LOWER(AuthData) WHERE AuthService = 'saml'") 430 } 431 } 432 433 func UpgradeDatabaseToVersion50(sqlStore SqlStore) { 434 // This version of Mattermost includes an App-Layer migration which migrates from hard-coded emojis configured 435 // in `config.json` to a `Permission` in the database. The migration code can be seen 436 // in the file `app/app.go` in the function `DoEmojisPermissionsMigration()`. 437 438 // This version of Mattermost also includes a online-migration which migrates some roles from the `Roles` columns of 439 // TeamMember and ChannelMember rows to the new SchemeAdmin and SchemeUser columns. If you need to downgrade to a 440 // version of Mattermost prior to 5.0, you should take your server offline and run the following SQL statements 441 // prior to launching the downgraded version: 442 // 443 // UPDATE Teams SET SchemeId = NULL; 444 // UPDATE Channels SET SchemeId = NULL; 445 // UPDATE TeamMembers SET Roles = CONCAT(Roles, ' team_user'), SchemeUser = NULL where SchemeUser = 1; 446 // UPDATE TeamMembers SET Roles = CONCAT(Roles, ' team_admin'), SchemeAdmin = NULL where SchemeAdmin = 1; 447 // UPDATE ChannelMembers SET Roles = CONCAT(Roles, ' channel_user'), SchemeUser = NULL where SchemeUser = 1; 448 // UPDATE ChannelMembers SET Roles = CONCAT(Roles, ' channel_admin'), SchemeAdmin = NULL where SchemeAdmin = 1; 449 // DELETE from Systems WHERE Name = 'migration_advanced_permissions_phase_2'; 450 451 if shouldPerformUpgrade(sqlStore, VERSION_4_10_0, VERSION_5_0_0) { 452 453 sqlStore.CreateColumnIfNotExistsNoDefault("Teams", "SchemeId", "varchar(26)", "varchar(26)") 454 sqlStore.CreateColumnIfNotExistsNoDefault("Channels", "SchemeId", "varchar(26)", "varchar(26)") 455 456 sqlStore.CreateColumnIfNotExistsNoDefault("TeamMembers", "SchemeUser", "boolean", "boolean") 457 sqlStore.CreateColumnIfNotExistsNoDefault("TeamMembers", "SchemeAdmin", "boolean", "boolean") 458 sqlStore.CreateColumnIfNotExistsNoDefault("ChannelMembers", "SchemeUser", "boolean", "boolean") 459 sqlStore.CreateColumnIfNotExistsNoDefault("ChannelMembers", "SchemeAdmin", "boolean", "boolean") 460 461 sqlStore.CreateColumnIfNotExists("Roles", "BuiltIn", "boolean", "boolean", "0") 462 sqlStore.GetMaster().Exec("UPDATE Roles SET BuiltIn=true") 463 sqlStore.GetMaster().Exec("UPDATE Roles SET SchemeManaged=false WHERE Name NOT IN ('system_user', 'system_admin', 'team_user', 'team_admin', 'channel_user', 'channel_admin')") 464 sqlStore.CreateColumnIfNotExists("IncomingWebhooks", "ChannelLocked", "boolean", "boolean", "0") 465 466 sqlStore.RemoveIndexIfExists("idx_channels_txt", "Channels") 467 468 saveSchemaVersion(sqlStore, VERSION_5_0_0) 469 } 470 } 471 472 func UpgradeDatabaseToVersion51(sqlStore SqlStore) { 473 if shouldPerformUpgrade(sqlStore, VERSION_5_0_0, VERSION_5_1_0) { 474 saveSchemaVersion(sqlStore, VERSION_5_1_0) 475 } 476 } 477 478 func UpgradeDatabaseToVersion52(sqlStore SqlStore) { 479 if shouldPerformUpgrade(sqlStore, VERSION_5_1_0, VERSION_5_2_0) { 480 sqlStore.CreateColumnIfNotExists("OutgoingWebhooks", "Username", "varchar(64)", "varchar(64)", "") 481 sqlStore.CreateColumnIfNotExists("OutgoingWebhooks", "IconURL", "varchar(1024)", "varchar(1024)", "") 482 saveSchemaVersion(sqlStore, VERSION_5_2_0) 483 } 484 } 485 486 func UpgradeDatabaseToVersion53(sqlStore SqlStore) { 487 if shouldPerformUpgrade(sqlStore, VERSION_5_2_0, VERSION_5_3_0) { 488 saveSchemaVersion(sqlStore, VERSION_5_3_0) 489 } 490 }