Просмотр исходного кода

perf(storage): extract a query from a cursor lock

The fetchFeedCounter query should happen before the the db.Query call, so that
a single database connection can be (re)used, instead of using a second one.
jvoisin 1 неделя назад
Родитель
Сommit
9151dc5377
1 измененных файлов с 5 добавлено и 5 удалено
  1. 5 5
      internal/storage/feed_query_builder.go

+ 5 - 5
internal/storage/feed_query_builder.go

@@ -194,16 +194,16 @@ func (f *feedQueryBuilder) GetFeeds() (model.Feeds, error) {
 
 	query = fmt.Sprintf(query, f.buildCondition(), f.buildSorting())
 
-	rows, err := f.store.db.Query(query, f.args...)
+	readCounters, unreadCounters, err := f.fetchFeedCounter()
 	if err != nil {
-		return nil, fmt.Errorf(`store: unable to fetch feeds: %w`, err)
+		return nil, err
 	}
-	defer rows.Close()
 
-	readCounters, unreadCounters, err := f.fetchFeedCounter()
+	rows, err := f.store.db.Query(query, f.args...)
 	if err != nil {
-		return nil, err
+		return nil, fmt.Errorf(`store: unable to fetch feeds: %w`, err)
 	}
+	defer rows.Close()
 
 	feeds := make(model.Feeds, 0)
 	for rows.Next() {