Replace SELECT * with explicit column lists in sqlstore (#31356)

Этот коммит содержится в:
Jesse Hallam
2025-06-11 18:16:05 -03:00
коммит произвёл GitHub
родитель 65d3d5984f
Коммит 2ddb8e5d0a
6 изменённых файлов: 115 добавлений и 48 удалений

Просмотреть файл

@@ -441,8 +441,9 @@ func (s *SqlRetentionPolicyStore) Delete(id string) error {
} }
func (s *SqlRetentionPolicyStore) GetChannels(policyId string, offset, limit int) (model.ChannelListWithTeamData, error) { func (s *SqlRetentionPolicyStore) GetChannels(policyId string, offset, limit int) (model.ChannelListWithTeamData, error) {
query := s.getQueryBuilder().Select(`Channels.*, Teams.DisplayName AS TeamDisplayName, query := s.getQueryBuilder().
Teams.Name AS TeamName,Teams.UpdateAt AS TeamUpdateAt`). Select("Teams.DisplayName AS TeamDisplayName", "Teams.Name AS TeamName", "Teams.UpdateAt AS TeamUpdateAt").
Columns(channelSliceColumns(true, "Channels")...).
From("RetentionPoliciesChannels"). From("RetentionPoliciesChannels").
InnerJoin("Channels ON RetentionPoliciesChannels.ChannelId = Channels.Id"). InnerJoin("Channels ON RetentionPoliciesChannels.ChannelId = Channels.Id").
InnerJoin("Teams ON Channels.TeamId = Teams.Id"). InnerJoin("Teams ON Channels.TeamId = Teams.Id").
@@ -550,7 +551,7 @@ func (s *SqlRetentionPolicyStore) RemoveChannels(policyId string, channelIds []s
func (s *SqlRetentionPolicyStore) GetTeams(policyId string, offset, limit int) ([]*model.Team, error) { func (s *SqlRetentionPolicyStore) GetTeams(policyId string, offset, limit int) ([]*model.Team, error) {
query := s.getQueryBuilder(). query := s.getQueryBuilder().
Select("Teams.*"). Select(teamSliceColumns()...).
From("RetentionPoliciesTeams"). From("RetentionPoliciesTeams").
InnerJoin("Teams ON RetentionPoliciesTeams.TeamId = Teams.Id"). InnerJoin("Teams ON RetentionPoliciesTeams.TeamId = Teams.Id").
Where(sq.Eq{"RetentionPoliciesTeams.PolicyId": policyId}). Where(sq.Eq{"RetentionPoliciesTeams.PolicyId": policyId}).
@@ -858,7 +859,7 @@ func scanRetentionIdsForDeletion(rows *sql.Rows, isPostgres bool) ([]*model.Rete
func (s *SqlRetentionPolicyStore) GetIdsForDeletionByTableName(tableName string, limit int) ([]*model.RetentionIdsForDeletion, error) { func (s *SqlRetentionPolicyStore) GetIdsForDeletionByTableName(tableName string, limit int) ([]*model.RetentionIdsForDeletion, error) {
query := s.getQueryBuilder(). query := s.getQueryBuilder().
Select("*"). Select("Id", "TableName", "Ids").
From("RetentionIdsForDeletion"). From("RetentionIdsForDeletion").
Where( Where(
sq.Eq{"TableName": tableName}, sq.Eq{"TableName": tableName},

Просмотреть файл

@@ -383,7 +383,18 @@ func (s *SqlRoleStore) ChannelHigherScopedPermissions(roleNames []string) (map[s
func (s *SqlRoleStore) AllChannelSchemeRoles() ([]*model.Role, error) { func (s *SqlRoleStore) AllChannelSchemeRoles() ([]*model.Role, error) {
query := s.getQueryBuilder(). query := s.getQueryBuilder().
Select("Roles.*"). Select(
"Roles.Id",
"Roles.Name",
"Roles.DisplayName",
"Roles.Description",
"Roles.CreateAt",
"Roles.UpdateAt",
"Roles.DeleteAt",
"Roles.Permissions",
"Roles.SchemeManaged",
"Roles.BuiltIn",
).
From("Schemes"). From("Schemes").
Join("Roles ON Schemes.DefaultChannelGuestRole = Roles.Name OR Schemes.DefaultChannelUserRole = Roles.Name OR Schemes.DefaultChannelAdminRole = Roles.Name"). Join("Roles ON Schemes.DefaultChannelGuestRole = Roles.Name OR Schemes.DefaultChannelUserRole = Roles.Name OR Schemes.DefaultChannelAdminRole = Roles.Name").
Where(sq.Eq{"Schemes.Scope": model.SchemeScopeChannel}). Where(sq.Eq{"Schemes.Scope": model.SchemeScopeChannel}).
@@ -411,7 +422,18 @@ func (s *SqlRoleStore) AllChannelSchemeRoles() ([]*model.Role, error) {
// ChannelRolesUnderTeamRole finds all of the channel-scheme roles under the team of the given team-scheme role. // ChannelRolesUnderTeamRole finds all of the channel-scheme roles under the team of the given team-scheme role.
func (s *SqlRoleStore) ChannelRolesUnderTeamRole(roleName string) ([]*model.Role, error) { func (s *SqlRoleStore) ChannelRolesUnderTeamRole(roleName string) ([]*model.Role, error) {
query := s.getQueryBuilder(). query := s.getQueryBuilder().
Select("ChannelSchemeRoles.*"). Select(
"ChannelSchemeRoles.Id",
"ChannelSchemeRoles.Name",
"ChannelSchemeRoles.DisplayName",
"ChannelSchemeRoles.Description",
"ChannelSchemeRoles.CreateAt",
"ChannelSchemeRoles.UpdateAt",
"ChannelSchemeRoles.DeleteAt",
"ChannelSchemeRoles.Permissions",
"ChannelSchemeRoles.SchemeManaged",
"ChannelSchemeRoles.BuiltIn",
).
From("Roles AS HigherScopedRoles"). From("Roles AS HigherScopedRoles").
Join("Schemes AS HigherScopedSchemes ON (HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelGuestRole OR HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelUserRole OR HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelAdminRole)"). Join("Schemes AS HigherScopedSchemes ON (HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelGuestRole OR HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelUserRole OR HigherScopedRoles.Name = HigherScopedSchemes.DefaultChannelAdminRole)").
Join("Teams ON Teams.SchemeId = HigherScopedSchemes.Id"). Join("Teams ON Teams.SchemeId = HigherScopedSchemes.Id").

Просмотреть файл

@@ -418,7 +418,26 @@ func (s *SqlSchemeStore) GetAllPage(scope string, offset int, limit int) ([]*mod
schemes := []*model.Scheme{} schemes := []*model.Scheme{}
query := s.getQueryBuilder(). query := s.getQueryBuilder().
Select("*"). Select(
"Id",
"Name",
"DisplayName",
"Description",
"Scope",
"DefaultTeamAdminRole",
"DefaultTeamUserRole",
"DefaultTeamGuestRole",
"DefaultChannelAdminRole",
"DefaultChannelUserRole",
"DefaultChannelGuestRole",
"CreateAt",
"UpdateAt",
"DeleteAt",
"DefaultPlaybookAdminRole",
"DefaultPlaybookMemberRole",
"DefaultRunAdminRole",
"DefaultRunMemberRole",
).
From("Schemes"). From("Schemes").
Where(sq.Eq{"DeleteAt": 0}). Where(sq.Eq{"DeleteAt": 0}).
OrderBy("CreateAt DESC"). OrderBy("CreateAt DESC").

Просмотреть файл

@@ -558,7 +558,23 @@ func (s SqlSharedChannelStore) HasRemote(channelID string, remoteId string) (boo
// shared with the remote. // shared with the remote.
func (s SqlSharedChannelStore) GetRemoteForUser(remoteId string, userId string) (*model.RemoteCluster, error) { func (s SqlSharedChannelStore) GetRemoteForUser(remoteId string, userId string) (*model.RemoteCluster, error) {
builder := s.getQueryBuilder(). builder := s.getQueryBuilder().
Select("rc.*"). Select(
"rc.RemoteId",
"rc.RemoteTeamId",
"rc.Name",
"rc.DisplayName",
"rc.SiteURL",
"rc.DefaultTeamId",
"rc.CreateAt",
"rc.DeleteAt",
"rc.LastPingAt",
"rc.Token",
"rc.RemoteToken",
"rc.Topics",
"rc.CreatorId",
"rc.PluginID",
"rc.Options",
).
From("RemoteClusters AS rc"). From("RemoteClusters AS rc").
Join("SharedChannelRemotes AS scr ON rc.RemoteId = scr.RemoteId"). Join("SharedChannelRemotes AS scr ON rc.RemoteId = scr.RemoteId").
Join("ChannelMembers AS cm ON scr.ChannelId = cm.ChannelId"). Join("ChannelMembers AS cm ON scr.ChannelId = cm.ChannelId").

Просмотреть файл

@@ -72,6 +72,7 @@ type teamMemberWithSchemeRolesList []teamMemberWithSchemeRoles
func teamMemberSliceColumns() []string { func teamMemberSliceColumns() []string {
return []string{"TeamId", "UserId", "Roles", "DeleteAt", "SchemeUser", "SchemeAdmin", "SchemeGuest", "CreateAt"} return []string{"TeamId", "UserId", "Roles", "DeleteAt", "SchemeUser", "SchemeAdmin", "SchemeGuest", "CreateAt"}
} }
func teamMemberToSlice(member *model.TeamMember) []any { func teamMemberToSlice(member *model.TeamMember) []any {
resultSlice := []any{} resultSlice := []any{}
resultSlice = append(resultSlice, member.TeamId) resultSlice = append(resultSlice, member.TeamId)
@@ -207,31 +208,35 @@ func (db teamMemberWithSchemeRolesList) ToModel() []*model.TeamMember {
return tms return tms
} }
func teamSliceColumns() []string {
return []string{
"Teams.Id",
"Teams.CreateAt",
"Teams.UpdateAt",
"Teams.DeleteAt",
"Teams.DisplayName",
"Teams.Name",
"Teams.Description",
"Teams.Email",
"Teams.Type",
"Teams.CompanyName",
"Teams.AllowedDomains",
"Teams.InviteId",
"Teams.AllowOpenInvite",
"Teams.LastTeamIconUpdate",
"Teams.SchemeId",
"Teams.GroupConstrained",
"Teams.CloudLimitsArchived",
}
}
func newSqlTeamStore(sqlStore *SqlStore) store.TeamStore { func newSqlTeamStore(sqlStore *SqlStore) store.TeamStore {
s := &SqlTeamStore{ s := &SqlTeamStore{
SqlStore: sqlStore, SqlStore: sqlStore,
} }
s.teamsQuery = s.getQueryBuilder(). s.teamsQuery = s.getQueryBuilder().
Select( Select(teamSliceColumns()...).
"Teams.Id",
"Teams.CreateAt",
"Teams.UpdateAt",
"Teams.DeleteAt",
"Teams.DisplayName",
"Teams.Name",
"Teams.Description",
"Teams.Email",
"Teams.Type",
"Teams.CompanyName",
"Teams.AllowedDomains",
"Teams.InviteId",
"Teams.AllowOpenInvite",
"Teams.LastTeamIconUpdate",
"Teams.SchemeId",
"Teams.GroupConstrained",
"Teams.CloudLimitsArchived",
).
From("Teams") From("Teams")
s.teamMembersQuery = s.getQueryBuilder(). s.teamMembersQuery = s.getQueryBuilder().
@@ -415,7 +420,6 @@ func (s SqlTeamStore) GetByNames(names []string) ([]*model.Team, error) {
uniqueNames := utils.RemoveDuplicatesFromStringArray(names) uniqueNames := utils.RemoveDuplicatesFromStringArray(names)
query, args, err := s.teamsQuery.Where(sq.Eq{"Name": uniqueNames}).ToSql() query, args, err := s.teamsQuery.Where(sq.Eq{"Name": uniqueNames}).ToSql()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "team_tosql") return nil, errors.Wrap(err, "team_tosql")
} }
@@ -597,7 +601,6 @@ func (s SqlTeamStore) GetAll() ([]*model.Team, error) {
teams := []*model.Team{} teams := []*model.Team{}
query, args, err := s.teamsQuery.OrderBy("DisplayName").ToSql() query, args, err := s.teamsQuery.OrderBy("DisplayName").ToSql()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "team_tosql") return nil, errors.Wrap(err, "team_tosql")
} }
@@ -639,7 +642,6 @@ func (s SqlTeamStore) GetAllPage(offset int, limit int, opts *model.TeamSearch)
} }
query, args, err := builder.ToSql() query, args, err := builder.ToSql()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "team_tosql") return nil, errors.Wrap(err, "team_tosql")
} }
@@ -721,7 +723,6 @@ func (s SqlTeamStore) AnalyticsTeamCount(opts *model.TeamSearch) (int64, error)
var c int64 var c int64
err = s.GetReplica().Get(&c, queryString, args...) err = s.GetReplica().Get(&c, queryString, args...)
if err != nil { if err != nil {
return int64(0), errors.Wrap(err, "failed to count Teams") return int64(0), errors.Wrap(err, "failed to count Teams")
} }
@@ -1170,13 +1171,11 @@ func (s SqlTeamStore) GetChannelUnreadsForAllTeams(excludeTeamId, userId string)
Join("ChannelMembers ON Id = ChannelId"). Join("ChannelMembers ON Id = ChannelId").
Where(sq.Eq{"UserId": userId, "DeleteAt": 0}). Where(sq.Eq{"UserId": userId, "DeleteAt": 0}).
Where(sq.NotEq{"TeamId": excludeTeamId}).ToSql() Where(sq.NotEq{"TeamId": excludeTeamId}).ToSql()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "team_tosql") return nil, errors.Wrap(err, "team_tosql")
} }
data := []*model.ChannelUnread{} data := []*model.ChannelUnread{}
err = s.GetReplica().Select(&data, query, args...) err = s.GetReplica().Select(&data, query, args...)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to find Channels with userId=%s and teamId!=%s", userId, excludeTeamId) return nil, errors.Wrapf(err, "failed to find Channels with userId=%s and teamId!=%s", userId, excludeTeamId)
} }
@@ -1191,14 +1190,12 @@ func (s SqlTeamStore) GetChannelUnreadsForTeam(teamId, userId string) ([]*model.
From("Channels"). From("Channels").
Join("ChannelMembers ON Id = ChannelId"). Join("ChannelMembers ON Id = ChannelId").
Where(sq.Eq{"UserId": userId, "TeamId": teamId, "DeleteAt": 0}).ToSql() Where(sq.Eq{"UserId": userId, "TeamId": teamId, "DeleteAt": 0}).ToSql()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "team_tosql") return nil, errors.Wrap(err, "team_tosql")
} }
channels := []*model.ChannelUnread{} channels := []*model.ChannelUnread{}
err = s.GetReplica().Select(&channels, query, args...) err = s.GetReplica().Select(&channels, query, args...)
if err != nil { if err != nil {
return nil, errors.Wrapf(err, "failed to find Channels with teamId=%s and userId=%s", teamId, userId) return nil, errors.Wrapf(err, "failed to find Channels with teamId=%s and userId=%s", teamId, userId)
} }
@@ -1283,7 +1280,6 @@ func (s SqlTeamStore) GetTeamsByScheme(schemeId string, offset int, limit int) (
OrderBy("DisplayName"). OrderBy("DisplayName").
Limit(uint64(limit)). Limit(uint64(limit)).
Offset(uint64(offset)).ToSql() Offset(uint64(offset)).ToSql()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "team_tosql") return nil, errors.Wrap(err, "team_tosql")
} }
@@ -1454,7 +1450,6 @@ func (s SqlTeamStore) AnalyticsGetTeamCountForScheme(schemeId string) (int64, er
Select("count(*)"). Select("count(*)").
From("Teams"). From("Teams").
Where(sq.Eq{"SchemeId": schemeId, "DeleteAt": 0}).ToSql() Where(sq.Eq{"SchemeId": schemeId, "DeleteAt": 0}).ToSql()
if err != nil { if err != nil {
return 0, errors.Wrap(err, "team_tosql") return 0, errors.Wrap(err, "team_tosql")
} }
@@ -1472,13 +1467,13 @@ func (s SqlTeamStore) AnalyticsGetTeamCountForScheme(schemeId string) (int64, er
func (s SqlTeamStore) GetAllForExportAfter(limit int, afterId string) ([]*model.TeamForExport, error) { func (s SqlTeamStore) GetAllForExportAfter(limit int, afterId string) ([]*model.TeamForExport, error) {
data := []*model.TeamForExport{} data := []*model.TeamForExport{}
query, args, err := s.getQueryBuilder(). query, args, err := s.getQueryBuilder().
Select("Teams.*", "Schemes.Name as SchemeName"). Select(teamSliceColumns()...).
Column("Schemes.Name as SchemeName").
From("Teams"). From("Teams").
LeftJoin("Schemes ON Teams.SchemeId = Schemes.Id"). LeftJoin("Schemes ON Teams.SchemeId = Schemes.Id").
Where(sq.Gt{"Teams.Id": afterId}). Where(sq.Gt{"Teams.Id": afterId}).
OrderBy("Id"). OrderBy("Id").
Limit(uint64(limit)).ToSql() Limit(uint64(limit)).ToSql()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "team_tosql") return nil, errors.Wrap(err, "team_tosql")
} }
@@ -1499,7 +1494,6 @@ func (s SqlTeamStore) GetUserTeamIds(userId string, allowFromCache bool) ([]stri
From("TeamMembers"). From("TeamMembers").
Join("Teams ON TeamMembers.TeamId = Teams.Id"). Join("Teams ON TeamMembers.TeamId = Teams.Id").
Where(sq.Eq{"TeamMembers.UserId": userId, "TeamMembers.DeleteAt": 0, "Teams.DeleteAt": 0}).ToSql() Where(sq.Eq{"TeamMembers.UserId": userId, "TeamMembers.DeleteAt": 0, "Teams.DeleteAt": 0}).ToSql()
if err != nil { if err != nil {
return []string{}, errors.Wrap(err, "team_tosql") return []string{}, errors.Wrap(err, "team_tosql")
} }
@@ -1589,7 +1583,6 @@ func (s SqlTeamStore) GetTeamMembersForExport(userId string) ([]*model.TeamMembe
From("TeamMembers"). From("TeamMembers").
Join("Teams ON TeamMembers.TeamId = Teams.Id"). Join("Teams ON TeamMembers.TeamId = Teams.Id").
Where(sq.Eq{"TeamMembers.UserId": userId, "Teams.DeleteAt": 0}).ToSql() Where(sq.Eq{"TeamMembers.UserId": userId, "Teams.DeleteAt": 0}).ToSql()
if err != nil { if err != nil {
return nil, errors.Wrap(err, "team_tosql") return nil, errors.Wrap(err, "team_tosql")
} }

Просмотреть файл

@@ -16,12 +16,32 @@ import (
type SqlUploadSessionStore struct { type SqlUploadSessionStore struct {
*SqlStore *SqlStore
uploadSessionQuery sq.SelectBuilder
} }
func newSqlUploadSessionStore(sqlStore *SqlStore) store.UploadSessionStore { func newSqlUploadSessionStore(sqlStore *SqlStore) store.UploadSessionStore {
return &SqlUploadSessionStore{ s := &SqlUploadSessionStore{
SqlStore: sqlStore, SqlStore: sqlStore,
} }
s.uploadSessionQuery = s.getQueryBuilder().
Select(
"Id",
"Type",
"CreateAt",
"UserId",
"ChannelId",
"Filename",
"Path",
"FileSize",
"FileOffset",
"RemoteId",
"ReqFileId",
).
From("UploadSessions")
return s
} }
func (us SqlUploadSessionStore) Save(session *model.UploadSession) (*model.UploadSession, error) { 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
if !model.IsValidId(id) { if !model.IsValidId(id) {
return nil, errors.New("SqlUploadSessionStore.Get: id is not valid") return nil, errors.New("SqlUploadSessionStore.Get: id is not valid")
} }
query, args, err := us.getQueryBuilder(). query, args, err := us.uploadSessionQuery.
Select("*").
From("UploadSessions").
Where(sq.Eq{"Id": id}). Where(sq.Eq{"Id": id}).
ToSql() ToSql()
if err != nil { if err != nil {
@@ -102,9 +120,7 @@ func (us SqlUploadSessionStore) Get(c request.CTX, id string) (*model.UploadSess
} }
func (us SqlUploadSessionStore) GetForUser(userId string) ([]*model.UploadSession, error) { func (us SqlUploadSessionStore) GetForUser(userId string) ([]*model.UploadSession, error) {
query, args, err := us.getQueryBuilder(). query, args, err := us.uploadSessionQuery.
Select("*").
From("UploadSessions").
Where(sq.Eq{"UserId": userId}). Where(sq.Eq{"UserId": userId}).
OrderBy("CreateAt ASC"). OrderBy("CreateAt ASC").
ToSql() ToSql()