fixed cases Drivers and Dialects are not registered, where sql driver is loaded after xorm.init(), using explicit call to register Drivers and Dialects upon xorm.NewEngine() call
This commit is contained in:
parent
145358a74e
commit
895d976804
18
xorm.go
18
xorm.go
|
@ -4,21 +4,25 @@ import (
|
|||
"database/sql"
|
||||
"errors"
|
||||
"fmt"
|
||||
"github.com/go-xorm/core"
|
||||
"os"
|
||||
"reflect"
|
||||
"runtime"
|
||||
"sync"
|
||||
"time"
|
||||
|
||||
"github.com/go-xorm/core"
|
||||
)
|
||||
|
||||
const (
|
||||
Version string = "0.4"
|
||||
)
|
||||
|
||||
func init() {
|
||||
// !nashtsai! implicit register drivers and dialects is no good, as init() can be called before sql driver got registered
|
||||
// func init() {
|
||||
// regDrvsNDialects()
|
||||
// }
|
||||
|
||||
func regDrvsNDialects() bool {
|
||||
if core.RegisteredDriverSize() == 0 {
|
||||
providedDrvsNDialects := map[string]struct {
|
||||
dbType core.DbType
|
||||
getDriver func() core.Driver
|
||||
|
@ -36,10 +40,17 @@ func init() {
|
|||
for driverName, v := range providedDrvsNDialects {
|
||||
_, err := sql.Open(driverName, "")
|
||||
if err == nil {
|
||||
// fmt.Printf("driver succeed: %v\n", driverName)
|
||||
core.RegisterDriver(driverName, v.getDriver())
|
||||
core.RegisterDialect(v.dbType, v.getDialect())
|
||||
} else {
|
||||
// fmt.Printf("driver failed: %v | err: %v\n", driverName, err)
|
||||
}
|
||||
}
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
func close(engine *Engine) {
|
||||
|
@ -49,6 +60,7 @@ func close(engine *Engine) {
|
|||
// new a db manager according to the parameter. Currently support four
|
||||
// drivers
|
||||
func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
|
||||
regDrvsNDialects()
|
||||
driver := core.QueryDriver(driverName)
|
||||
if driver == nil {
|
||||
return nil, errors.New(fmt.Sprintf("Unsupported driver name: %v", driverName))
|
||||
|
|
Loading…
Reference in New Issue