a little perfomance improved

This commit is contained in:
Lunny Xiao 2014-02-10 13:56:29 +08:00
parent 781062130a
commit da96e0cc86
2 changed files with 23 additions and 21 deletions

View File

@ -58,7 +58,7 @@ type Engine struct {
DataSourceName string DataSourceName string
dialect dialect dialect dialect
Tables map[reflect.Type]*Table Tables map[reflect.Type]*Table
mutex *sync.Mutex mutex *sync.RWMutex
ShowSQL bool ShowSQL bool
ShowErr bool ShowErr bool
ShowDebug bool ShowDebug bool
@ -421,12 +421,14 @@ func (engine *Engine) Having(conditions string) *Session {
} }
func (engine *Engine) autoMapType(t reflect.Type) *Table { func (engine *Engine) autoMapType(t reflect.Type) *Table {
engine.mutex.Lock() engine.mutex.RLock()
defer engine.mutex.Unlock()
table, ok := engine.Tables[t] table, ok := engine.Tables[t]
engine.mutex.RUnlock()
if !ok { if !ok {
table = engine.mapType(t) table = engine.mapType(t)
engine.mutex.Lock()
engine.Tables[t] = table engine.Tables[t] = table
engine.mutex.Unlock()
} }
return table return table
} }
@ -484,7 +486,7 @@ func (engine *Engine) mapType(t reflect.Type) *Table {
var indexType int var indexType int
var indexName string var indexName string
var preKey string var preKey string
for j,ln := 0,len(tags); j < ln; j++ { for j, ln := 0, len(tags); j < ln; j++ {
key := tags[j] key := tags[j]
k := strings.ToUpper(key) k := strings.ToUpper(key)
switch { switch {
@ -624,22 +626,22 @@ func (engine *Engine) mapType(t reflect.Type) *Table {
} else { } else {
sqlType := Type2SQLType(fieldType) sqlType := Type2SQLType(fieldType)
col = &Column{ col = &Column{
Name: engine.columnMapper.Obj2Table(t.Field(i).Name), Name: engine.columnMapper.Obj2Table(t.Field(i).Name),
FieldName: t.Field(i).Name, FieldName: t.Field(i).Name,
SQLType: sqlType, SQLType: sqlType,
Length: sqlType.DefaultLength, Length: sqlType.DefaultLength,
Length2: sqlType.DefaultLength2, Length2: sqlType.DefaultLength2,
Nullable: true, Nullable: true,
Default: "", Default: "",
Indexes: make(map[string]bool), Indexes: make(map[string]bool),
IsPrimaryKey: false, IsPrimaryKey: false,
IsAutoIncrement:false, IsAutoIncrement: false,
MapType: TWOSIDES, MapType: TWOSIDES,
IsCreated: false, IsCreated: false,
IsUpdated: false, IsUpdated: false,
IsCascade: false, IsCascade: false,
IsVersion: false, IsVersion: false,
DefaultIsEmpty: false, DefaultIsEmpty: false,
} }
} }
if col.IsAutoIncrement { if col.IsAutoIncrement {

View File

@ -49,7 +49,7 @@ func NewEngine(driverName string, dataSourceName string) (*Engine, error) {
} }
engine.Tables = make(map[reflect.Type]*Table) engine.Tables = make(map[reflect.Type]*Table)
engine.mutex = &sync.Mutex{} engine.mutex = &sync.RWMutex{}
engine.TagIdentifier = "xorm" engine.TagIdentifier = "xorm"
engine.Filters = append(engine.Filters, &IdFilter{}) engine.Filters = append(engine.Filters, &IdFilter{})