@@ -1336,6 +1336,36 @@ type IssueStatsOptions struct {
1336
1336
1337
1337
// GetIssueStats returns issue statistic information by given conditions.
1338
1338
func GetIssueStats (opts * IssueStatsOptions ) (* IssueStats , error ) {
1339
+ if len (opts .IssueIDs ) <= maxQueryParameters {
1340
+ return getIssueStatsChunk (opts , opts .IssueIDs )
1341
+ }
1342
+
1343
+ // If too long a list of IDs is provided, we get the statistics in
1344
+ // smaller chunks and get accumulates. Note: this could potentially
1345
+ // get us invalid results. The alternative is to insert the list of
1346
+ // ids in a temporary table and join from them.
1347
+ accum := & IssueStats {}
1348
+ for i := 0 ; i < len (opts .IssueIDs ); {
1349
+ chunk := i + maxQueryParameters
1350
+ if chunk > len (opts .IssueIDs ) {
1351
+ chunk = len (opts .IssueIDs )
1352
+ }
1353
+ stats , err := getIssueStatsChunk (opts , opts .IssueIDs [i :chunk ])
1354
+ if err != nil {
1355
+ return nil , err
1356
+ }
1357
+ accum .OpenCount += stats .OpenCount
1358
+ accum .ClosedCount += stats .ClosedCount
1359
+ accum .YourRepositoriesCount += stats .YourRepositoriesCount
1360
+ accum .AssignCount += stats .AssignCount
1361
+ accum .CreateCount += stats .CreateCount
1362
+ accum .OpenCount += stats .MentionCount
1363
+ i = chunk
1364
+ }
1365
+ return accum , nil
1366
+ }
1367
+
1368
+ func getIssueStatsChunk (opts * IssueStatsOptions , issueIDs []int64 ) (* IssueStats , error ) {
1339
1369
stats := & IssueStats {}
1340
1370
1341
1371
countSession := func (opts * IssueStatsOptions ) * xorm.Session {
0 commit comments