From f302b9844e83593ca5f1a0345f640bc2522629fc Mon Sep 17 00:00:00 2001 From: Jesse Hallam Date: Mon, 12 May 2025 15:03:02 -0300 Subject: [PATCH] migrate groupsBySyncableBaseQuery (#30926) --- server/channels/store/sqlstore/group_store.go | 46 +++++++++++-------- 1 file changed, 27 insertions(+), 19 deletions(-) diff --git a/server/channels/store/sqlstore/group_store.go b/server/channels/store/sqlstore/group_store.go index 22ea78b517..0f4d66b4a0 100644 --- a/server/channels/store/sqlstore/group_store.go +++ b/server/channels/store/sqlstore/group_store.go @@ -1284,34 +1284,42 @@ func (s *SqlGroupStore) ChannelMembersToRemove(channelID *string) ([]*model.Chan } func (s *SqlGroupStore) groupsBySyncableBaseQuery(st model.GroupSyncableType, t selectType, syncableID string, opts model.GroupSearchOpts) sq.SelectBuilder { - selectStrs := map[selectType]string{ - selectGroups: "UserGroups.*, gs.SchemeAdmin AS SyncableSchemeAdmin", - selectCountGroups: "COUNT(*)", + var query sq.SelectBuilder + switch t { + case selectGroups: + query = s.userGroupsSelectQuery. + Column("gs.SchemeAdmin AS SyncableSchemeAdmin") + case selectCountGroups: + query = s.getQueryBuilder(). + Select("COUNT(*)"). + From("UserGroups") } - var table string - var idCol string if st == model.GroupSyncableTypeTeam { - table = "GroupTeams" - idCol = "TeamId" + query = query. + Join("GroupTeams gs ON gs.GroupId = UserGroups.Id"). + Where(sq.Eq{ + "gs.TeamId": syncableID, + "gs.DeleteAt": 0, + }) } else { - table = "GroupChannels" - idCol = "ChannelId" + query = query. + Join("GroupChannels gs ON gs.GroupId = UserGroups.Id"). + Where(sq.Eq{ + "gs.ChannelId": syncableID, + "gs.DeleteAt": 0, + }) } - query := s.getQueryBuilder(). - Select(selectStrs[t]). - From(fmt.Sprintf("%s gs", table)). - LeftJoin("UserGroups ON gs.GroupId = UserGroups.Id"). - Where(fmt.Sprintf("UserGroups.DeleteAt = 0 AND gs.%s = ? AND gs.DeleteAt = 0", idCol), syncableID) + query = query. + Where(sq.Eq{ + "UserGroups.DeleteAt": 0, + }) if opts.IncludeMemberCount && t == selectGroups { - query = s.getQueryBuilder(). - Select(fmt.Sprintf("UserGroups.*, coalesce(Members.MemberCount, 0) AS MemberCount, Group%ss.SchemeAdmin AS SyncableSchemeAdmin", st)). - From("UserGroups"). + query = query. + Column("coalesce(Members.MemberCount, 0) AS MemberCount"). LeftJoin("(SELECT GroupMembers.GroupId, COUNT(*) AS MemberCount FROM GroupMembers LEFT JOIN Users ON Users.Id = GroupMembers.UserId WHERE GroupMembers.DeleteAt = 0 AND Users.DeleteAt = 0 GROUP BY GroupId) AS Members ON Members.GroupId = UserGroups.Id"). - LeftJoin(fmt.Sprintf("%[1]s ON %[1]s.GroupId = UserGroups.Id", table)). - Where(fmt.Sprintf("UserGroups.DeleteAt = 0 AND %[1]s.DeleteAt = 0 AND %[1]s.%[2]s = ?", table, idCol), syncableID). OrderBy("UserGroups.DisplayName") }