Files
cpa-plugin/internal/repository/sqlite_query_scale_test.go
2026-08-15 22:31:12 +08:00

69 lines
2.1 KiB
Go

package repository
import (
"context"
"os"
"path/filepath"
"strings"
"testing"
"time"
"billing/internal/collection"
)
func TestSQLiteUsageQueryAtMillionRows(t *testing.T) {
if os.Getenv("CPA_EXT_MILLION_TEST") != "1" {
t.Skip("set CPA_EXT_MILLION_TEST=1 to run the million-row query check")
}
store, err := OpenSQLiteUsage(filepath.Join(t.TempDir(), "usage.db"))
if err != nil {
t.Fatal(err)
}
defer store.Close()
started := time.Now()
_, err = store.db.Exec(`
WITH RECURSIVE sequence(value) AS (
SELECT 1 UNION ALL SELECT value+1 FROM sequence WHERE value<1000000
)
INSERT INTO request_detail_index
(lifecycle_request_id, requested_at, managed_key_id, model, result, auth_id, endpoint_kind, request_id)
SELECT 'load-' || value,
printf('2026-08-%02dT%02d:%02d:%02d.000000000Z', 1 + ((value / 86400) % 15), (value / 3600) % 24, (value / 60) % 60, value % 60),
'key-' || (value % 5), 'model-' || (value % 3),
CASE WHEN value % 17=0 THEN 'failed' ELSE 'succeeded' END,
'auth-' || (value % 2), 'responses', 'load-' || value
FROM sequence`)
if err != nil {
t.Fatal(err)
}
t.Logf("seeded one million indexed details in %s", time.Since(started))
started = time.Now()
page, err := store.QueryUsage(context.Background(), collection.UsageQuery{Page: 600, PageSize: 100, KeyID: "key-1", Model: "model-1"})
if err != nil {
t.Fatal(err)
}
if page.Total == 0 || len(page.Records) == 0 {
t.Fatalf("deep filtered page is empty: %+v", page)
}
t.Logf("counted and loaded deep filtered page in %s", time.Since(started))
rows, err := store.db.Query(`EXPLAIN QUERY PLAN SELECT id FROM request_detail_index d WHERE d.managed_key_id=? ORDER BY d.requested_at DESC, d.id DESC LIMIT 100 OFFSET 900000`, "key-1")
if err != nil {
t.Fatal(err)
}
defer rows.Close()
var plan strings.Builder
for rows.Next() {
var id, parent, unused int
var detail string
if err := rows.Scan(&id, &parent, &unused, &detail); err != nil {
t.Fatal(err)
}
plan.WriteString(detail)
}
if !strings.Contains(plan.String(), "idx_request_detail_key") {
t.Fatalf("key query did not use projection index: %s", plan.String())
}
}