fixed some bugs

This commit is contained in:
Lunny Xiao 2013-07-18 01:26:14 +08:00
parent 433af9ae44
commit 65608363e3
3 changed files with 44 additions and 36 deletions

View File

@ -98,63 +98,58 @@ func (engine *Engine) Test() error {
func (engine *Engine) Sql(querystring string, args ...interface{}) *Session { func (engine *Engine) Sql(querystring string, args ...interface{}) *Session {
session := engine.NewSession() session := engine.NewSession()
session.Sql(querystring, args...) return session.Sql(querystring, args...)
return session }
func (engine *Engine) Cascade(trueOrFalse ...bool) *Session {
session := engine.NewSession()
return session.Cascade(trueOrFalse...)
} }
func (engine *Engine) Where(querystring string, args ...interface{}) *Session { func (engine *Engine) Where(querystring string, args ...interface{}) *Session {
session := engine.NewSession() session := engine.NewSession()
session.Where(querystring, args...) return session.Where(querystring, args...)
return session
} }
func (engine *Engine) Id(id int64) *Session { func (engine *Engine) Id(id int64) *Session {
session := engine.NewSession() session := engine.NewSession()
session.Id(id) return session.Id(id)
return session
} }
func (engine *Engine) In(column string, args ...interface{}) *Session { func (engine *Engine) In(column string, args ...interface{}) *Session {
session := engine.NewSession() session := engine.NewSession()
session.In(column, args...) return session.In(column, args...)
return session
} }
func (engine *Engine) Table(tableName string) *Session { func (engine *Engine) Table(tableName string) *Session {
session := engine.NewSession() session := engine.NewSession()
session.Table(tableName) return session.Table(tableName)
return session
} }
func (engine *Engine) Limit(limit int, start ...int) *Session { func (engine *Engine) Limit(limit int, start ...int) *Session {
session := engine.NewSession() session := engine.NewSession()
session.Limit(limit, start...) return session.Limit(limit, start...)
return session
} }
func (engine *Engine) OrderBy(order string) *Session { func (engine *Engine) OrderBy(order string) *Session {
session := engine.NewSession() session := engine.NewSession()
session.OrderBy(order) return session.OrderBy(order)
return session
} }
//The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN //The join_operator should be one of INNER, LEFT OUTER, CROSS etc - this will be prepended to JOIN
func (engine *Engine) Join(join_operator, tablename, condition string) *Session { func (engine *Engine) Join(join_operator, tablename, condition string) *Session {
session := engine.NewSession() session := engine.NewSession()
session.Join(join_operator, tablename, condition) return session.Join(join_operator, tablename, condition)
return session
} }
func (engine *Engine) GroupBy(keys string) *Session { func (engine *Engine) GroupBy(keys string) *Session {
session := engine.NewSession() session := engine.NewSession()
session.GroupBy(keys) return session.GroupBy(keys)
return session
} }
func (engine *Engine) Having(conditions string) *Session { func (engine *Engine) Having(conditions string) *Session {
session := engine.NewSession() session := engine.NewSession()
session.Having(conditions) return session.Having(conditions)
return session
} }
// some lock needed // some lock needed

View File

@ -487,6 +487,7 @@ func (session *Session) Query(sql string, paramStr ...interface{}) (resultsSlice
defer session.Close() defer session.Close()
} }
// TODO: this statement should be invoke before Query
if session.Statement.RefTable != nil && session.Statement.RefTable.PrimaryKey != "" { if session.Statement.RefTable != nil && session.Statement.RefTable.PrimaryKey != "" {
sql = strings.Replace(sql, "(id)", session.Statement.RefTable.PrimaryKey, -1) sql = strings.Replace(sql, "(id)", session.Statement.RefTable.PrimaryKey, -1)
} }
@ -552,6 +553,8 @@ func (session *Session) Query(sql string, paramStr ...interface{}) (resultsSlice
if aa.String() == "time.Time" { if aa.String() == "time.Time" {
str = rawValue.Interface().(time.Time).Format("2006-01-02 15:04:05.000 -0700") str = rawValue.Interface().(time.Time).Format("2006-01-02 15:04:05.000 -0700")
result[key] = []byte(str) result[key] = []byte(str)
} else {
fmt.Print("Unsupported struct type")
} }
} }
//default: //default:
@ -729,24 +732,32 @@ func (session *Session) InsertOne(bean interface{}) (int64, error) {
if col.MapType == ONLYFROMDB { if col.MapType == ONLYFROMDB {
continue continue
} }
if fieldTable, ok := session.Engine.Tables[fieldValue.Type()]; ok { if fieldValue.Type().String() == "time.Time" {
if fieldTable.PrimaryKey != "" { args = append(args, val)
pkField := reflect.Indirect(fieldValue).FieldByName(fieldTable.PKColumn().FieldName) } else if fieldValue.Type().Kind() == reflect.Struct {
args = append(args, pkField.Interface()) if fieldValue.CanAddr() {
} else { if fieldConvert, ok := fieldValue.Addr().Interface().(Conversion); ok {
continue data, err := fieldConvert.ToDB()
} if err != nil {
} else if fieldValue.Type().Kind() == reflect.Struct && return 0, err
fieldValue.CanAddr() { } else {
if fieldConvert, ok := fieldValue.Addr().Interface().(Conversion); ok { args = append(args, string(data))
data, err := fieldConvert.ToDB() }
if err != nil {
return 0, err
} else { } else {
args = append(args, string(data)) if fieldTable, ok := session.Engine.Tables[fieldValue.Type()]; ok {
if fieldTable.PrimaryKey != "" {
pkField := reflect.Indirect(fieldValue).FieldByName(fieldTable.PKColumn().FieldName)
args = append(args, pkField.Interface())
} else {
continue
}
} else {
//args = append(args, val)
continue
}
} }
} else { } else {
args = append(args, val) continue
} }
} else { } else {
args = append(args, val) args = append(args, val)

View File

@ -96,13 +96,15 @@ func BuildConditions(engine *Engine, table *Table, bean interface{}) ([]string,
if t.IsZero() { if t.IsZero() {
continue continue
} }
} else {
engine.AutoMapType(fieldValue.Type())
} }
default: default:
continue continue
} }
if table, ok := engine.Tables[fieldValue.Type()]; ok { if table, ok := engine.Tables[fieldValue.Type()]; ok {
pkField := reflect.Indirect(fieldValue).FieldByName(table.PKColumn().FieldName) pkField := reflect.Indirect(fieldValue).FieldByName(table.PKColumn().FieldName)
fmt.Println(pkField.Interface())
if pkField.Int() != 0 { if pkField.Int() != 0 {
args = append(args, pkField.Interface()) args = append(args, pkField.Interface())
} else { } else {