2022-07-06 23:19:05 +02:00
|
|
|
//go:build cgo
|
|
|
|
|
|
|
|
package core
|
|
|
|
|
|
|
|
import (
|
2023-05-27 08:04:01 +02:00
|
|
|
"database/sql"
|
|
|
|
|
|
|
|
"github.com/mattn/go-sqlite3"
|
2022-12-11 17:32:56 +02:00
|
|
|
"github.com/pocketbase/dbx"
|
2022-07-06 23:19:05 +02:00
|
|
|
)
|
|
|
|
|
2023-05-27 08:04:01 +02:00
|
|
|
func init() {
|
|
|
|
// Registers the sqlite3 driver with a ConnectHook so that we can
|
|
|
|
// initialize the default PRAGMAs.
|
|
|
|
//
|
|
|
|
// Note 1: we don't define the PRAGMA as part of the dsn string
|
|
|
|
// because not all pragmas are available.
|
|
|
|
//
|
|
|
|
// Note 2: the busy_timeout pragma must be first because
|
|
|
|
// the connection needs to be set to block on busy before WAL mode
|
|
|
|
// is set in case it hasn't been already set by another connection.
|
2023-05-27 08:24:18 +02:00
|
|
|
sql.Register("pb_sqlite3",
|
2023-05-27 08:04:01 +02:00
|
|
|
&sqlite3.SQLiteDriver{
|
|
|
|
ConnectHook: func(conn *sqlite3.SQLiteConn) error {
|
2023-05-27 08:07:38 +02:00
|
|
|
_, err := conn.Exec(`
|
2023-05-27 08:04:01 +02:00
|
|
|
PRAGMA busy_timeout = 10000;
|
|
|
|
PRAGMA journal_mode = WAL;
|
|
|
|
PRAGMA journal_size_limit = 200000000;
|
|
|
|
PRAGMA synchronous = NORMAL;
|
|
|
|
PRAGMA foreign_keys = ON;
|
2023-07-21 22:24:36 +02:00
|
|
|
PRAGMA temp_store = MEMORY;
|
2023-07-24 09:35:42 +02:00
|
|
|
PRAGMA cache_size = -16000;
|
2023-05-27 08:04:01 +02:00
|
|
|
`, nil)
|
|
|
|
|
2023-05-27 08:07:38 +02:00
|
|
|
return err
|
2023-05-27 08:04:01 +02:00
|
|
|
},
|
|
|
|
},
|
|
|
|
)
|
2023-05-27 08:24:18 +02:00
|
|
|
|
|
|
|
dbx.BuilderFuncMap["pb_sqlite3"] = dbx.BuilderFuncMap["sqlite3"]
|
2023-05-27 08:04:01 +02:00
|
|
|
}
|
|
|
|
|
2022-07-06 23:19:05 +02:00
|
|
|
func connectDB(dbPath string) (*dbx.DB, error) {
|
2023-05-27 08:24:18 +02:00
|
|
|
db, err := dbx.Open("pb_sqlite3", dbPath)
|
2022-12-15 16:42:35 +02:00
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
2022-07-06 23:19:05 +02:00
|
|
|
}
|
|
|
|
|
2022-12-15 16:42:35 +02:00
|
|
|
return db, nil
|
2022-07-06 23:19:05 +02:00
|
|
|
}
|