···6565}
66666767func (s *Gormstore) loadJobs(ctx context.Context, limit int) error {
6868+ enqueuedIndexClause := ""
6969+ retryableIndexClause := ""
7070+7171+ // If the DB is a SQLite DB, we can use INDEXED BY to speed up the query
7272+ if s.db.Dialector.Name() == "sqlite" {
7373+ enqueuedIndexClause = "INDEXED BY enqueued_job_idx"
7474+ retryableIndexClause = "INDEXED BY retryable_job_idx"
7575+ }
7676+7777+ enqueuedSelect := fmt.Sprintf(`SELECT repo FROM gorm_db_jobs %s WHERE state = 'enqueued' LIMIT ?`, enqueuedIndexClause)
7878+ retryableSelect := fmt.Sprintf(`SELECT repo FROM gorm_db_jobs %s WHERE state like 'failed%%' AND (retry_after = NULL OR retry_after < ?) LIMIT ?`, retryableIndexClause)
7979+6880 var todo []string
6969- if err := s.db.Raw(
7070- `SELECT repo FROM gorm_db_jobs INDEXED BY enqueued_job_idx WHERE state = 'enqueued' LIMIT ?`,
7171- limit,
7272- ).Scan(&todo).Error; err != nil {
8181+ if err := s.db.Raw(enqueuedSelect, limit).Scan(&todo).Error; err != nil {
7382 return err
7483 }
75847685 if len(todo) < limit {
7786 var moreTodo []string
7878- if err := s.db.Raw(
7979- `SELECT repo FROM gorm_db_jobs INDEXED BY retryable_job_idx WHERE state like 'failed%' AND (retry_after = NULL OR retry_after < ?) LIMIT ?`,
8080- time.Now(),
8181- limit-len(todo),
8282- ).Scan(&moreTodo).Error; err != nil {
8787+ if err := s.db.Raw(retryableSelect, time.Now(), limit-len(todo)).Scan(&moreTodo).Error; err != nil {
8388 return err
8489 }
8590 todo = append(todo, moreTodo...)