summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristopher Speller <crspeller@gmail.com>2015-08-28 08:26:33 -0400
committerChristopher Speller <crspeller@gmail.com>2015-08-28 08:26:33 -0400
commitd107b392a6309a41eac6cd7d07d720a21968eb56 (patch)
tree3be26fed1cb5fd22d344d54ba99e93b80b5d6c93
parent2bc6451e39a4080832e0b6250f536972c42b1f48 (diff)
parentf96513809f2f1ff64d8f0919c67408438713ba83 (diff)
downloadchat-d107b392a6309a41eac6cd7d07d720a21968eb56.tar.gz
chat-d107b392a6309a41eac6cd7d07d720a21968eb56.tar.bz2
chat-d107b392a6309a41eac6cd7d07d720a21968eb56.zip
Merge pull request #511 from mattermost/MM-1698
MM-1698 Fixes upgrade db from 0.6 for postgres
-rw-r--r--api/team.go2
-rw-r--r--store/sql_channel_store.go3
-rw-r--r--store/sql_post_store.go5
-rw-r--r--store/sql_store.go148
-rw-r--r--store/sql_team_store.go10
-rw-r--r--store/sql_user_store.go28
6 files changed, 96 insertions, 100 deletions
diff --git a/api/team.go b/api/team.go
index eaa0d2695..22a19cca8 100644
--- a/api/team.go
+++ b/api/team.go
@@ -194,7 +194,7 @@ func createTeam(c *Context, w http.ResponseWriter, r *http.Request) {
rteam := result.Data.(*model.Team)
if _, err := CreateDefaultChannels(c, rteam.Id); err != nil {
- c.Err = nil
+ c.Err = err
return
}
diff --git a/store/sql_channel_store.go b/store/sql_channel_store.go
index d503d2225..d2e3943df 100644
--- a/store/sql_channel_store.go
+++ b/store/sql_channel_store.go
@@ -37,8 +37,7 @@ func NewSqlChannelStore(sqlStore *SqlStore) ChannelStore {
}
func (s SqlChannelStore) UpgradeSchemaIfNeeded() {
- s.CreateColumnIfNotExists("Channels", "ExtraUpdateAt", "TotalMsgCount", "bigint(20)", "0")
- s.CreateColumnIfNotExists("Channels", "CreatorId", "ExtraUpdateAt", "varchar(26)", "")
+ s.CreateColumnIfNotExists("Channels", "CreatorId", "varchar(26)", "character varying(26)", "")
}
func (s SqlChannelStore) CreateIndexesIfNotExists() {
diff --git a/store/sql_post_store.go b/store/sql_post_store.go
index a94a1c014..cd668b13c 100644
--- a/store/sql_post_store.go
+++ b/store/sql_post_store.go
@@ -35,11 +35,6 @@ func NewSqlPostStore(sqlStore *SqlStore) PostStore {
}
func (s SqlPostStore) UpgradeSchemaIfNeeded() {
-
- // These execs are for upgrading currently created databases to full utf8mb4 compliance
- // Will be removed as seen fit for upgrading
- s.GetMaster().Exec("ALTER TABLE Posts charset=utf8mb4")
- s.GetMaster().Exec("ALTER TABLE Posts MODIFY COLUMN Message varchar(4000) CHARACTER SET utf8mb4")
}
func (s SqlPostStore) CreateIndexesIfNotExists() {
diff --git a/store/sql_store.go b/store/sql_store.go
index 0d4f76a72..98c67d668 100644
--- a/store/sql_store.go
+++ b/store/sql_store.go
@@ -123,13 +123,29 @@ func setupConnection(con_type string, driver string, dataSource string, maxIdle
}
func (ss SqlStore) DoesColumnExist(tableName string, columnName string) bool {
- // XXX TODO FIXME this should be removed after 0.6.0
if utils.Cfg.SqlSettings.DriverName == "postgres" {
- return false
- }
+ count, err := ss.GetMaster().SelectInt(
+ `SELECT COUNT(0)
+ FROM pg_attribute
+ WHERE attrelid = $1::regclass
+ AND attname = $2
+ AND NOT attisdropped`,
+ strings.ToLower(tableName),
+ strings.ToLower(columnName),
+ )
+
+ if err != nil {
+ l4g.Critical("Failed to check if column exists %v", err)
+ time.Sleep(time.Second)
+ panic("Failed to check if column exists " + err.Error())
+ }
+
+ return count > 0
- count, err := ss.GetMaster().SelectInt(
- `SELECT
+ } else if utils.Cfg.SqlSettings.DriverName == "mysql" {
+
+ count, err := ss.GetMaster().SelectInt(
+ `SELECT
COUNT(0) AS column_exists
FROM
information_schema.COLUMNS
@@ -137,81 +153,101 @@ func (ss SqlStore) DoesColumnExist(tableName string, columnName string) bool {
TABLE_SCHEMA = DATABASE()
AND TABLE_NAME = ?
AND COLUMN_NAME = ?`,
- tableName,
- columnName,
- )
- if err != nil {
- l4g.Critical("Failed to check if column exists %v", err)
+ tableName,
+ columnName,
+ )
+
+ if err != nil {
+ l4g.Critical("Failed to check if column exists %v", err)
+ time.Sleep(time.Second)
+ panic("Failed to check if column exists " + err.Error())
+ }
+
+ return count > 0
+
+ } else {
+ l4g.Critical("Failed to check if column exists because of missing driver")
time.Sleep(time.Second)
- panic("Failed to check if column exists " + err.Error())
+ panic("Failed to check if column exists because of missing driver")
}
- return count > 0
}
-func (ss SqlStore) CreateColumnIfNotExists(tableName string, columnName string, afterName string, colType string, defaultValue string) bool {
-
- // XXX TODO FIXME this should be removed after 0.6.0
- if utils.Cfg.SqlSettings.DriverName == "postgres" {
- return false
- }
+func (ss SqlStore) CreateColumnIfNotExists(tableName string, columnName string, mySqlColType string, postgresColType string, defaultValue string) bool {
if ss.DoesColumnExist(tableName, columnName) {
return false
}
- _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " ADD " + columnName + " " + colType + " DEFAULT '" + defaultValue + "'" + " AFTER " + afterName)
- if err != nil {
- l4g.Critical("Failed to create column %v", err)
+ if utils.Cfg.SqlSettings.DriverName == "postgres" {
+ _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " ADD " + columnName + " " + postgresColType + " DEFAULT '" + defaultValue + "'")
+ if err != nil {
+ l4g.Critical("Failed to create column %v", err)
+ time.Sleep(time.Second)
+ panic("Failed to create column " + err.Error())
+ }
+
+ return true
+
+ } else if utils.Cfg.SqlSettings.DriverName == "mysql" {
+ _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " ADD " + columnName + " " + mySqlColType + " DEFAULT '" + defaultValue + "'")
+ if err != nil {
+ l4g.Critical("Failed to create column %v", err)
+ time.Sleep(time.Second)
+ panic("Failed to create column " + err.Error())
+ }
+
+ return true
+
+ } else {
+ l4g.Critical("Failed to create column because of missing driver")
time.Sleep(time.Second)
- panic("Failed to create column " + err.Error())
+ panic("Failed to create column because of missing driver")
}
-
- return true
}
-func (ss SqlStore) RemoveColumnIfExists(tableName string, columnName string) bool {
+// func (ss SqlStore) RemoveColumnIfExists(tableName string, columnName string) bool {
- // XXX TODO FIXME this should be removed after 0.6.0
- if utils.Cfg.SqlSettings.DriverName == "postgres" {
- return false
- }
+// // XXX TODO FIXME this should be removed after 0.6.0
+// if utils.Cfg.SqlSettings.DriverName == "postgres" {
+// return false
+// }
- if !ss.DoesColumnExist(tableName, columnName) {
- return false
- }
+// if !ss.DoesColumnExist(tableName, columnName) {
+// return false
+// }
- _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " DROP COLUMN " + columnName)
- if err != nil {
- l4g.Critical("Failed to drop column %v", err)
- time.Sleep(time.Second)
- panic("Failed to drop column " + err.Error())
- }
+// _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " DROP COLUMN " + columnName)
+// if err != nil {
+// l4g.Critical("Failed to drop column %v", err)
+// time.Sleep(time.Second)
+// panic("Failed to drop column " + err.Error())
+// }
- return true
-}
+// return true
+// }
-func (ss SqlStore) RenameColumnIfExists(tableName string, oldColumnName string, newColumnName string, colType string) bool {
+// func (ss SqlStore) RenameColumnIfExists(tableName string, oldColumnName string, newColumnName string, colType string) bool {
- // XXX TODO FIXME this should be removed after 0.6.0
- if utils.Cfg.SqlSettings.DriverName == "postgres" {
- return false
- }
+// // XXX TODO FIXME this should be removed after 0.6.0
+// if utils.Cfg.SqlSettings.DriverName == "postgres" {
+// return false
+// }
- if !ss.DoesColumnExist(tableName, oldColumnName) {
- return false
- }
+// if !ss.DoesColumnExist(tableName, oldColumnName) {
+// return false
+// }
- _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " CHANGE " + oldColumnName + " " + newColumnName + " " + colType)
+// _, err := ss.GetMaster().Exec("ALTER TABLE " + tableName + " CHANGE " + oldColumnName + " " + newColumnName + " " + colType)
- if err != nil {
- l4g.Critical("Failed to rename column %v", err)
- time.Sleep(time.Second)
- panic("Failed to drop column " + err.Error())
- }
+// if err != nil {
+// l4g.Critical("Failed to rename column %v", err)
+// time.Sleep(time.Second)
+// panic("Failed to drop column " + err.Error())
+// }
- return true
-}
+// return true
+// }
func (ss SqlStore) CreateIndexIfNotExists(indexName string, tableName string, columnName string) {
ss.createIndexIfNotExists(indexName, tableName, columnName, false)
diff --git a/store/sql_team_store.go b/store/sql_team_store.go
index 7b0be0540..2784f8630 100644
--- a/store/sql_team_store.go
+++ b/store/sql_team_store.go
@@ -5,7 +5,6 @@ package store
import (
"github.com/mattermost/platform/model"
- "github.com/mattermost/platform/utils"
)
type SqlTeamStore struct {
@@ -29,15 +28,6 @@ func NewSqlTeamStore(sqlStore *SqlStore) TeamStore {
}
func (s SqlTeamStore) UpgradeSchemaIfNeeded() {
- defaultValue := "0"
- if utils.Cfg.TeamSettings.AllowValetDefault {
- defaultValue = "1"
- }
- s.CreateColumnIfNotExists("Teams", "AllowValet", "AllowedDomains", "tinyint(1)", defaultValue)
- if !s.DoesColumnExist("Teams", "DisplayName") {
- s.RenameColumnIfExists("Teams", "Name", "DisplayName", "varchar(64)")
- s.RenameColumnIfExists("Teams", "Domain", "Name", "varchar(64)")
- }
}
func (s SqlTeamStore) CreateIndexesIfNotExists() {
diff --git a/store/sql_user_store.go b/store/sql_user_store.go
index 4b1189c2e..64a18545a 100644
--- a/store/sql_user_store.go
+++ b/store/sql_user_store.go
@@ -5,9 +5,9 @@ package store
import (
"fmt"
- "strings"
"github.com/mattermost/platform/model"
"github.com/mattermost/platform/utils"
+ "strings"
)
type SqlUserStore struct {
@@ -40,32 +40,8 @@ func NewSqlUserStore(sqlStore *SqlStore) UserStore {
}
func (us SqlUserStore) UpgradeSchemaIfNeeded() {
- us.CreateColumnIfNotExists("Users", "LastPictureUpdate", "LastPasswordUpdate", "bigint(20)", "0")
-
- // migrating the FullName column to Nickname and adding the FirstName and LastName columns for MM-825
- if us.RenameColumnIfExists("Users", "FullName", "Nickname", "varchar(64)") {
- us.CreateColumnIfNotExists("Users", "FirstName", "Nickname", "varchar(64)", "")
- us.CreateColumnIfNotExists("Users", "LastName", "FirstName", "varchar(64)", "")
-
- // infer values of first and last name by splitting the previous full name
- if _, err := us.GetMaster().Exec("UPDATE Users SET FirstName = SUBSTRING_INDEX(SUBSTRING_INDEX(Nickname, ' ', 1), ' ', -1)"); err != nil {
- panic("Failed to set first name from nickname " + err.Error())
- }
-
- // only set the last name from full names that are comprised of multiple words (ie that have at least one space in them)
- if _, err := us.GetMaster().Exec("Update Users SET LastName = SUBSTRING(Nickname, INSTR(Nickname, ' ') + 1) " +
- "WHERE CHAR_LENGTH(REPLACE(Nickname, ' ', '')) < CHAR_LENGTH(Nickname)"); err != nil {
- panic("Failed to set last name from nickname " + err.Error())
- }
- }
-
- us.CreateColumnIfNotExists("Users", "AuthService", "AuthData", "varchar(32)", "") // for OAuth Client
-
- us.CreateColumnIfNotExists("Users", "FailedAttempts", "LastPictureUpdate", "int(11)", "0")
}
-//func (ss SqlStore) CreateColumnIfNotExists(tableName string, columnName string, afterName string, colType string, defaultValue string) bool {
-
func (us SqlUserStore) CreateIndexesIfNotExists() {
us.CreateIndexIfNotExists("idx_users_team_id", "Users", "TeamId")
us.CreateIndexIfNotExists("idx_users_email", "Users", "Email")
@@ -168,7 +144,7 @@ func (us SqlUserStore) Update(user *model.User, allowActiveUpdate bool) StoreCha
nonUsernameKeys := []string{}
splitKeys := strings.Split(user.NotifyProps["mention_keys"], ",")
for _, key := range splitKeys {
- if key != oldUser.Username && key != "@" + oldUser.Username {
+ if key != oldUser.Username && key != "@"+oldUser.Username {
nonUsernameKeys = append(nonUsernameKeys, key)
}
}