refactor new engine
This commit is contained in:
parent
51d6afa330
commit
aed961a5a9
|
@ -31,7 +31,7 @@ type URI struct {
|
||||||
|
|
||||||
// Dialect represents a kind of database
|
// Dialect represents a kind of database
|
||||||
type Dialect interface {
|
type Dialect interface {
|
||||||
Init(*core.DB, *URI /*, string, string*/) error
|
Init(*core.DB, *URI) error
|
||||||
URI() *URI
|
URI() *URI
|
||||||
DB() *core.DB
|
DB() *core.DB
|
||||||
DBType() schemas.DBType
|
DBType() schemas.DBType
|
||||||
|
|
|
@ -210,8 +210,8 @@ type mssql struct {
|
||||||
Base
|
Base
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *mssql) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
|
func (db *mssql) Init(d *core.DB, uri *URI) error {
|
||||||
return db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
|
return db.Base.Init(d, db, uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *mssql) SQLType(c *schemas.Column) string {
|
func (db *mssql) SQLType(c *schemas.Column) string {
|
||||||
|
|
|
@ -177,8 +177,8 @@ type mysql struct {
|
||||||
rowFormat string
|
rowFormat string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *mysql) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
|
func (db *mysql) Init(d *core.DB, uri *URI) error {
|
||||||
return db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
|
return db.Base.Init(d, db, uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *mysql) SetParams(params map[string]string) {
|
func (db *mysql) SetParams(params map[string]string) {
|
||||||
|
|
|
@ -504,8 +504,8 @@ type oracle struct {
|
||||||
Base
|
Base
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *oracle) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
|
func (db *oracle) Init(d *core.DB, uri *URI) error {
|
||||||
return db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
|
return db.Base.Init(d, db, uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *oracle) SQLType(c *schemas.Column) string {
|
func (db *oracle) SQLType(c *schemas.Column) string {
|
||||||
|
|
|
@ -774,8 +774,8 @@ type postgres struct {
|
||||||
Base
|
Base
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *postgres) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
|
func (db *postgres) Init(d *core.DB, uri *URI) error {
|
||||||
err := db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
|
err := db.Base.Init(d, db, uri)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
@ -149,8 +149,8 @@ type sqlite3 struct {
|
||||||
Base
|
Base
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *sqlite3) Init(d *core.DB, uri *URI /*, drivername, dataSourceName string*/) error {
|
func (db *sqlite3) Init(d *core.DB, uri *URI) error {
|
||||||
return db.Base.Init(d, db, uri /*, drivername, dataSourceName*/)
|
return db.Base.Init(d, db, uri)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *sqlite3) SQLType(c *schemas.Column) string {
|
func (db *sqlite3) SQLType(c *schemas.Column) string {
|
||||||
|
|
14
engine.go
14
engine.go
|
@ -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
|
// ShowSQL show SQL statement or not on logger if log level is great than INFO
|
||||||
func (engine *Engine) ShowSQL(show ...bool) {
|
func (engine *Engine) ShowSQL(show ...bool) {
|
||||||
engine.logger.ShowSQL(show...)
|
engine.logger.ShowSQL(show...)
|
||||||
engine.db.Logger = engine.logger
|
engine.DB().Logger = engine.logger
|
||||||
}
|
}
|
||||||
|
|
||||||
// Logger return the logger interface
|
// Logger return the logger interface
|
||||||
|
@ -82,7 +82,7 @@ func (engine *Engine) SetLogger(logger interface{}) {
|
||||||
realLogger = t
|
realLogger = t
|
||||||
}
|
}
|
||||||
engine.logger = realLogger
|
engine.logger = realLogger
|
||||||
engine.db.Logger = realLogger
|
engine.DB().Logger = realLogger
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetLogLevel sets the logger level
|
// 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.
|
// SetConnMaxLifetime sets the maximum amount of time a connection may be reused.
|
||||||
func (engine *Engine) SetConnMaxLifetime(d time.Duration) {
|
func (engine *Engine) SetConnMaxLifetime(d time.Duration) {
|
||||||
engine.db.SetConnMaxLifetime(d)
|
engine.DB().SetConnMaxLifetime(d)
|
||||||
}
|
}
|
||||||
|
|
||||||
// SetMaxOpenConns is only available for go 1.2+
|
// SetMaxOpenConns is only available for go 1.2+
|
||||||
func (engine *Engine) SetMaxOpenConns(conns int) {
|
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
|
// SetMaxIdleConns set the max idle connections on pool, default is 2
|
||||||
func (engine *Engine) SetMaxIdleConns(conns int) {
|
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.
|
// 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
|
// DB return the wrapper of sql.DB
|
||||||
func (engine *Engine) DB() *core.DB {
|
func (engine *Engine) DB() *core.DB {
|
||||||
return engine.db
|
return engine.dialect.DB()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Dialect return database dialect
|
// Dialect return database dialect
|
||||||
|
@ -235,7 +235,7 @@ func (engine *Engine) NewSession() *Session {
|
||||||
|
|
||||||
// Close the engine
|
// Close the engine
|
||||||
func (engine *Engine) Close() error {
|
func (engine *Engine) Close() error {
|
||||||
return engine.db.Close()
|
return engine.DB().Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Ping tests if database is alive
|
// Ping tests if database is alive
|
||||||
|
|
|
@ -284,7 +284,7 @@ func (session *Session) Having(conditions string) *Session {
|
||||||
// DB db return the wrapper of sql.DB
|
// DB db return the wrapper of sql.DB
|
||||||
func (session *Session) DB() *core.DB {
|
func (session *Session) DB() *core.DB {
|
||||||
if session.db == nil {
|
if session.db == nil {
|
||||||
session.db = session.engine.db
|
session.db = session.engine.DB()
|
||||||
session.stmtCache = make(map[uint32]*core.Stmt, 0)
|
session.stmtCache = make(map[uint32]*core.Stmt, 0)
|
||||||
}
|
}
|
||||||
return session.db
|
return session.db
|
||||||
|
|
|
@ -34,7 +34,7 @@ func (session *Session) Rollback() error {
|
||||||
session.isAutoCommit = true
|
session.isAutoCommit = true
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
needSQL := session.engine.db.NeedLogSQL(session.ctx)
|
needSQL := session.DB().NeedLogSQL(session.ctx)
|
||||||
if needSQL {
|
if needSQL {
|
||||||
session.engine.logger.BeforeSQL(log.LogContext{
|
session.engine.logger.BeforeSQL(log.LogContext{
|
||||||
Ctx: session.ctx,
|
Ctx: session.ctx,
|
||||||
|
@ -63,7 +63,7 @@ func (session *Session) Commit() error {
|
||||||
session.isAutoCommit = true
|
session.isAutoCommit = true
|
||||||
|
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
needSQL := session.engine.db.NeedLogSQL(session.ctx)
|
needSQL := session.DB().NeedLogSQL(session.ctx)
|
||||||
if needSQL {
|
if needSQL {
|
||||||
session.engine.logger.BeforeSQL(log.LogContext{
|
session.engine.logger.BeforeSQL(log.LogContext{
|
||||||
Ctx: session.ctx,
|
Ctx: session.ctx,
|
||||||
|
|
27
xorm.go
27
xorm.go
|
@ -8,13 +8,11 @@ package xorm
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"fmt"
|
|
||||||
"os"
|
"os"
|
||||||
"runtime"
|
"runtime"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"xorm.io/xorm/caches"
|
"xorm.io/xorm/caches"
|
||||||
"xorm.io/xorm/core"
|
|
||||||
"xorm.io/xorm/dialects"
|
"xorm.io/xorm/dialects"
|
||||||
"xorm.io/xorm/log"
|
"xorm.io/xorm/log"
|
||||||
"xorm.io/xorm/names"
|
"xorm.io/xorm/names"
|
||||||
|
@ -34,27 +32,7 @@ func close(engine *Engine) {
|
||||||
// NewEngine new a db manager according to the parameter. Currently support four
|
// NewEngine new a db manager according to the parameter. Currently support four
|
||||||
// drivers
|
// drivers
|
||||||
func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
|
func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
|
||||||
driver := dialects.QueryDriver(driverName)
|
dialect, err := dialects.OpenDialect(driverName, dataSourceName)
|
||||||
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*/)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
@ -64,7 +42,6 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
|
||||||
tagParser := tags.NewParser("xorm", dialect, mapper, mapper, cacherMgr)
|
tagParser := tags.NewParser("xorm", dialect, mapper, mapper, cacherMgr)
|
||||||
|
|
||||||
engine := &Engine{
|
engine := &Engine{
|
||||||
db: db,
|
|
||||||
dialect: dialect,
|
dialect: dialect,
|
||||||
TZLocation: time.Local,
|
TZLocation: time.Local,
|
||||||
defaultContext: context.Background(),
|
defaultContext: context.Background(),
|
||||||
|
@ -74,7 +51,7 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
|
||||||
dataSourceName: dataSourceName,
|
dataSourceName: dataSourceName,
|
||||||
}
|
}
|
||||||
|
|
||||||
if uri.DBType == schemas.SQLITE {
|
if dialect.URI().DBType == schemas.SQLITE {
|
||||||
engine.DatabaseTZ = time.UTC
|
engine.DatabaseTZ = time.UTC
|
||||||
} else {
|
} else {
|
||||||
engine.DatabaseTZ = time.Local
|
engine.DatabaseTZ = time.Local
|
||||||
|
|
Loading…
Reference in New Issue