aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorUnknwon <u@gogs.io>2017-03-03 18:26:51 -0500
committerUnknwon <u@gogs.io>2017-03-03 18:26:51 -0500
commitebd95dd082705f42f864f99ac050e29c9c6a4dbd (patch)
tree51508c0ec75285e0544fa7cea2cc2799765c1c39
parentf7b7d008b684a3475a1834b8b574e5ce082a723c (diff)
models/org: reduce to 2 SQL executions for GetOrgIDsByUserID
This also addresses #4231. It is now ignoring nonexistent organizations returned from 'org_user' table. This was a bug caused in older version that didn't cleanup 'org_user' table when delete an organization.
-rw-r--r--gogs.go2
-rw-r--r--models/org.go19
-rw-r--r--models/user.go15
-rw-r--r--templates/.VERSION2
4 files changed, 17 insertions, 21 deletions
diff --git a/gogs.go b/gogs.go
index 17a919d5..23fae832 100644
--- a/gogs.go
+++ b/gogs.go
@@ -16,7 +16,7 @@ import (
"github.com/gogits/gogs/modules/setting"
)
-const APP_VER = "0.10.4.0302"
+const APP_VER = "0.10.4.0303"
func init() {
setting.AppVer = APP_VER
diff --git a/models/org.go b/models/org.go
index 1deba7f4..9bf57ad9 100644
--- a/models/org.go
+++ b/models/org.go
@@ -303,16 +303,15 @@ func GetOwnedOrgsByUserIDDesc(userID int64, desc string) ([]*User, error) {
return getOwnedOrgsByUserID(sess.Desc(desc), userID)
}
-// GetOrgUsersByUserID returns all organization-user relations by user ID.
-func GetOrgUsersByUserID(uid int64, all bool) ([]*OrgUser, error) {
- ous := make([]*OrgUser, 0, 10)
- sess := x.Where("uid=?", uid)
- if !all {
- // Only show public organizations
- sess.And("is_public=?", true)
- }
- err := sess.Find(&ous)
- return ous, err
+// GetOrgIDsByUserID returns a list of organization IDs that user belongs to.
+// The showPrivate indicates whether to include private memberships.
+func GetOrgIDsByUserID(userID int64, showPrivate bool) ([]int64, error) {
+ orgIDs := make([]int64, 0, 5)
+ sess := x.Table("org_user").Where("uid = ?", userID)
+ if !showPrivate {
+ sess.And("is_public = ?", true)
+ }
+ return orgIDs, sess.Distinct("org_id").Find(&orgIDs)
}
func getOrgUsersByOrgID(e Engine, orgID int64) ([]*OrgUser, error) {
diff --git a/models/user.go b/models/user.go
index 5c93b077..02c192d2 100644
--- a/models/user.go
+++ b/models/user.go
@@ -448,18 +448,15 @@ func (u *User) GetOwnedOrganizations() (err error) {
}
// GetOrganizations returns all organizations that user belongs to.
-func (u *User) GetOrganizations(all bool) error {
- ous, err := GetOrgUsersByUserID(u.ID, all)
+func (u *User) GetOrganizations(showPrivate bool) error {
+ orgIDs, err := GetOrgIDsByUserID(u.ID, showPrivate)
if err != nil {
- return err
+ return fmt.Errorf("GetOrgIDsByUserID: %v", err)
}
- u.Orgs = make([]*User, len(ous))
- for i, ou := range ous {
- u.Orgs[i], err = GetUserByID(ou.OrgID)
- if err != nil {
- return err
- }
+ u.Orgs = make([]*User, 0, len(orgIDs))
+ if err = x.In("id", orgIDs).Find(&u.Orgs); err != nil {
+ return err
}
return nil
}
diff --git a/templates/.VERSION b/templates/.VERSION
index 132f1d90..b3c57e4d 100644
--- a/templates/.VERSION
+++ b/templates/.VERSION
@@ -1 +1 @@
-0.10.4.0302 \ No newline at end of file
+0.10.4.0303 \ No newline at end of file