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) }