fix(sqlite): database is locked issue
This commit is contained in:
@@ -22,6 +22,7 @@ func NewSQLiteDB[C any](file string) (*SQLiteDB[C], error) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
return &SQLiteDB[C]{}, err
|
return &SQLiteDB[C]{}, err
|
||||||
}
|
}
|
||||||
|
db.SetMaxOpenConns(1)
|
||||||
return &SQLiteDB[C]{db}, nil
|
return &SQLiteDB[C]{db}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -201,6 +202,8 @@ func (db *SQLiteDB[C]) selectMessages(query string, args ...any) ([]Message, err
|
|||||||
SELECT GuildID, ChannelID, ID, Language, OriginChannelID, OriginID FROM messages
|
SELECT GuildID, ChannelID, ID, Language, OriginChannelID, OriginID FROM messages
|
||||||
%s
|
%s
|
||||||
`, query), args...)
|
`, query), args...)
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []Message{}, errors.Join(ErrInternal, err)
|
return []Message{}, errors.Join(ErrInternal, err)
|
||||||
}
|
}
|
||||||
@@ -435,6 +438,8 @@ func (db *SQLiteDB[C]) selectChannels(query string, args ...any) ([]Channel, err
|
|||||||
SELECT GuildID, ID, Language FROM channels
|
SELECT GuildID, ID, Language FROM channels
|
||||||
%s
|
%s
|
||||||
`, query), args...)
|
`, query), args...)
|
||||||
|
defer r.Close()
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return []Channel{}, errors.Join(ErrInternal, err)
|
return []Channel{}, errors.Join(ErrInternal, err)
|
||||||
}
|
}
|
||||||
|
|||||||
8
main.go
8
main.go
@@ -25,7 +25,11 @@ const (
|
|||||||
// var translation_provider = flag.String("tprovider", string(GOOGLE_TRANSLATE), "Translation provider")
|
// var translation_provider = flag.String("tprovider", string(GOOGLE_TRANSLATE), "Translation provider")
|
||||||
var (
|
var (
|
||||||
database_file = flag.String("db", "file:./guild.db", "SQLite database file/location")
|
database_file = flag.String("db", "file:./guild.db", "SQLite database file/location")
|
||||||
discord_token = flag.String("token", os.Getenv("DISCORD_TOKEN"), "Discord bot authentication token")
|
discord_token = flag.String(
|
||||||
|
"token",
|
||||||
|
os.Getenv("DISCORD_TOKEN"),
|
||||||
|
"Discord bot authentication token",
|
||||||
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
@@ -39,7 +43,7 @@ func main() {
|
|||||||
ReportCaller: true,
|
ReportCaller: true,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
db, err := guilddb.NewSQLiteDB[gconf.ConfigString](*database_file)
|
db, err := guilddb.NewSQLiteDB[gconf.ConfigString](*database_file + "?_busy_timeout=5000")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Error("Failed to open database connection", slog.String("err", err.Error()))
|
logger.Error("Failed to open database connection", slog.String("err", err.Error()))
|
||||||
return
|
return
|
||||||
|
|||||||
Reference in New Issue
Block a user