From 55ae78208e38eb92d916c0b3c45c4e9cebfc14c9 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Tue, 14 Feb 2017 11:46:46 +0800 Subject: [PATCH] Small optimization for getTeamIDs (#919) * small optimization for getTeamIDs * rename getOrgTeamIDs to getUserTeamIDs and remove orderby --- models/models.go | 1 + models/org.go | 22 ++++++++++++---------- 2 files changed, 13 insertions(+), 10 deletions(-) diff --git a/models/models.go b/models/models.go index 7f0ef5954..27b49755a 100644 --- a/models/models.go +++ b/models/models.go @@ -30,6 +30,7 @@ import ( // Engine represents a xorm engine or session. type Engine interface { + Table(tableNameOrBean interface{}) *xorm.Session Count(interface{}) (int64, error) Decr(column string, arg ...interface{}) *xorm.Session Delete(interface{}) (int64, error) diff --git a/models/org.go b/models/org.go index f68c2b9fc..6da54300c 100644 --- a/models/org.go +++ b/models/org.go @@ -563,18 +563,20 @@ func (org *User) getUserTeams(e Engine, userID int64, cols ...string) ([]*Team, Find(&teams) } +func (org *User) getUserTeamIDs(e Engine, userID int64) ([]int64, error) { + teamIDs := make([]int64, 0, org.NumTeams) + return teamIDs, e. + Table("team"). + Cols("team.id"). + Where("`team_user`.org_id = ?", org.ID). + Join("INNER", "team_user", "`team_user`.team_id = team.id"). + And("`team_user`.uid = ?", userID). + Find(&teamIDs) +} + // GetUserTeamIDs returns of all team IDs of the organization that user is member of. func (org *User) GetUserTeamIDs(userID int64) ([]int64, error) { - teams, err := org.getUserTeams(x, userID, "team.id") - if err != nil { - return nil, fmt.Errorf("getUserTeams [%d]: %v", userID, err) - } - - teamIDs := make([]int64, len(teams)) - for i := range teams { - teamIDs[i] = teams[i].ID - } - return teamIDs, nil + return org.getUserTeamIDs(x, userID) } // GetUserTeams returns all teams that belong to user,