mirror of
https://github.com/injoyai/tdx.git
synced 2025-11-26 21:25:35 +08:00
119 lines
2.8 KiB
Go
119 lines
2.8 KiB
Go
package xorms
|
|
|
|
import (
|
|
_ "github.com/glebarez/go-sqlite"
|
|
_ "github.com/go-sql-driver/mysql"
|
|
"os"
|
|
"path/filepath"
|
|
"time"
|
|
"xorm.io/core"
|
|
"xorm.io/xorm"
|
|
"xorm.io/xorm/schemas"
|
|
)
|
|
|
|
func NewMysql(dsn string, options ...Option) (*Engine, error) {
|
|
return New("mysql", dsn, options...)
|
|
}
|
|
|
|
func NewSqlite(filename string, options ...Option) (*Engine, error) {
|
|
dir, _ := filepath.Split(filename)
|
|
_ = os.MkdirAll(dir, 0777)
|
|
//sqlite是文件数据库,只能打开一次(即一个连接)
|
|
options = append(options, WithMaxOpenConns(1))
|
|
return New("sqlite", filename, options...)
|
|
}
|
|
|
|
/*
|
|
New 需要手动引用驱动
|
|
mysql _ "github.com/go-sql-driver/mysql"
|
|
sqlite _ "github.com/glebarez/go-sqlite"
|
|
sqlserver _ "github.com/denisenkom/go-mssqldb"
|
|
*/
|
|
func New(Type, dsn string, options ...Option) (*Engine, error) {
|
|
db, err := xorm.NewEngine(Type, dsn)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
//默认同步字段
|
|
WithSyncField(true)(db)
|
|
for _, v := range options {
|
|
v(db)
|
|
}
|
|
return &Engine{Engine: db}, nil
|
|
}
|
|
|
|
type Engine struct {
|
|
*xorm.Engine
|
|
}
|
|
|
|
func (this *Engine) TableName(v any) string {
|
|
return this.Engine.TableName(v)
|
|
}
|
|
|
|
func (this *Engine) Tables() []*schemas.Table {
|
|
list, _ := this.DBMetas()
|
|
return list
|
|
}
|
|
|
|
// SetTablePrefix 前缀
|
|
func (this *Engine) SetTablePrefix(s string) *Engine {
|
|
this.SetTableMapper(core.NewPrefixMapper(core.SameMapper{}, s))
|
|
return this
|
|
}
|
|
|
|
// SetSyncField 字段同步
|
|
func (this *Engine) SetSyncField() *Engine {
|
|
this.SetMapper(core.SameMapper{})
|
|
return this
|
|
}
|
|
|
|
// SetConnMaxLifetime 设置连接超时时间(超时会断开连接)
|
|
func (this *Engine) SetConnMaxLifetime(d time.Duration) *Engine {
|
|
this.DB().SetConnMaxLifetime(d)
|
|
return this
|
|
}
|
|
|
|
// SetMaxIdleConns 设置空闲数(一直连接不断开)
|
|
func (this *Engine) SetMaxIdleConns(n int) *Engine {
|
|
this.DB().SetMaxIdleConns(n)
|
|
return this
|
|
}
|
|
|
|
// SetMaxOpenConns 设置连接数(超出最大数量会等待)
|
|
func (this *Engine) SetMaxOpenConns(n int) *Engine {
|
|
this.DB().SetMaxOpenConns(n)
|
|
return this
|
|
}
|
|
|
|
// NewSession 新建自动关闭事务
|
|
func (this *Engine) NewSession() *Session {
|
|
return newSession(this.Engine.Where(""))
|
|
}
|
|
|
|
func (this *Engine) SessionFunc(fn func(session *xorm.Session) error) error {
|
|
return NewSessionFunc(this.Engine, fn)
|
|
}
|
|
|
|
func (this *Engine) Like(param, arg string) *Session {
|
|
return newSession(this.Engine.Where(param+" like ?", "%"+arg+"%"))
|
|
}
|
|
|
|
func (this *Engine) Desc(colNames ...string) *Session {
|
|
return newSession(this.Engine.Desc(colNames...))
|
|
}
|
|
|
|
func (this *Engine) Asc(colNames ...string) *Session {
|
|
return newSession(this.Engine.Asc(colNames...))
|
|
}
|
|
|
|
func (this *Engine) Limit(limit int, start ...int) *Session {
|
|
if limit > 0 {
|
|
return newSession(this.Engine.Limit(limit, start...))
|
|
}
|
|
return newSession(this.Engine.Where(""))
|
|
}
|
|
|
|
func (this *Engine) Where(query any, args ...any) *Session {
|
|
return newSession(this.Engine.Where(query, args...))
|
|
}
|