mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-29 10:57:44 +09:00 
			
		
		
		
	API: Search Issues, dont show 500 if filter result in empty list (#19244)
* remove error who is none * use setupSessionNoLimit instead of setupSessionWithLimit when no pagination Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		| @@ -1270,7 +1270,7 @@ func sortIssuesSession(sess *xorm.Session, sortType string, priorityRepoID int64 | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
|  |  | ||||||
| func (opts *IssuesOptions) setupSession(sess *xorm.Session) { | func (opts *IssuesOptions) setupSessionWithLimit(sess *xorm.Session) { | ||||||
| 	if opts.Page >= 0 && opts.PageSize > 0 { | 	if opts.Page >= 0 && opts.PageSize > 0 { | ||||||
| 		var start int | 		var start int | ||||||
| 		if opts.Page == 0 { | 		if opts.Page == 0 { | ||||||
| @@ -1280,7 +1280,10 @@ func (opts *IssuesOptions) setupSession(sess *xorm.Session) { | |||||||
| 		} | 		} | ||||||
| 		sess.Limit(opts.PageSize, start) | 		sess.Limit(opts.PageSize, start) | ||||||
| 	} | 	} | ||||||
|  | 	opts.setupSessionNoLimit(sess) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | func (opts *IssuesOptions) setupSessionNoLimit(sess *xorm.Session) { | ||||||
| 	if len(opts.IssueIDs) > 0 { | 	if len(opts.IssueIDs) > 0 { | ||||||
| 		sess.In("issue.id", opts.IssueIDs) | 		sess.In("issue.id", opts.IssueIDs) | ||||||
| 	} | 	} | ||||||
| @@ -1446,7 +1449,7 @@ func CountIssuesByRepo(opts *IssuesOptions) (map[int64]int64, error) { | |||||||
|  |  | ||||||
| 	sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id") | 	sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id") | ||||||
|  |  | ||||||
| 	opts.setupSession(sess) | 	opts.setupSessionNoLimit(sess) | ||||||
|  |  | ||||||
| 	countsSlice := make([]*struct { | 	countsSlice := make([]*struct { | ||||||
| 		RepoID int64 | 		RepoID int64 | ||||||
| @@ -1456,7 +1459,7 @@ func CountIssuesByRepo(opts *IssuesOptions) (map[int64]int64, error) { | |||||||
| 		Select("issue.repo_id AS repo_id, COUNT(*) AS count"). | 		Select("issue.repo_id AS repo_id, COUNT(*) AS count"). | ||||||
| 		Table("issue"). | 		Table("issue"). | ||||||
| 		Find(&countsSlice); err != nil { | 		Find(&countsSlice); err != nil { | ||||||
| 		return nil, err | 		return nil, fmt.Errorf("unable to CountIssuesByRepo: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	countMap := make(map[int64]int64, len(countsSlice)) | 	countMap := make(map[int64]int64, len(countsSlice)) | ||||||
| @@ -1473,14 +1476,14 @@ func GetRepoIDsForIssuesOptions(opts *IssuesOptions, user *user_model.User) ([]i | |||||||
|  |  | ||||||
| 	sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id") | 	sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id") | ||||||
|  |  | ||||||
| 	opts.setupSession(sess) | 	opts.setupSessionNoLimit(sess) | ||||||
|  |  | ||||||
| 	accessCond := accessibleRepositoryCondition(user) | 	accessCond := accessibleRepositoryCondition(user) | ||||||
| 	if err := sess.Where(accessCond). | 	if err := sess.Where(accessCond). | ||||||
| 		Distinct("issue.repo_id"). | 		Distinct("issue.repo_id"). | ||||||
| 		Table("issue"). | 		Table("issue"). | ||||||
| 		Find(&repoIDs); err != nil { | 		Find(&repoIDs); err != nil { | ||||||
| 		return nil, err | 		return nil, fmt.Errorf("unable to GetRepoIDsForIssuesOptions: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return repoIDs, nil | 	return repoIDs, nil | ||||||
| @@ -1491,17 +1494,16 @@ func Issues(opts *IssuesOptions) ([]*Issue, error) { | |||||||
| 	e := db.GetEngine(db.DefaultContext) | 	e := db.GetEngine(db.DefaultContext) | ||||||
|  |  | ||||||
| 	sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id") | 	sess := e.Join("INNER", "repository", "`issue`.repo_id = `repository`.id") | ||||||
| 	opts.setupSession(sess) | 	opts.setupSessionWithLimit(sess) | ||||||
| 	sortIssuesSession(sess, opts.SortType, opts.PriorityRepoID) | 	sortIssuesSession(sess, opts.SortType, opts.PriorityRepoID) | ||||||
|  |  | ||||||
| 	issues := make([]*Issue, 0, opts.ListOptions.PageSize) | 	issues := make([]*Issue, 0, opts.ListOptions.PageSize) | ||||||
| 	if err := sess.Find(&issues); err != nil { | 	if err := sess.Find(&issues); err != nil { | ||||||
| 		return nil, fmt.Errorf("Find: %v", err) | 		return nil, fmt.Errorf("unable to query Issues: %w", err) | ||||||
| 	} | 	} | ||||||
| 	sess.Close() |  | ||||||
|  |  | ||||||
| 	if err := IssueList(issues).LoadAttributes(); err != nil { | 	if err := IssueList(issues).LoadAttributes(); err != nil { | ||||||
| 		return nil, fmt.Errorf("LoadAttributes: %v", err) | 		return nil, fmt.Errorf("unable to LoadAttributes for Issues: %w", err) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return issues, nil | 	return issues, nil | ||||||
| @@ -1512,18 +1514,17 @@ func CountIssues(opts *IssuesOptions) (int64, error) { | |||||||
| 	e := db.GetEngine(db.DefaultContext) | 	e := db.GetEngine(db.DefaultContext) | ||||||
|  |  | ||||||
| 	countsSlice := make([]*struct { | 	countsSlice := make([]*struct { | ||||||
| 		RepoID int64 | 		Count int64 | ||||||
| 		Count  int64 |  | ||||||
| 	}, 0, 1) | 	}, 0, 1) | ||||||
|  |  | ||||||
| 	sess := e.Select("COUNT(issue.id) AS count").Table("issue") | 	sess := e.Select("COUNT(issue.id) AS count").Table("issue") | ||||||
| 	sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id") | 	sess.Join("INNER", "repository", "`issue`.repo_id = `repository`.id") | ||||||
| 	opts.setupSession(sess) | 	opts.setupSessionNoLimit(sess) | ||||||
| 	if err := sess.Find(&countsSlice); err != nil { | 	if err := sess.Find(&countsSlice); err != nil { | ||||||
| 		return 0, fmt.Errorf("Find: %v", err) | 		return 0, fmt.Errorf("unable to CountIssues: %w", err) | ||||||
| 	} | 	} | ||||||
| 	if len(countsSlice) < 1 { | 	if len(countsSlice) != 1 { | ||||||
| 		return 0, fmt.Errorf("there is less than one result sql record") | 		return 0, fmt.Errorf("unable to get one row result when CountIssues, row count=%d", len(countsSlice)) | ||||||
| 	} | 	} | ||||||
| 	return countsSlice[0].Count, nil | 	return countsSlice[0].Count, nil | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user