Files
yatm/internal/executor/scan/entry_batch_test.go
T
Samuel Cui 4fef653b71 Prepare YATM v1.0.0-alpha.2
Unify file queries and Scan execution, retain indexed Identical results,
improve Job and Preview workflows, and verify release packaging.
2026-10-05 19:08:49 +08:00

37 lines
1.1 KiB
Go

package scan
import (
"context"
"fmt"
"path/filepath"
"testing"
"github.com/samuelncui/yatm/internal/resource"
"github.com/stretchr/testify/require"
)
func TestEntryPersistenceBoundsSQLIndependentlyOfResultBatch(t *testing.T) {
db, err := resource.OpenSQLite(filepath.Join(t.TempDir(), "entries.db"))
require.NoError(t, err)
sqlDB, err := db.DB()
require.NoError(t, err)
defer func() { require.NoError(t, sqlDB.Close()) }()
require.NoError(t, db.AutoMigrate(&Entry{}))
r := &runner{db: db}
// A valid large ACP batch exceeds SQLite's parameter limit as one INSERT.
rows := make([]*Entry, 2000)
for i := range rows {
rows[i] = &Entry{ID: int64(i + 1), Path: fmt.Sprintf("file-%04d", i), Size: int64(i)}
}
require.NoError(t, r.saveEntries(context.Background(), rows))
for _, row := range rows {
row.Size++
}
require.NoError(t, r.saveEntries(context.Background(), rows))
var totals struct{ Count, Size int64 }
require.NoError(t, db.Model(&Entry{}).Select("COUNT(*) AS count, SUM(size) AS size").Scan(&totals).Error)
require.EqualValues(t, len(rows), totals.Count)
require.EqualValues(t, len(rows)*(len(rows)+1)/2, totals.Size)
}