diff --git a/dialects/dialect.go b/dialects/dialect.go index 7d816bda..c591cc7b 100644 --- a/dialects/dialect.go +++ b/dialects/dialect.go @@ -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 diff --git a/dialects/mssql.go b/dialects/mssql.go index 3c95dd20..558abdfc 100644 --- a/dialects/mssql.go +++ b/dialects/mssql.go @@ -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 { diff --git a/dialects/mysql.go b/dialects/mysql.go index 7c41ecf6..939a7cf1 100644 --- a/dialects/mysql.go +++ b/dialects/mysql.go @@ -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) { diff --git a/dialects/oracle.go b/dialects/oracle.go index 49c65837..4a8162ac 100644 --- a/dialects/oracle.go +++ b/dialects/oracle.go @@ -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 { diff --git a/dialects/postgres.go b/dialects/postgres.go index ad3c8c68..f92202cd 100644 --- a/dialects/postgres.go +++ b/dialects/postgres.go @@ -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 } diff --git a/dialects/sqlite3.go b/dialects/sqlite3.go index 3b9cb97c..39138b13 100644 --- a/dialects/sqlite3.go +++ b/dialects/sqlite3.go @@ -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 { diff --git a/engine.go b/engine.go index 31d891dc..cc8a74a0 100644 --- a/engine.go +++ b/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 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 diff --git a/session.go b/session.go index db990684..07b99594 100644 --- a/session.go +++ b/session.go @@ -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 diff --git a/session_tx.go b/session_tx.go index 489489f3..cd23cf89 100644 --- a/session_tx.go +++ b/session_tx.go @@ -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, diff --git a/xorm.go b/xorm.go index 51915940..3618b718 100644 --- a/xorm.go +++ b/xorm.go @@ -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