use DB() instead newDb()

This commit is contained in:
Lunny Xiao 2015-02-25 15:26:52 +08:00
parent 507ee4df02
commit 0cfd60f101
5 changed files with 43 additions and 152 deletions

View File

@ -1 +1 @@
xorm v0.4.2 xorm v0.4.2.0225

View File

@ -1367,18 +1367,11 @@ func (engine *Engine) Import(r io.Reader) ([]sql.Result, error) {
scanner.Split(semiColSpliter) scanner.Split(semiColSpliter)
session := engine.NewSession()
defer session.Close()
err := session.newDb()
if err != nil {
return results, err
}
for scanner.Scan() { for scanner.Scan() {
query := scanner.Text() query := scanner.Text()
query = strings.Trim(query, " \t") query = strings.Trim(query, " \t")
if len(query) > 0 { if len(query) > 0 {
result, err := session.Db.Exec(query) result, err := engine.DB().Exec(query)
results = append(results, result) results = append(results, result)
if err != nil { if err != nil {
lastError = err lastError = err

View File

@ -25,11 +25,6 @@ func newRows(session *Session, bean interface{}) (*Rows, error) {
rows.session = session rows.session = session
rows.beanType = reflect.Indirect(reflect.ValueOf(bean)).Type() rows.beanType = reflect.Indirect(reflect.ValueOf(bean)).Type()
err := rows.session.newDb()
if err != nil {
return nil, err
}
defer rows.session.Statement.Init() defer rows.session.Statement.Init()
var sqlStr string var sqlStr string
@ -47,8 +42,8 @@ func newRows(session *Session, bean interface{}) (*Rows, error) {
} }
rows.session.Engine.logSQL(sqlStr, args) rows.session.Engine.logSQL(sqlStr, args)
var err error
rows.stmt, err = rows.session.Db.Prepare(sqlStr) rows.stmt, err = rows.session.DB().Prepare(sqlStr)
if err != nil { if err != nil {
rows.lastError = err rows.lastError = err
defer rows.Close() defer rows.Close()

View File

@ -17,7 +17,7 @@ import (
// Struct Session keep a pointer to sql.DB and provides all execution of all // Struct Session keep a pointer to sql.DB and provides all execution of all
// kind of database operations. // kind of database operations.
type Session struct { type Session struct {
Db *core.DB db *core.DB
Engine *Engine Engine *Engine
Tx *core.Tx Tx *core.Tx
Statement Statement Statement Statement
@ -66,9 +66,9 @@ func (session *Session) Close() {
v.Close() v.Close()
} }
if session.Db != nil { if session.db != nil {
//session.Engine.Pool.ReleaseDB(session.Engine, session.Db) //session.Engine.Pool.ReleaseDB(session.Engine, session.Db)
session.Db = nil session.db = nil
session.Tx = nil session.Tx = nil
session.stmtCache = nil session.stmtCache = nil
session.Init() session.Init()
@ -286,26 +286,18 @@ func (session *Session) Having(conditions string) *Session {
return session return session
} }
func (session *Session) newDb() error { func (session *Session) DB() *core.DB {
if session.Db == nil { if session.db == nil {
/*db, err := session.Engine.Pool.RetrieveDB(session.Engine) session.db = session.Engine.db
if err != nil {
return err
}*/
session.Db = session.Engine.db
session.stmtCache = make(map[uint32]*core.Stmt, 0) session.stmtCache = make(map[uint32]*core.Stmt, 0)
} }
return nil return session.db
} }
// Begin a transaction // Begin a transaction
func (session *Session) Begin() error { func (session *Session) Begin() error {
err := session.newDb()
if err != nil {
return err
}
if session.IsAutoCommit { if session.IsAutoCommit {
tx, err := session.Db.Begin() tx, err := session.DB().Begin()
if err != nil { if err != nil {
return err return err
} }
@ -464,10 +456,6 @@ func (session *Session) exec(sqlStr string, args ...interface{}) (sql.Result, er
// Exec raw sql // Exec raw sql
func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, error) { func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, error) {
err := session.newDb()
if err != nil {
return nil, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -480,10 +468,6 @@ func (session *Session) Exec(sqlStr string, args ...interface{}) (sql.Result, er
func (session *Session) CreateTable(bean interface{}) error { func (session *Session) CreateTable(bean interface{}) error {
session.Statement.RefTable = session.Engine.TableInfo(bean) session.Statement.RefTable = session.Engine.TableInfo(bean)
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -496,10 +480,6 @@ func (session *Session) CreateTable(bean interface{}) error {
func (session *Session) CreateIndexes(bean interface{}) error { func (session *Session) CreateIndexes(bean interface{}) error {
session.Statement.RefTable = session.Engine.TableInfo(bean) session.Statement.RefTable = session.Engine.TableInfo(bean)
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -507,7 +487,7 @@ func (session *Session) CreateIndexes(bean interface{}) error {
sqls := session.Statement.genIndexSQL() sqls := session.Statement.genIndexSQL()
for _, sqlStr := range sqls { for _, sqlStr := range sqls {
_, err = session.exec(sqlStr) _, err := session.exec(sqlStr)
if err != nil { if err != nil {
return err return err
} }
@ -519,10 +499,6 @@ func (session *Session) CreateIndexes(bean interface{}) error {
func (session *Session) CreateUniques(bean interface{}) error { func (session *Session) CreateUniques(bean interface{}) error {
session.Statement.RefTable = session.Engine.TableInfo(bean) session.Statement.RefTable = session.Engine.TableInfo(bean)
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -530,7 +506,7 @@ func (session *Session) CreateUniques(bean interface{}) error {
sqls := session.Statement.genUniqueSQL() sqls := session.Statement.genUniqueSQL()
for _, sqlStr := range sqls { for _, sqlStr := range sqls {
_, err = session.exec(sqlStr) _, err := session.exec(sqlStr)
if err != nil { if err != nil {
return err return err
} }
@ -547,10 +523,6 @@ func (session *Session) createOneTable() error {
// to be deleted // to be deleted
func (session *Session) createAll() error { func (session *Session) createAll() error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -568,10 +540,6 @@ func (session *Session) createAll() error {
// drop indexes // drop indexes
func (session *Session) DropIndexes(bean interface{}) error { func (session *Session) DropIndexes(bean interface{}) error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -579,7 +547,7 @@ func (session *Session) DropIndexes(bean interface{}) error {
sqls := session.Statement.genDelIndexSQL() sqls := session.Statement.genDelIndexSQL()
for _, sqlStr := range sqls { for _, sqlStr := range sqls {
_, err = session.exec(sqlStr) _, err := session.exec(sqlStr)
if err != nil { if err != nil {
return err return err
} }
@ -589,11 +557,6 @@ func (session *Session) DropIndexes(bean interface{}) error {
// DropTable drop a table and all indexes of the table // DropTable drop a table and all indexes of the table
func (session *Session) DropTable(bean interface{}) error { func (session *Session) DropTable(bean interface{}) error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -610,7 +573,7 @@ func (session *Session) DropTable(bean interface{}) error {
} }
sqlStr := session.Statement.genDropSQL() sqlStr := session.Statement.genDropSQL()
_, err = session.exec(sqlStr) _, err := session.exec(sqlStr)
return err return err
} }
@ -663,7 +626,7 @@ func (session *Session) cacheGet(bean interface{}, sqlStr string, args ...interf
table := session.Statement.RefTable table := session.Statement.RefTable
if err != nil { if err != nil {
var res = make([]string, len(table.PrimaryKeys)) var res = make([]string, len(table.PrimaryKeys))
rows, err := session.Db.Query(newsql, args...) rows, err := session.DB().Query(newsql, args...)
if err != nil { if err != nil {
return false, err return false, err
} }
@ -761,7 +724,7 @@ func (session *Session) cacheFind(t reflect.Type, sqlStr string, rowsSlicePtr in
cacher := session.Engine.getCacher2(table) cacher := session.Engine.getCacher2(table)
ids, err := core.GetCacheSql(cacher, session.Statement.TableName(), newsql, args) ids, err := core.GetCacheSql(cacher, session.Statement.TableName(), newsql, args)
if err != nil { if err != nil {
rows, err := session.Db.Query(newsql, args...) rows, err := session.DB().Query(newsql, args...)
if err != nil { if err != nil {
return err return err
} }
@ -972,7 +935,7 @@ func (session *Session) doPrepare(sqlStr string) (stmt *core.Stmt, err error) {
var has bool var has bool
stmt, has = session.stmtCache[crc] stmt, has = session.stmtCache[crc]
if !has { if !has {
stmt, err = session.Db.Prepare(sqlStr) stmt, err = session.DB().Prepare(sqlStr)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -984,11 +947,6 @@ func (session *Session) doPrepare(sqlStr string) (stmt *core.Stmt, err error) {
// get retrieve one record from database, bean's non-empty fields // get retrieve one record from database, bean's non-empty fields
// will be as conditions // will be as conditions
func (session *Session) Get(bean interface{}) (bool, error) { func (session *Session) Get(bean interface{}) (bool, error) {
err := session.newDb()
if err != nil {
return false, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -1021,6 +979,7 @@ func (session *Session) Get(bean interface{}) (bool, error) {
} }
var rawRows *core.Rows var rawRows *core.Rows
var err error
session.queryPreprocess(&sqlStr, args...) session.queryPreprocess(&sqlStr, args...)
if session.IsAutoCommit { if session.IsAutoCommit {
stmt, err := session.doPrepare(sqlStr) stmt, err := session.doPrepare(sqlStr)
@ -1050,11 +1009,6 @@ func (session *Session) Get(bean interface{}) (bool, error) {
// Count counts the records. bean's non-empty fields // Count counts the records. bean's non-empty fields
// are conditions. // are conditions.
func (session *Session) Count(bean interface{}) (int64, error) { func (session *Session) Count(bean interface{}) (int64, error) {
err := session.newDb()
if err != nil {
return 0, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -1159,10 +1113,6 @@ func Atot(s string, tp reflect.Type) (interface{}, error) {
// are conditions. beans could be []Struct, []*Struct, map[int64]Struct // are conditions. beans could be []Struct, []*Struct, map[int64]Struct
// map[int64]*Struct // map[int64]*Struct
func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) error { func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{}) error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -1237,6 +1187,7 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{})
args = session.Statement.RawParams args = session.Statement.RawParams
} }
var err error
if session.Statement.JoinStr == "" { if session.Statement.JoinStr == "" {
if cacher := session.Engine.getCacher2(table); cacher != nil && if cacher := session.Engine.getCacher2(table); cacher != nil &&
session.Statement.UseCache && session.Statement.UseCache &&
@ -1380,24 +1331,16 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{})
// Test if database is ok // Test if database is ok
func (session *Session) Ping() error { func (session *Session) Ping() error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
} }
return session.Db.Ping() return session.DB().Ping()
} }
/* /*
func (session *Session) isColumnExist(tableName string, col *core.Column) (bool, error) { func (session *Session) isColumnExist(tableName string, col *core.Column) (bool, error) {
err := session.newDb()
if err != nil {
return false, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -1424,10 +1367,6 @@ func (session *Session) IsTableExist(beanOrTableName interface{}) (bool, error)
} }
func (session *Session) isTableExist(tableName string) (bool, error) { func (session *Session) isTableExist(tableName string) (bool, error) {
err := session.newDb()
if err != nil {
return false, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -1452,12 +1391,14 @@ func (session *Session) IsTableEmpty(bean interface{}) (bool, error) {
} }
func (session *Session) isTableEmpty(tableName string) (bool, error) { func (session *Session) isTableEmpty(tableName string) (bool, error) {
session.newDb() defer session.resetStatement()
if session.IsAutoClose {
row := session.Db.QueryRow(fmt.Sprintf("select count(*) from %s", tableName)) defer session.Close()
}
var total int64 var total int64
err := row.Scan(&total) err := session.DB().QueryRow(fmt.Sprintf("select count(*) from %s", tableName)).
Scan(&total)
if err != nil { if err != nil {
return true, err return true, err
} }
@ -1466,10 +1407,6 @@ func (session *Session) isTableEmpty(tableName string) (bool, error) {
} }
func (session *Session) isIndexExist(tableName, idxName string, unique bool) (bool, error) { func (session *Session) isIndexExist(tableName, idxName string, unique bool) (bool, error) {
err := session.newDb()
if err != nil {
return false, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -1487,6 +1424,11 @@ func (session *Session) isIndexExist(tableName, idxName string, unique bool) (bo
// find if index is exist according cols // find if index is exist according cols
func (session *Session) isIndexExist2(tableName string, cols []string, unique bool) (bool, error) { func (session *Session) isIndexExist2(tableName string, cols []string, unique bool) (bool, error) {
defer session.resetStatement()
if session.IsAutoClose {
defer session.Close()
}
indexes, err := session.Engine.dialect.GetIndexes(tableName) indexes, err := session.Engine.dialect.GetIndexes(tableName)
if err != nil { if err != nil {
return false, err return false, err
@ -1505,10 +1447,6 @@ func (session *Session) isIndexExist2(tableName string, cols []string, unique bo
} }
func (session *Session) addColumn(colName string) error { func (session *Session) addColumn(colName string) error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -1516,47 +1454,35 @@ func (session *Session) addColumn(colName string) error {
col := session.Statement.RefTable.GetColumn(colName) col := session.Statement.RefTable.GetColumn(colName)
sql, args := session.Statement.genAddColumnStr(col) sql, args := session.Statement.genAddColumnStr(col)
_, err = session.exec(sql, args...) _, err := session.exec(sql, args...)
return err return err
} }
func (session *Session) addIndex(tableName, idxName string) error { func (session *Session) addIndex(tableName, idxName string) error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
} }
index := session.Statement.RefTable.Indexes[idxName] index := session.Statement.RefTable.Indexes[idxName]
sqlStr := session.Engine.dialect.CreateIndexSql(tableName, index) sqlStr := session.Engine.dialect.CreateIndexSql(tableName, index)
//genAddIndexStr(indexName(tableName, idxName), cols)
_, err = session.exec(sqlStr) _, err := session.exec(sqlStr)
return err return err
} }
func (session *Session) addUnique(tableName, uqeName string) error { func (session *Session) addUnique(tableName, uqeName string) error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
} }
index := session.Statement.RefTable.Indexes[uqeName] index := session.Statement.RefTable.Indexes[uqeName]
sqlStr := session.Engine.dialect.CreateIndexSql(tableName, index) sqlStr := session.Engine.dialect.CreateIndexSql(tableName, index)
_, err = session.exec(sqlStr) _, err := session.exec(sqlStr)
return err return err
} }
// To be deleted // To be deleted
func (session *Session) dropAll() error { func (session *Session) dropAll() error {
err := session.newDb()
if err != nil {
return err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -1974,7 +1900,7 @@ func (session *Session) query(sqlStr string, paramStr ...interface{}) (resultsSl
session.queryPreprocess(&sqlStr, paramStr...) session.queryPreprocess(&sqlStr, paramStr...)
if session.IsAutoCommit { if session.IsAutoCommit {
return session.innerQuery(session.Db, sqlStr, paramStr...) return session.innerQuery(session.DB(), sqlStr, paramStr...)
} }
return session.txQuery(session.Tx, sqlStr, paramStr...) return session.txQuery(session.Tx, sqlStr, paramStr...)
} }
@ -2013,10 +1939,6 @@ func (session *Session) innerQuery(db *core.DB, sqlStr string, params ...interfa
// Exec a raw sql and return records as []map[string][]byte // Exec a raw sql and return records as []map[string][]byte
func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error) { func (session *Session) Query(sqlStr string, paramStr ...interface{}) (resultsSlice []map[string][]byte, err error) {
err = session.newDb()
if err != nil {
return nil, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -2032,7 +1954,7 @@ func (session *Session) query2(sqlStr string, paramStr ...interface{}) (resultsS
session.queryPreprocess(&sqlStr, paramStr...) session.queryPreprocess(&sqlStr, paramStr...)
if session.IsAutoCommit { if session.IsAutoCommit {
return query2(session.Db, sqlStr, paramStr...) return query2(session.DB(), sqlStr, paramStr...)
} }
return txQuery2(session.Tx, sqlStr, paramStr...) return txQuery2(session.Tx, sqlStr, paramStr...)
} }
@ -2040,11 +1962,7 @@ func (session *Session) query2(sqlStr string, paramStr ...interface{}) (resultsS
// insert one or more beans // insert one or more beans
func (session *Session) Insert(beans ...interface{}) (int64, error) { func (session *Session) Insert(beans ...interface{}) (int64, error) {
var affected int64 = 0 var affected int64 = 0
var err error = nil var err error
err = session.newDb()
if err != nil {
return 0, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -2248,10 +2166,6 @@ func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) {
sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr)) sliceValue := reflect.Indirect(reflect.ValueOf(rowsSlicePtr))
if sliceValue.Kind() == reflect.Slice { if sliceValue.Kind() == reflect.Slice {
if sliceValue.Len() > 0 { if sliceValue.Len() > 0 {
err := session.newDb()
if err != nil {
return 0, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -3217,10 +3131,6 @@ func (session *Session) innerInsert(bean interface{}) (int64, error) {
// The in parameter bean must a struct or a point to struct. The return // The in parameter bean must a struct or a point to struct. The return
// parameter is inserted and error // parameter is inserted and error
func (session *Session) InsertOne(bean interface{}) (int64, error) { func (session *Session) InsertOne(bean interface{}) (int64, error) {
err := session.newDb()
if err != nil {
return 0, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -3315,7 +3225,7 @@ func (session *Session) cacheUpdate(sqlStr string, args ...interface{}) error {
session.Engine.LogDebug("[cacheUpdate] get cache sql", newsql, args[nStart:]) session.Engine.LogDebug("[cacheUpdate] get cache sql", newsql, args[nStart:])
ids, err := core.GetCacheSql(cacher, tableName, newsql, args[nStart:]) ids, err := core.GetCacheSql(cacher, tableName, newsql, args[nStart:])
if err != nil { if err != nil {
rows, err := session.Db.Query(newsql, args[nStart:]...) rows, err := session.DB().Query(newsql, args[nStart:]...)
if err != nil { if err != nil {
return err return err
} }
@ -3414,10 +3324,6 @@ func (session *Session) cacheUpdate(sqlStr string, args ...interface{}) error {
// You should call UseBool if you have bool to use. // You should call UseBool if you have bool to use.
// 2.float32 & float64 may be not inexact as conditions // 2.float32 & float64 may be not inexact as conditions
func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int64, error) { func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int64, error) {
err := session.newDb()
if err != nil {
return 0, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()
@ -3439,6 +3345,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
} }
// -- // --
var err error
if t.Kind() == reflect.Struct { if t.Kind() == reflect.Struct {
table = session.Engine.TableInfo(bean) table = session.Engine.TableInfo(bean)
session.Statement.RefTable = table session.Statement.RefTable = table
@ -3680,10 +3587,6 @@ func (session *Session) cacheDelete(sqlStr string, args ...interface{}) error {
// Delete records, bean's non-empty fields are conditions // Delete records, bean's non-empty fields are conditions
func (session *Session) Delete(bean interface{}) (int64, error) { func (session *Session) Delete(bean interface{}) (int64, error) {
err := session.newDb()
if err != nil {
return 0, err
}
defer session.resetStatement() defer session.resetStatement()
if session.IsAutoClose { if session.IsAutoClose {
defer session.Close() defer session.Close()

View File

@ -13,7 +13,7 @@ import (
) )
const ( const (
Version string = "0.4.2" Version string = "0.4.2.0225"
) )
func regDrvsNDialects() bool { func regDrvsNDialects() bool {