this repo has no description
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Only use INDEXED BY in queries when the driver is a sqlite3 driver (#656)

Addresses #655

authored by

Jaz and committed by
GitHub
3d844cde 678b4ab8

+14 -9
+14 -9
backfill/gormstore.go
··· 65 65 } 66 66 67 67 func (s *Gormstore) loadJobs(ctx context.Context, limit int) error { 68 + enqueuedIndexClause := "" 69 + retryableIndexClause := "" 70 + 71 + // If the DB is a SQLite DB, we can use INDEXED BY to speed up the query 72 + if s.db.Dialector.Name() == "sqlite" { 73 + enqueuedIndexClause = "INDEXED BY enqueued_job_idx" 74 + retryableIndexClause = "INDEXED BY retryable_job_idx" 75 + } 76 + 77 + enqueuedSelect := fmt.Sprintf(`SELECT repo FROM gorm_db_jobs %s WHERE state = 'enqueued' LIMIT ?`, enqueuedIndexClause) 78 + retryableSelect := fmt.Sprintf(`SELECT repo FROM gorm_db_jobs %s WHERE state like 'failed%%' AND (retry_after = NULL OR retry_after < ?) LIMIT ?`, retryableIndexClause) 79 + 68 80 var todo []string 69 - if err := s.db.Raw( 70 - `SELECT repo FROM gorm_db_jobs INDEXED BY enqueued_job_idx WHERE state = 'enqueued' LIMIT ?`, 71 - limit, 72 - ).Scan(&todo).Error; err != nil { 81 + if err := s.db.Raw(enqueuedSelect, limit).Scan(&todo).Error; err != nil { 73 82 return err 74 83 } 75 84 76 85 if len(todo) < limit { 77 86 var moreTodo []string 78 - if err := s.db.Raw( 79 - `SELECT repo FROM gorm_db_jobs INDEXED BY retryable_job_idx WHERE state like 'failed%' AND (retry_after = NULL OR retry_after < ?) LIMIT ?`, 80 - time.Now(), 81 - limit-len(todo), 82 - ).Scan(&moreTodo).Error; err != nil { 87 + if err := s.db.Raw(retryableSelect, time.Now(), limit-len(todo)).Scan(&moreTodo).Error; err != nil { 83 88 return err 84 89 } 85 90 todo = append(todo, moreTodo...)