36 lines
819 B
Go
36 lines
819 B
Go
// Package sqlite 提供采购服务的 SQLite 驱动注册。
|
|
package sqlite
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
|
|
"github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
const driverName = "cmbuyer-sqlite3"
|
|
|
|
func init() {
|
|
sql.Register(driverName, &sqlite3.SQLiteDriver{
|
|
ConnectHook: func(connection *sqlite3.SQLiteConn) error {
|
|
_, err := connection.Exec("PRAGMA foreign_keys = ON", nil)
|
|
return err
|
|
},
|
|
})
|
|
}
|
|
|
|
// Open 打开 SQLite 数据源并逐连接启用外键,避免连接池配置遗漏而绕过授权与任务的引用约束。
|
|
func Open(dataSourceName string) (*sql.DB, error) {
|
|
database, err := sql.Open(driverName, dataSourceName)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := database.Ping(); err != nil {
|
|
_ = database.Close()
|
|
return nil, fmt.Errorf("ping SQLite database: %w", err)
|
|
}
|
|
|
|
return database, nil
|
|
}
|