Skip to content

Commit 2ddb8e5

Browse files
authored
Replace SELECT * with explicit column lists in sqlstore (mattermost#31356)
1 parent 65d3d59 commit 2ddb8e5

6 files changed

Lines changed: 115 additions & 48 deletions

File tree

server/channels/store/sqlstore/retention_policy_store.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -441,8 +441,9 @@ func (s *SqlRetentionPolicyStore) Delete(id string) error {
441441
}
442442

443443
func (s *SqlRetentionPolicyStore) GetChannels(policyId string, offset, limit int) (model.ChannelListWithTeamData, error) {
444-
query := s.getQueryBuilder().Select(`Channels.*, Teams.DisplayName AS TeamDisplayName,
445-
Teams.Name AS TeamName,Teams.UpdateAt AS TeamUpdateAt`).
444+
query := s.getQueryBuilder().
445+
Select("Teams.DisplayName AS TeamDisplayName", "Teams.Name AS TeamName", "Teams.UpdateAt AS TeamUpdateAt").
446+
Columns(channelSliceColumns(true, "Channels")...).
446447
From("RetentionPoliciesChannels").
447448
InnerJoin("Channels ON RetentionPoliciesChannels.ChannelId = Channels.Id").
448449
InnerJoin("Teams ON Channels.TeamId = Teams.Id").
@@ -550,7 +551,7 @@ func (s *SqlRetentionPolicyStore) RemoveChannels(policyId string, channelIds []s
550551

551552
func (s *SqlRetentionPolicyStore) GetTeams(policyId string, offset, limit int) ([]*model.Team, error) {
552553
query := s.getQueryBuilder().
553-
Select("Teams.*").
554+
Select(teamSliceColumns()...).
554555
From("RetentionPoliciesTeams").
555556
InnerJoin("Teams ON RetentionPoliciesTeams.TeamId = Teams.Id").
556557
Where(sq.Eq{"RetentionPoliciesTeams.PolicyId": policyId}).
@@ -858,7 +859,7 @@ func scanRetentionIdsForDeletion(rows *sql.Rows, isPostgres bool) ([]*model.Rete
858859

859860
func (s *SqlRetentionPolicyStore) GetIdsForDeletionByTableName(tableName string, limit int) ([]*model.RetentionIdsForDeletion, error) {
860861
query := s.getQueryBuilder().
861-
Select("*").
862+
Select("Id", "TableName", "Ids").
862863
From("RetentionIdsForDeletion").
863864
Where(
864865
sq.Eq{"TableName": tableName},

server/channels/store/sqlstore/role_store.go

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -383,7 +383,18 @@ func (s *SqlRoleStore) ChannelHigherScopedPermissions(roleNames []string) (map[s
383383

384384
func (s *SqlRoleStore) AllChannelSchemeRoles() ([]*model.Role, error) {
385385
query := s.getQueryBuilder().
386-
Select("Roles.*").
386+
Select(
387+
"Roles.Id",
388+
"Roles.Name",
389+
"Roles.DisplayName",
390+
"Roles.Description",
391+
"Roles.CreateAt",
392+
"Roles.UpdateAt",
393+
"Roles.DeleteAt",
394+
"Roles.Permissions",
395+
"Roles.SchemeManaged",
396+
"Roles.BuiltIn",
397+
).
387398
From("Schemes").
388399
Join("Roles ON Schemes.DefaultChannelGuestRole = Roles.Name OR Schemes.DefaultChannelUserRole = Roles.Name OR Schemes.DefaultChannelAdminRole = Roles.Name").
389400
Where(sq.Eq{"Schemes.Scope": model.SchemeScopeChannel}).
@@ -411,7 +422,18 @@ func (s *SqlRoleStore) AllChannelSchemeRoles() ([]*model.Role, error) {
411422
// ChannelRolesUnderTeamRole finds all of the channel-scheme roles under the team of the given team-scheme role.
412423
func (s *SqlRoleStore) ChannelRolesUnderTeamRole(roleName string) ([]*model.Role, error) {
413424
query := s.getQueryBuilder().
414-
Select("ChannelSchemeRoles.*").
425+
Select(
426+
"ChannelSchemeRoles.Id",
427+
"ChannelSchemeRoles.Name",
428+
"ChannelSchemeRoles.DisplayName",
429+
"ChannelSchemeRoles.Description",
430+
"ChannelSchemeRoles.CreateAt",
431+
"ChannelSchemeRoles.UpdateAt",
432+
"ChannelSchemeRoles.DeleteAt",
433+
"ChannelSchemeRoles.Permissions",
434+
"ChannelSchemeRoles.SchemeManaged",
435+
"ChannelSchemeRoles.BuiltIn",
436+
).
415437
From("Roles AS HigherScopedRoles").
416438
Join("Schemes AS HigherScopedSchemes ON (HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelGuestRole OR HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelUserRole OR HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelAdminRole)").
417439
Join("Teams ON Teams.SchemeId = HigherScopedSchemes.Id").

server/channels/store/sqlstore/scheme_store.go

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -418,7 +418,26 @@ func (s *SqlSchemeStore) GetAllPage(scope string, offset int, limit int) ([]*mod
418418
schemes := []*model.Scheme{}
419419

420420
query := s.getQueryBuilder().
421-
Select("*").
421+
Select(
422+
"Id",
423+
"Name",
424+
"DisplayName",
425+
"Description",
426+
"Scope",
427+
"DefaultTeamAdminRole",
428+
"DefaultTeamUserRole",
429+
"DefaultTeamGuestRole",
430+
"DefaultChannelAdminRole",
431+
"DefaultChannelUserRole",
432+
"DefaultChannelGuestRole",
433+
"CreateAt",
434+
"UpdateAt",
435+
"DeleteAt",
436+
"DefaultPlaybookAdminRole",
437+
"DefaultPlaybookMemberRole",
438+
"DefaultRunAdminRole",
439+
"DefaultRunMemberRole",
440+
).
422441
From("Schemes").
423442
Where(sq.Eq{"DeleteAt": 0}).
424443
OrderBy("CreateAt DESC").

server/channels/store/sqlstore/shared_channel_store.go

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -558,7 +558,23 @@ func (s SqlSharedChannelStore) HasRemote(channelID string, remoteId string) (boo
558558
// shared with the remote.
559559
func (s SqlSharedChannelStore) GetRemoteForUser(remoteId string, userId string) (*model.RemoteCluster, error) {
560560
builder := s.getQueryBuilder().
561-
Select("rc.*").
561+
Select(
562+
"rc.RemoteId",
563+
"rc.RemoteTeamId",
564+
"rc.Name",
565+
"rc.DisplayName",
566+
"rc.SiteURL",
567+
"rc.DefaultTeamId",
568+
"rc.CreateAt",
569+
"rc.DeleteAt",
570+
"rc.LastPingAt",
571+
"rc.Token",
572+
"rc.RemoteToken",
573+
"rc.Topics",
574+
"rc.CreatorId",
575+
"rc.PluginID",
576+
"rc.Options",
577+
).
562578
From("RemoteClusters AS rc").
563579
Join("SharedChannelRemotes AS scr ON rc.RemoteId = scr.RemoteId").
564580
Join("ChannelMembers AS cm ON scr.ChannelId = cm.ChannelId").

server/channels/store/sqlstore/team_store.go

Lines changed: 26 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ type teamMemberWithSchemeRolesList []teamMemberWithSchemeRoles
7272
func teamMemberSliceColumns() []string {
7373
return []string{"TeamId", "UserId", "Roles", "DeleteAt", "SchemeUser", "SchemeAdmin", "SchemeGuest", "CreateAt"}
7474
}
75+
7576
func teamMemberToSlice(member *model.TeamMember) []any {
7677
resultSlice := []any{}
7778
resultSlice = append(resultSlice, member.TeamId)
@@ -207,31 +208,35 @@ func (db teamMemberWithSchemeRolesList) ToModel() []*model.TeamMember {
207208
return tms
208209
}
209210

211+
func teamSliceColumns() []string {
212+
return []string{
213+
"Teams.Id",
214+
"Teams.CreateAt",
215+
"Teams.UpdateAt",
216+
"Teams.DeleteAt",
217+
"Teams.DisplayName",
218+
"Teams.Name",
219+
"Teams.Description",
220+
"Teams.Email",
221+
"Teams.Type",
222+
"Teams.CompanyName",
223+
"Teams.AllowedDomains",
224+
"Teams.InviteId",
225+
"Teams.AllowOpenInvite",
226+
"Teams.LastTeamIconUpdate",
227+
"Teams.SchemeId",
228+
"Teams.GroupConstrained",
229+
"Teams.CloudLimitsArchived",
230+
}
231+
}
232+
210233
func newSqlTeamStore(sqlStore *SqlStore) store.TeamStore {
211234
s := &SqlTeamStore{
212235
SqlStore: sqlStore,
213236
}
214237

215238
s.teamsQuery = s.getQueryBuilder().
216-
Select(
217-
"Teams.Id",
218-
"Teams.CreateAt",
219-
"Teams.UpdateAt",
220-
"Teams.DeleteAt",
221-
"Teams.DisplayName",
222-
"Teams.Name",
223-
"Teams.Description",
224-
"Teams.Email",
225-
"Teams.Type",
226-
"Teams.CompanyName",
227-
"Teams.AllowedDomains",
228-
"Teams.InviteId",
229-
"Teams.AllowOpenInvite",
230-
"Teams.LastTeamIconUpdate",
231-
"Teams.SchemeId",
232-
"Teams.GroupConstrained",
233-
"Teams.CloudLimitsArchived",
234-
).
239+
Select(teamSliceColumns()...).
235240
From("Teams")
236241

237242
s.teamMembersQuery = s.getQueryBuilder().
@@ -415,7 +420,6 @@ func (s SqlTeamStore) GetByNames(names []string) ([]*model.Team, error) {
415420
uniqueNames := utils.RemoveDuplicatesFromStringArray(names)
416421

417422
query, args, err := s.teamsQuery.Where(sq.Eq{"Name": uniqueNames}).ToSql()
418-
419423
if err != nil {
420424
return nil, errors.Wrap(err, "team_tosql")
421425
}
@@ -597,7 +601,6 @@ func (s SqlTeamStore) GetAll() ([]*model.Team, error) {
597601
teams := []*model.Team{}
598602

599603
query, args, err := s.teamsQuery.OrderBy("DisplayName").ToSql()
600-
601604
if err != nil {
602605
return nil, errors.Wrap(err, "team_tosql")
603606
}
@@ -639,7 +642,6 @@ func (s SqlTeamStore) GetAllPage(offset int, limit int, opts *model.TeamSearch)
639642
}
640643

641644
query, args, err := builder.ToSql()
642-
643645
if err != nil {
644646
return nil, errors.Wrap(err, "team_tosql")
645647
}
@@ -721,7 +723,6 @@ func (s SqlTeamStore) AnalyticsTeamCount(opts *model.TeamSearch) (int64, error)
721723

722724
var c int64
723725
err = s.GetReplica().Get(&c, queryString, args...)
724-
725726
if err != nil {
726727
return int64(0), errors.Wrap(err, "failed to count Teams")
727728
}
@@ -1170,13 +1171,11 @@ func (s SqlTeamStore) GetChannelUnreadsForAllTeams(excludeTeamId, userId string)
11701171
Join("ChannelMembers ON Id = ChannelId").
11711172
Where(sq.Eq{"UserId": userId, "DeleteAt": 0}).
11721173
Where(sq.NotEq{"TeamId": excludeTeamId}).ToSql()
1173-
11741174
if err != nil {
11751175
return nil, errors.Wrap(err, "team_tosql")
11761176
}
11771177
data := []*model.ChannelUnread{}
11781178
err = s.GetReplica().Select(&data, query, args...)
1179-
11801179
if err != nil {
11811180
return nil, errors.Wrapf(err, "failed to find Channels with userId=%s and teamId!=%s", userId, excludeTeamId)
11821181
}
@@ -1191,14 +1190,12 @@ func (s SqlTeamStore) GetChannelUnreadsForTeam(teamId, userId string) ([]*model.
11911190
From("Channels").
11921191
Join("ChannelMembers ON Id = ChannelId").
11931192
Where(sq.Eq{"UserId": userId, "TeamId": teamId, "DeleteAt": 0}).ToSql()
1194-
11951193
if err != nil {
11961194
return nil, errors.Wrap(err, "team_tosql")
11971195
}
11981196

11991197
channels := []*model.ChannelUnread{}
12001198
err = s.GetReplica().Select(&channels, query, args...)
1201-
12021199
if err != nil {
12031200
return nil, errors.Wrapf(err, "failed to find Channels with teamId=%s and userId=%s", teamId, userId)
12041201
}
@@ -1283,7 +1280,6 @@ func (s SqlTeamStore) GetTeamsByScheme(schemeId string, offset int, limit int) (
12831280
OrderBy("DisplayName").
12841281
Limit(uint64(limit)).
12851282
Offset(uint64(offset)).ToSql()
1286-
12871283
if err != nil {
12881284
return nil, errors.Wrap(err, "team_tosql")
12891285
}
@@ -1454,7 +1450,6 @@ func (s SqlTeamStore) AnalyticsGetTeamCountForScheme(schemeId string) (int64, er
14541450
Select("count(*)").
14551451
From("Teams").
14561452
Where(sq.Eq{"SchemeId": schemeId, "DeleteAt": 0}).ToSql()
1457-
14581453
if err != nil {
14591454
return 0, errors.Wrap(err, "team_tosql")
14601455
}
@@ -1472,13 +1467,13 @@ func (s SqlTeamStore) AnalyticsGetTeamCountForScheme(schemeId string) (int64, er
14721467
func (s SqlTeamStore) GetAllForExportAfter(limit int, afterId string) ([]*model.TeamForExport, error) {
14731468
data := []*model.TeamForExport{}
14741469
query, args, err := s.getQueryBuilder().
1475-
Select("Teams.*", "Schemes.Name as SchemeName").
1470+
Select(teamSliceColumns()...).
1471+
Column("Schemes.Name as SchemeName").
14761472
From("Teams").
14771473
LeftJoin("Schemes ON Teams.SchemeId = Schemes.Id").
14781474
Where(sq.Gt{"Teams.Id": afterId}).
14791475
OrderBy("Id").
14801476
Limit(uint64(limit)).ToSql()
1481-
14821477
if err != nil {
14831478
return nil, errors.Wrap(err, "team_tosql")
14841479
}
@@ -1499,7 +1494,6 @@ func (s SqlTeamStore) GetUserTeamIds(userId string, allowFromCache bool) ([]stri
14991494
From("TeamMembers").
15001495
Join("Teams ON TeamMembers.TeamId = Teams.Id").
15011496
Where(sq.Eq{"TeamMembers.UserId": userId, "TeamMembers.DeleteAt": 0, "Teams.DeleteAt": 0}).ToSql()
1502-
15031497
if err != nil {
15041498
return []string{}, errors.Wrap(err, "team_tosql")
15051499
}
@@ -1589,7 +1583,6 @@ func (s SqlTeamStore) GetTeamMembersForExport(userId string) ([]*model.TeamMembe
15891583
From("TeamMembers").
15901584
Join("Teams ON TeamMembers.TeamId = Teams.Id").
15911585
Where(sq.Eq{"TeamMembers.UserId": userId, "Teams.DeleteAt": 0}).ToSql()
1592-
15931586
if err != nil {
15941587
return nil, errors.Wrap(err, "team_tosql")
15951588
}

server/channels/store/sqlstore/upload_session_store.go

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,32 @@ import (
1616

1717
type SqlUploadSessionStore struct {
1818
*SqlStore
19+
20+
uploadSessionQuery sq.SelectBuilder
1921
}
2022

2123
func newSqlUploadSessionStore(sqlStore *SqlStore) store.UploadSessionStore {
22-
return &SqlUploadSessionStore{
24+
s := &SqlUploadSessionStore{
2325
SqlStore: sqlStore,
2426
}
27+
28+
s.uploadSessionQuery = s.getQueryBuilder().
29+
Select(
30+
"Id",
31+
"Type",
32+
"CreateAt",
33+
"UserId",
34+
"ChannelId",
35+
"Filename",
36+
"Path",
37+
"FileSize",
38+
"FileOffset",
39+
"RemoteId",
40+
"ReqFileId",
41+
).
42+
From("UploadSessions")
43+
44+
return s
2545
}
2646

2747
func (us SqlUploadSessionStore) Save(session *model.UploadSession) (*model.UploadSession, error) {
@@ -83,9 +103,7 @@ func (us SqlUploadSessionStore) Get(c request.CTX, id string) (*model.UploadSess
83103
if !model.IsValidId(id) {
84104
return nil, errors.New("SqlUploadSessionStore.Get: id is not valid")
85105
}
86-
query, args, err := us.getQueryBuilder().
87-
Select("*").
88-
From("UploadSessions").
106+
query, args, err := us.uploadSessionQuery.
89107
Where(sq.Eq{"Id": id}).
90108
ToSql()
91109
if err != nil {
@@ -102,9 +120,7 @@ func (us SqlUploadSessionStore) Get(c request.CTX, id string) (*model.UploadSess
102120
}
103121

104122
func (us SqlUploadSessionStore) GetForUser(userId string) ([]*model.UploadSession, error) {
105-
query, args, err := us.getQueryBuilder().
106-
Select("*").
107-
From("UploadSessions").
123+
query, args, err := us.uploadSessionQuery.
108124
Where(sq.Eq{"UserId": userId}).
109125
OrderBy("CreateAt ASC").
110126
ToSql()

0 commit comments

Comments
 (0)