summaryrefslogtreecommitdiffstats
path: root/store/sqlstore/scheme_supplier.go
diff options
context:
space:
mode:
authorGeorge Goldberg <george@gberg.me>2018-05-17 12:48:31 +0100
committerGitHub <noreply@github.com>2018-05-17 12:48:31 +0100
commit319d61123a0418ea9caa9510b8ad1e9a302c7b93 (patch)
tree76ce7c073a2ce04e05692d7dea0a7ecd41c1a419 /store/sqlstore/scheme_supplier.go
parentc2ab85e0a36af24ee804c1d140cfe216022a4e45 (diff)
downloadchat-319d61123a0418ea9caa9510b8ad1e9a302c7b93.tar.gz
chat-319d61123a0418ea9caa9510b8ad1e9a302c7b93.tar.bz2
chat-319d61123a0418ea9caa9510b8ad1e9a302c7b93.zip
MM-10615: Reset teams/channels to default scheme on delete scheme. (#8811)
Diffstat (limited to 'store/sqlstore/scheme_supplier.go')
-rw-r--r--store/sqlstore/scheme_supplier.go23
1 files changed, 8 insertions, 15 deletions
diff --git a/store/sqlstore/scheme_supplier.go b/store/sqlstore/scheme_supplier.go
index 448e5a92f..233d2f660 100644
--- a/store/sqlstore/scheme_supplier.go
+++ b/store/sqlstore/scheme_supplier.go
@@ -210,27 +210,20 @@ func (s *SqlSupplier) SchemeDelete(ctx context.Context, schemeId string, hints .
return result
}
- // Check that the scheme isn't being used on any Teams or Channels.
+ // Update any teams or channels using this scheme to the default scheme.
if scheme.Scope == model.SCHEME_SCOPE_TEAM {
- if c, err := s.GetReplica().SelectInt("SELECT COUNT(*) FROM Teams WHERE SchemeId = :SchemeId", map[string]interface{}{"SchemeId": schemeId}); err != nil {
- result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.team_count.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
+ if _, err := s.GetReplica().Exec("UPDATE Teams SET SchemeId = '' WHERE SchemeId = :SchemeId", map[string]interface{}{"SchemeId": schemeId}); err != nil {
+ result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.reset_teams.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
return result
- } else {
- if c > 0 {
- result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.delete.scheme_in_use.app_error", nil, "Id="+schemeId, http.StatusInternalServerError)
- return result
- }
}
} else if scheme.Scope == model.SCHEME_SCOPE_CHANNEL {
- if c, err := s.GetReplica().SelectInt("SELECT COUNT(*) FROM Channels WHERE SchemeId = :SchemeId", map[string]interface{}{"SchemeId": schemeId}); err != nil {
- result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.channel_count.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
+ if _, err := s.GetReplica().Exec("UPDATE Channels SET SchemeId = '' WHERE SchemeId = :SchemeId", map[string]interface{}{"SchemeId": schemeId}); err != nil {
+ result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.reset_channels.app_error", nil, "Id="+schemeId+", "+err.Error(), http.StatusInternalServerError)
return result
- } else {
- if c > 0 {
- result.Err = model.NewAppError("SqlSchemeStore.Delete", "store.sql_scheme.delete.scheme_in_use.app_error", nil, "Id="+schemeId, http.StatusInternalServerError)
- return result
- }
}
+
+ // Blow away the channel caches.
+ s.Channel().ClearCaches()
}
// Delete the roles belonging to the scheme.