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"
|
"database/sql"
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"github.com/go-xorm/core"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"runtime"
|
"runtime"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/go-xorm/core"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
Version string = "0.4"
|
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 {
|
providedDrvsNDialects := map[string]struct {
|
||||||
dbType core.DbType
|
dbType core.DbType
|
||||||
getDriver func() core.Driver
|
getDriver func() core.Driver
|
||||||
|
@ -36,10 +40,17 @@ func init() {
|
||||||
for driverName, v := range providedDrvsNDialects {
|
for driverName, v := range providedDrvsNDialects {
|
||||||
_, err := sql.Open(driverName, "")
|
_, err := sql.Open(driverName, "")
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
// fmt.Printf("driver succeed: %v\n", driverName)
|
||||||
core.RegisterDriver(driverName, v.getDriver())
|
core.RegisterDriver(driverName, v.getDriver())
|
||||||
core.RegisterDialect(v.dbType, v.getDialect())
|
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) {
|
func close(engine *Engine) {
|
||||||
|
@ -49,6 +60,7 @@ func close(engine *Engine) {
|
||||||
// new a db manager according to the parameter. Currently support four
|
// 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) {
|
||||||
|
regDrvsNDialects()
|
||||||
driver := core.QueryDriver(driverName)
|
driver := core.QueryDriver(driverName)
|
||||||
if driver == nil {
|
if driver == nil {
|
||||||
return nil, errors.New(fmt.Sprintf("Unsupported driver name: %v", driverName))
|
return nil, errors.New(fmt.Sprintf("Unsupported driver name: %v", driverName))
|
||||||
|
|
Loading…
Reference in New Issue