diff --git a/docs/QuickStart.md b/docs/QuickStart.md index 47aa98dc..6f568071 100644 --- a/docs/QuickStart.md +++ b/docs/QuickStart.md @@ -91,7 +91,7 @@ f, err := os.Create("sql.log") println(err.Error()) return } -engine.Logger = f +engine.Logger = xorm.NewSimpleLogger(f) ``` 3.Engine provide DB connection pool settings. diff --git a/docs/QuickStartCN.md b/docs/QuickStartCN.md index 366a6cad..d0fd45b1 100644 --- a/docs/QuickStartCN.md +++ b/docs/QuickStartCN.md @@ -95,7 +95,7 @@ f, err := os.Create("sql.log") println(err.Error()) return } -engine.Logger = f +engine.Logger = xorm.NewSimpleLogger(f) ``` 3.engine内部支持连接池接口。 diff --git a/xorm.go b/xorm.go index b82d967f..bf4aa8f6 100644 --- a/xorm.go +++ b/xorm.go @@ -1,7 +1,6 @@ package xorm import ( - "database/sql" "errors" "fmt" "os" @@ -17,42 +16,29 @@ const ( Version string = "0.4" ) -// !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 - getDialect func() core.Dialect - }{ - "mssql": {"mssql", func() core.Driver { return &odbcDriver{} }, func() core.Dialect { return &mssql{} }}, - "odbc": {"mssql", func() core.Driver { return &odbcDriver{} }, func() core.Dialect { return &mssql{} }}, // !nashtsai! TODO change this when supporting MS Access - "mysql": {"mysql", func() core.Driver { return &mysqlDriver{} }, func() core.Dialect { return &mysql{} }}, - "mymysql": {"mysql", func() core.Driver { return &mymysqlDriver{} }, func() core.Dialect { return &mysql{} }}, - "postgres": {"postgres", func() core.Driver { return &pqDriver{} }, func() core.Dialect { return &postgres{} }}, - "sqlite3": {"sqlite3", func() core.Driver { return &sqlite3Driver{} }, func() core.Dialect { return &sqlite3{} }}, - "oci8": {"oracle", func() core.Driver { return &oci8Driver{} }, func() core.Dialect { return &oracle{} }}, - "goracle": {"oracle", func() core.Driver { return &goracleDriver{} }, func() core.Dialect { return &oracle{} }}, - } - - 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 + providedDrvsNDialects := map[string]struct { + dbType core.DbType + getDriver func() core.Driver + getDialect func() core.Dialect + }{ + "mssql": {"mssql", func() core.Driver { return &odbcDriver{} }, func() core.Dialect { return &mssql{} }}, + "odbc": {"mssql", func() core.Driver { return &odbcDriver{} }, func() core.Dialect { return &mssql{} }}, // !nashtsai! TODO change this when supporting MS Access + "mysql": {"mysql", func() core.Driver { return &mysqlDriver{} }, func() core.Dialect { return &mysql{} }}, + "mymysql": {"mysql", func() core.Driver { return &mymysqlDriver{} }, func() core.Dialect { return &mysql{} }}, + "postgres": {"postgres", func() core.Driver { return &pqDriver{} }, func() core.Dialect { return &postgres{} }}, + "sqlite3": {"sqlite3", func() core.Driver { return &sqlite3Driver{} }, func() core.Dialect { return &sqlite3{} }}, + "oci8": {"oracle", func() core.Driver { return &oci8Driver{} }, func() core.Dialect { return &oracle{} }}, + "goracle": {"oracle", func() core.Driver { return &goracleDriver{} }, func() core.Dialect { return &oracle{} }}, } + + for driverName, v := range providedDrvsNDialects { + if driver := core.QueryDriver(driverName); driver == nil { + core.RegisterDriver(driverName, v.getDriver()) + core.RegisterDialect(v.dbType, v.getDialect()) + } + } + return true } func close(engine *Engine) {