mirror of
https://github.com/geektutu/7days-golang.git
synced 2024-04-21 12:32:11 +00:00
52 lines
1.2 KiB
Go
52 lines
1.2 KiB
Go
package geeorm
|
|
|
|
import (
|
|
"database/sql"
|
|
"geeorm/dialect"
|
|
"geeorm/log"
|
|
"geeorm/session"
|
|
)
|
|
|
|
// Engine is the main struct of geeorm, manages all db sessions and transactions.
|
|
type Engine struct {
|
|
db *sql.DB
|
|
dialect dialect.Dialect
|
|
}
|
|
|
|
// NewEngine create a instance of Engine
|
|
// connect database and ping it to test whether it's alive
|
|
func NewEngine(driver, source string) (e *Engine, err error) {
|
|
db, err := sql.Open(driver, source)
|
|
if err != nil {
|
|
log.Error(err)
|
|
return
|
|
}
|
|
// Send a ping to make sure the database connection is alive.
|
|
if err = db.Ping(); err != nil {
|
|
log.Error(err)
|
|
return
|
|
}
|
|
// make sure the specific dialect exists
|
|
dial, ok := dialect.GetDialect(driver)
|
|
if !ok {
|
|
log.Errorf("dialect %s Not Found", driver)
|
|
return
|
|
}
|
|
e = &Engine{db: db, dialect: dial}
|
|
log.Info("Connect database success")
|
|
return
|
|
}
|
|
|
|
// Close database connection
|
|
func (engine *Engine) Close() {
|
|
if err := engine.db.Close(); err != nil {
|
|
log.Error("Failed to close database")
|
|
}
|
|
log.Info("Close database success")
|
|
}
|
|
|
|
// NewSession creates a new session for next operations
|
|
func (engine *Engine) NewSession() *session.Session {
|
|
return session.New(engine.db, engine.dialect)
|
|
}
|