fix(store): закрытие набора строк в бэкфилле через defer
This commit is contained in:
+26
-18
@@ -457,6 +457,12 @@ func prefixedMessageColumns(alias string) string {
|
|||||||
return strings.Join(columns, ", ")
|
return strings.Join(columns, ", ")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// searchBackfillItem — сообщение, которому нужно заполнить content_lower.
|
||||||
|
type searchBackfillItem struct {
|
||||||
|
id uint64
|
||||||
|
content string
|
||||||
|
}
|
||||||
|
|
||||||
// BackfillSearchIndex заполняет нормализованный текст у старых сообщений:
|
// BackfillSearchIndex заполняет нормализованный текст у старых сообщений:
|
||||||
// нужен для поиска подстроки без учёта регистра (кириллица в SQLite lower()
|
// нужен для поиска подстроки без учёта регистра (кириллица в SQLite lower()
|
||||||
// не приводится). Вызывается один раз при старте, порциями.
|
// не приводится). Вызывается один раз при старте, порциями.
|
||||||
@@ -469,24 +475,8 @@ func (s *Store) BackfillSearchIndex(ctx context.Context, limit int) (int, error)
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
type pending struct {
|
items, err := collectSearchBackfill(rows, limit)
|
||||||
id uint64
|
if err != nil {
|
||||||
content string
|
|
||||||
}
|
|
||||||
items := make([]pending, 0, limit)
|
|
||||||
for rows.Next() {
|
|
||||||
var item pending
|
|
||||||
if err := rows.Scan(&item.id, &item.content); err != nil {
|
|
||||||
_ = rows.Close()
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
items = append(items, item)
|
|
||||||
}
|
|
||||||
if err := rows.Err(); err != nil {
|
|
||||||
_ = rows.Close()
|
|
||||||
return 0, err
|
|
||||||
}
|
|
||||||
if err := rows.Close(); err != nil {
|
|
||||||
return 0, err
|
return 0, err
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -502,6 +492,24 @@ func (s *Store) BackfillSearchIndex(ctx context.Context, limit int) (int, error)
|
|||||||
return updated, nil
|
return updated, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// collectSearchBackfill читает порцию сообщений и закрывает набор строк.
|
||||||
|
func collectSearchBackfill(rows *sql.Rows, limit int) ([]searchBackfillItem, error) {
|
||||||
|
defer func() { _ = rows.Close() }()
|
||||||
|
|
||||||
|
items := make([]searchBackfillItem, 0, limit)
|
||||||
|
for rows.Next() {
|
||||||
|
var item searchBackfillItem
|
||||||
|
if err := rows.Scan(&item.id, &item.content); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
items = append(items, item)
|
||||||
|
}
|
||||||
|
if err := rows.Err(); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
return items, nil
|
||||||
|
}
|
||||||
|
|
||||||
func scanMessage(scanner interface{ Scan(...any) error }) (*Message, error) {
|
func scanMessage(scanner interface{ Scan(...any) error }) (*Message, error) {
|
||||||
var (
|
var (
|
||||||
message Message
|
message Message
|
||||||
|
|||||||
Reference in New Issue
Block a user