fc86edd94c
- .claude/CLAUDE.md - .claude/rules/create_agent.md - agents/_specials/father-bot/prompts/system.md - agents/_template/config.yaml - agents/_template_robot/config.yaml - cmd/agentctl/autoavatar.go - cmd/launcher/sqlite.go - dev-scripts/_common.sh - dev-scripts/agent/create-full.sh - dev-scripts/agent/delete-full.sh - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
39 lines
887 B
Go
39 lines
887 B
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"database/sql/driver"
|
|
|
|
moderncsqlite "modernc.org/sqlite"
|
|
)
|
|
|
|
func init() {
|
|
for _, name := range sql.Drivers() {
|
|
if name == "sqlite3" {
|
|
return
|
|
}
|
|
}
|
|
d := &moderncsqlite.Driver{}
|
|
d.RegisterConnectionHook(sqlitePragmaHook)
|
|
sql.Register("sqlite3", d)
|
|
}
|
|
|
|
// sqlitePragmaHook sets WAL journal mode and a 5-second busy timeout on
|
|
// every new SQLite connection. This prevents SQLITE_BUSY errors when
|
|
// multiple goroutines write concurrently (e.g. mautrix crypto sync +
|
|
// memory/knowledge stores).
|
|
func sqlitePragmaHook(conn moderncsqlite.ExecQuerierContext, _ string) error {
|
|
ctx := context.Background()
|
|
pragmas := []string{
|
|
"PRAGMA journal_mode=WAL",
|
|
"PRAGMA busy_timeout=5000",
|
|
}
|
|
for _, p := range pragmas {
|
|
if _, err := conn.ExecContext(ctx, p, []driver.NamedValue{}); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
return nil
|
|
}
|