add auto map

This commit is contained in:
Lunny Xiao 2013-05-13 19:56:38 +08:00
parent 0517c1ddcf
commit d3c4644b17
2 changed files with 26 additions and 11 deletions

View File

@ -157,6 +157,20 @@ func (engine *Engine) MapOne(bean interface{}) Table {
return engine.MapType(t)
}
func (engine *Engine) AutoMapType(t reflect.Type) *Table {
table, ok := engine.Tables[t]
if !ok {
table = engine.MapType(t)
engine.Tables[t] = table
}
return &table
}
func (engine *Engine) AutoMap(bean interface{}) *Table {
t := Type(bean)
return engine.AutoMapType(t)
}
func (engine *Engine) MapType(t reflect.Type) Table {
table := Table{Name: engine.Mapper.Obj2Table(t.Name()), Type: t}
table.Columns = make(map[string]Column)
@ -183,6 +197,7 @@ func (engine *Engine) MapType(t reflect.Type) Table {
switch {
case k == "pk":
col.IsPrimaryKey = true
col.Nullable = false
pkCol = &col
case k == "null":
col.Nullable = (tags[j-1] != "not")

View File

@ -211,7 +211,8 @@ func (session *Session) Get(bean interface{}) error {
statement := session.Statement
defer session.Statement.Init()
statement.Limit(1)
table := session.Engine.Bean2Table(bean)
table := session.Engine.AutoMap(bean)
statement.Table = table
colNames, args := session.BuildConditions(table, bean)
@ -241,7 +242,7 @@ func (session *Session) Get(bean interface{}) error {
func (session *Session) Count(bean interface{}) (int64, error) {
statement := session.Statement
defer session.Statement.Init()
table := session.Engine.Bean2Table(bean)
table := session.Engine.AutoMap(bean)
statement.Table = table
colNames, args := session.BuildConditions(table, bean)
@ -271,12 +272,11 @@ func (session *Session) Find(rowsSlicePtr interface{}, condiBean ...interface{})
}
sliceElementType := sliceValue.Type().Elem()
table := session.Engine.Tables[sliceElementType]
statement.Table = &table
table := session.Engine.AutoMapType(sliceElementType)
statement.Table = table
if len(condiBean) > 0 {
colNames, args := session.BuildConditions(&table, condiBean[0])
colNames, args := session.BuildConditions(table, condiBean[0])
statement.ColumnStr = strings.Join(colNames, " and ")
statement.BeanArgs = args
}
@ -428,8 +428,8 @@ func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) {
bean := sliceValue.Index(0).Interface()
sliceElementType := Type(bean)
table := session.Engine.Tables[sliceElementType]
session.Statement.Table = &table
table := session.Engine.AutoMapType(sliceElementType)
session.Statement.Table = table
size := sliceValue.Len()
@ -490,7 +490,7 @@ func (session *Session) InsertMulti(rowsSlicePtr interface{}) (int64, error) {
}
func (session *Session) InsertOne(bean interface{}) (int64, error) {
table := session.Engine.Bean2Table(bean)
table := session.Engine.AutoMap(bean)
session.Statement.Table = table
colNames := make([]string, 0)
colPlaces := make([]string, 0)
@ -561,7 +561,7 @@ func (session *Session) BuildConditions(table *Table, bean interface{}) ([]strin
}
func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int64, error) {
table := session.Engine.Bean2Table(bean)
table := session.Engine.AutoMap(bean)
session.Statement.Table = table
colNames, args := session.BuildConditions(table, bean)
var condiColNames []string
@ -610,7 +610,7 @@ func (session *Session) Update(bean interface{}, condiBean ...interface{}) (int6
}
func (session *Session) Delete(bean interface{}) (int64, error) {
table := session.Engine.Bean2Table(bean)
table := session.Engine.AutoMap(bean)
session.Statement.Table = table
colNames, args := session.BuildConditions(table, bean)