diff --git a/deprecated.go b/deprecated.go new file mode 100644 index 00000000..c960bcf5 --- /dev/null +++ b/deprecated.go @@ -0,0 +1,19 @@ +package xorm + +// all content in this file will be removed from xorm some times after + +// @deprecation : please use NewSession instead +func (engine *Engine) MakeSession() (Session, error) { + s, err := engine.NewSession() + if err == nil { + return *s, err + } else { + return Session{}, err + } +} + +// @deprecation : please use NewEngine instead +func Create(driverName string, dataSourceName string) Engine { + engine := NewEngine(driverName, dataSourceName) + return *engine +} diff --git a/engine.go b/engine.go index 3c68cb88..3d7e6d56 100644 --- a/engine.go +++ b/engine.go @@ -50,17 +50,25 @@ func (e *Engine) OpenDB() (*sql.DB, error) { return sql.Open(e.DriverName, e.DataSourceName) } -func (engine *Engine) MakeSession() (session Session, err error) { +func (engine *Engine) NewSession() (session *Session, err error) { db, err := engine.OpenDB() if err != nil { - return Session{}, err + return nil, err } - session = Session{Engine: engine, Db: db} + session = &Session{Engine: engine, Db: db} session.Init() return } +func (engine *Engine) Test() error { + session, err := engine.NewSession() + if err != nil { + return err + } + return session.Db.Ping() +} + func (engine *Engine) Where(querystring string, args ...interface{}) *Engine { engine.Statement.Where(querystring, args...) return engine @@ -260,9 +268,15 @@ func (e *Engine) DropAll() error { func (e *Engine) CreateTables(beans ...interface{}) error { session, err := e.MakeSession() - session.Begin() - session.Statement = e.Statement + if err != nil { + return err + } defer session.Close() + err = session.Begin() + if err != nil { + return err + } + session.Statement = e.Statement defer e.Statement.Init() if err != nil { return err diff --git a/session.go b/session.go index a6909bd5..3f21cd95 100644 --- a/session.go +++ b/session.go @@ -88,14 +88,16 @@ func (session *Session) Having(conditions string) *Session { func (session *Session) Begin() error { if session.IsAutoCommit { + tx, err := session.Db.Begin() + if err != nil { + return err + } session.IsAutoCommit = false session.IsCommitedOrRollbacked = false - tx, err := session.Db.Begin() session.Tx = tx if session.Engine.ShowSQL { fmt.Println("BEGIN TRANSACTION") } - return err } return nil } diff --git a/xorm.go b/xorm.go index 53618481..0203d459 100644 --- a/xorm.go +++ b/xorm.go @@ -4,12 +4,12 @@ import ( "reflect" ) -func Create(driverName string, dataSourceName string) Engine { - engine := Engine{ShowSQL: false, DriverName: driverName, Mapper: SnakeMapper{}, +func NewEngine(driverName string, dataSourceName string) *Engine { + engine := &Engine{ShowSQL: false, DriverName: driverName, Mapper: SnakeMapper{}, DataSourceName: dataSourceName} engine.Tables = make(map[reflect.Type]Table) - engine.Statement.Engine = &engine + engine.Statement.Engine = engine engine.InsertMany = true engine.TagIdentifier = "xorm" if driverName == SQLITE {