code: func (q *Query) SelectAndCount(values ...interface{}) (count int, firstErr error) {
  	if q.stickyErr != nil {
  		return 0, q.stickyErr
  	}
  
  	var wg sync.WaitGroup
  	var mu sync.Mutex
  
  	if q.limit >= 0 {
  		wg.Add(1)
  		go func() {
  			defer wg.Done()
  			err := q.Select(values...)
  			if err != nil {
  				mu.Lock()
  				if firstErr == nil {
  					firstErr = err
  				}
  				mu.Unlock()
  			}
  		}()
  	}
  
  	wg.Add(1)
  	go func() {
  		defer wg.Done()
  		var err error
  		count, err = q.Count()
  		if err != nil {
  			mu.Lock()
  			if firstErr == nil {
  				firstErr = err
  			}
  			mu.Unlock()
  		}
  	}()
  
  	wg.Wait()
  	return count, firstErr
  }
docs: // SelectAndCount runs Select and Count in two goroutines,
  // waits for them to finish and returns the result. If query limit is -1
  // it does not select any data and only counts the results.