refactor new engine

This commit is contained in:
Lunny Xiao 2020-03-04 17:14:11 +08:00
parent 51d6afa330
commit aed961a5a9
No known key found for this signature in database
GPG Key ID: C3B7C91B632F738A
10 changed files with 23 additions and 46 deletions

View File

@ -31,7 +31,7 @@ type URI struct {
// Dialect represents a kind of database
type Dialect interface {
Init(*core.DB, *URI /*, string, string*/) error
Init(*core.DB, *URI) error
URI() *URI
DB() *core.DB
DBType() schemas.DBType

View File

@ -210,8 +210,8 @@ type mssql struct {
Base
}
func (db *mssql) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
return db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
func (db *mssql) Init(d *core.DB, uri *URI) error {
return db.Base.Init(d, db, uri)
}
func (db *mssql) SQLType(c *schemas.Column) string {

View File

@ -177,8 +177,8 @@ type mysql struct {
rowFormat string
}
func (db *mysql) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
return db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
func (db *mysql) Init(d *core.DB, uri *URI) error {
return db.Base.Init(d, db, uri)
}
func (db *mysql) SetParams(params map[string]string) {

View File

@ -504,8 +504,8 @@ type oracle struct {
Base
}
func (db *oracle) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
return db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
func (db *oracle) Init(d *core.DB, uri *URI) error {
return db.Base.Init(d, db, uri)
}
func (db *oracle) SQLType(c *schemas.Column) string {

View File

@ -774,8 +774,8 @@ type postgres struct {
Base
}
func (db *postgres) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
err := db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
func (db *postgres) Init(d *core.DB, uri *URI) error {
err := db.Base.Init(d, db, uri)
if err != nil {
return err
}

View File

@ -149,8 +149,8 @@ type sqlite3 struct {
Base
}
func (db *sqlite3) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
return db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
func (db *sqlite3) Init(d *core.DB, uri *URI) error {
return db.Base.Init(d, db, uri)
}
func (db *sqlite3) SQLType(c *schemas.Column) string {

View File

@ -64,7 +64,7 @@ func (engine *Engine) BufferSize(size int) *Session {
// ShowSQL show SQL statement or not on logger if log level is great than INFO
func (engine *Engine) ShowSQL(show ...bool) {
engine.logger.ShowSQL(show...)
engine.db.Logger = engine.logger
engine.DB().Logger = engine.logger
}
// Logger return the logger interface
@ -82,7 +82,7 @@ func (engine *Engine) SetLogger(logger interface{}) {
realLogger = t
}
engine.logger = realLogger
engine.db.Logger = realLogger
engine.DB().Logger = realLogger
}
// SetLogLevel sets the logger level
@ -167,17 +167,17 @@ func (engine *Engine) AutoIncrStr() string {
// SetConnMaxLifetime sets the maximum amount of time a connection may be reused.
func (engine *Engine) SetConnMaxLifetime(d time.Duration) {
engine.db.SetConnMaxLifetime(d)
engine.DB().SetConnMaxLifetime(d)
}
// SetMaxOpenConns is only available for go 1.2+
func (engine *Engine) SetMaxOpenConns(conns int) {
engine.db.SetMaxOpenConns(conns)
engine.DB().SetMaxOpenConns(conns)
}
// SetMaxIdleConns set the max idle connections on pool, default is 2
func (engine *Engine) SetMaxIdleConns(conns int) {
engine.db.SetMaxIdleConns(conns)
engine.DB().SetMaxIdleConns(conns)
}
// SetDefaultCacher set the default cacher. Xorm's default not enable cacher.
@ -218,7 +218,7 @@ func (engine *Engine) NewDB() (*core.DB, error) {
// DB return the wrapper of sql.DB
func (engine *Engine) DB() *core.DB {
return engine.db
return engine.dialect.DB()
}
// Dialect return database dialect
@ -235,7 +235,7 @@ func (engine *Engine) NewSession() *Session {
// Close the engine
func (engine *Engine) Close() error {
return engine.db.Close()
return engine.DB().Close()
}
// Ping tests if database is alive

View File

@ -284,7 +284,7 @@ func (session *Session) Having(conditions string) *Session {
// DB db return the wrapper of sql.DB
func (session *Session) DB() *core.DB {
if session.db == nil {
session.db = session.engine.db
session.db = session.engine.DB()
session.stmtCache = make(map[uint32]*core.Stmt, 0)
}
return session.db

View File

@ -34,7 +34,7 @@ func (session *Session) Rollback() error {
session.isAutoCommit = true
start := time.Now()
needSQL := session.engine.db.NeedLogSQL(session.ctx)
needSQL := session.DB().NeedLogSQL(session.ctx)
if needSQL {
session.engine.logger.BeforeSQL(log.LogContext{
Ctx: session.ctx,
@ -63,7 +63,7 @@ func (session *Session) Commit() error {
session.isAutoCommit = true
start := time.Now()
needSQL := session.engine.db.NeedLogSQL(session.ctx)
needSQL := session.DB().NeedLogSQL(session.ctx)
if needSQL {
session.engine.logger.BeforeSQL(log.LogContext{
Ctx: session.ctx,

27
xorm.go
View File

@ -8,13 +8,11 @@ package xorm
import (
"context"
"fmt"
"os"
"runtime"
"time"
"xorm.io/xorm/caches"
"xorm.io/xorm/core"
"xorm.io/xorm/dialects"
"xorm.io/xorm/log"
"xorm.io/xorm/names"
@ -34,27 +32,7 @@ func close(engine *Engine) {
// NewEngine new a db manager according to the parameter. Currently support four
// drivers
func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
driver := dialects.QueryDriver(driverName)
if driver == nil {
return nil, fmt.Errorf("Unsupported driver name: %v", driverName)
}
uri, err := driver.Parse(driverName, dataSourceName)
if err != nil {
return nil, err
}
dialect := dialects.QueryDialect(uri.DBType)
if dialect == nil {
return nil, fmt.Errorf("Unsupported dialect type: %v", uri.DBType)
}
db, err := core.Open(driverName, dataSourceName)
if err != nil {
return nil, err
}
err = dialect.Init(db, uri /*, driverName, dataSourceName*/)
dialect, err := dialects.OpenDialect(driverName, dataSourceName)
if err != nil {
return nil, err
}
@ -64,7 +42,6 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
tagParser := tags.NewParser("xorm", dialect, mapper, mapper, cacherMgr)
engine := &Engine{
db: db,
dialect: dialect,
TZLocation: time.Local,
defaultContext: context.Background(),
@ -74,7 +51,7 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
dataSourceName: dataSourceName,
}
if uri.DBType == schemas.SQLITE {
if dialect.URI().DBType == schemas.SQLITE {
engine.DatabaseTZ = time.UTC
} else {
engine.DatabaseTZ = time.Local