2024-01-19 08:59:35 +00:00
|
|
|
|
package sqlite
|
|
|
|
|
|
|
|
|
|
|
|
import (
|
2025-05-22 23:29:50 +08:00
|
|
|
|
"context"
|
2024-01-19 08:59:35 +00:00
|
|
|
|
"database/sql"
|
|
|
|
|
|
"errors"
|
|
|
|
|
|
"mayfly-go/internal/db/dbm/dbi"
|
2024-12-08 13:04:23 +08:00
|
|
|
|
"mayfly-go/pkg/utils/collx"
|
2024-01-19 08:59:35 +00:00
|
|
|
|
"os"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2024-01-24 17:01:17 +08:00
|
|
|
|
func init() {
|
2024-12-08 13:04:23 +08:00
|
|
|
|
dbi.Register(DbTypeSqlite, new(Meta))
|
2024-01-19 08:59:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-12-08 13:04:23 +08:00
|
|
|
|
const (
|
|
|
|
|
|
DbTypeSqlite dbi.DbType = "sqlite"
|
|
|
|
|
|
)
|
|
|
|
|
|
|
2024-10-20 03:52:23 +00:00
|
|
|
|
type Meta struct {
|
2024-01-19 08:59:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2025-05-22 23:29:50 +08:00
|
|
|
|
func (md *Meta) GetSqlDb(ctx context.Context, d *dbi.DbInfo) (*sql.DB, error) {
|
2024-01-19 08:59:35 +00:00
|
|
|
|
// 用host字段来存sqlite的文件路径
|
|
|
|
|
|
// 检查文件是否存在,否则报错,基于sqlite会自动创建文件,为了服务器文件安全,所以先确定文件存在再连接,不自动创建
|
|
|
|
|
|
if _, err := os.Stat(d.Host); err != nil {
|
|
|
|
|
|
return nil, errors.New("数据库文件不存在")
|
|
|
|
|
|
}
|
2024-03-15 09:01:51 +00:00
|
|
|
|
|
|
|
|
|
|
db, err := sql.Open("sqlite", d.Host)
|
|
|
|
|
|
if err != nil {
|
|
|
|
|
|
return nil, err
|
|
|
|
|
|
}
|
|
|
|
|
|
_, err = db.Exec("PRAGMA busy_timeout = 50000;")
|
|
|
|
|
|
return db, err
|
2024-01-19 08:59:35 +00:00
|
|
|
|
}
|
|
|
|
|
|
|
2024-10-20 03:52:23 +00:00
|
|
|
|
func (sm *Meta) GetDialect(conn *dbi.DbConn) dbi.Dialect {
|
2024-03-15 13:31:53 +08:00
|
|
|
|
return &SqliteDialect{dc: conn}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2024-11-01 17:27:22 +08:00
|
|
|
|
func (sm *Meta) GetMetadata(conn *dbi.DbConn) dbi.Metadata {
|
|
|
|
|
|
return &SqliteMetadata{dc: conn}
|
2024-01-19 08:59:35 +00:00
|
|
|
|
}
|
2024-12-08 13:04:23 +08:00
|
|
|
|
|
|
|
|
|
|
func (sm *Meta) GetDbDataTypes() []*dbi.DbDataType {
|
|
|
|
|
|
return collx.AsArray(
|
|
|
|
|
|
Integer, Real,
|
|
|
|
|
|
Text,
|
|
|
|
|
|
Blob,
|
|
|
|
|
|
DateTime, Date, Time,
|
|
|
|
|
|
)
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
func (sm *Meta) GetCommonTypeConverter() dbi.CommonTypeConverter {
|
|
|
|
|
|
return &commonTypeConverter{}
|
|
|
|
|
|
}
|