bug fixed
This commit is contained in:
parent
bd1487ba55
commit
6384ada2bb
10
engine.go
10
engine.go
|
@ -134,8 +134,8 @@ func (engine *Engine) NoCascade() *Session {
|
|||
// Set a table use a special cacher
|
||||
func (engine *Engine) MapCacher(bean interface{}, cacher core.Cacher) {
|
||||
v := rValue(bean)
|
||||
engine.autoMapType(v)
|
||||
engine.Tables[v.Type()].Cacher = cacher
|
||||
tb := engine.autoMapType(v)
|
||||
tb.Cacher = cacher
|
||||
}
|
||||
|
||||
// NewDB provides an interface to operate database directly
|
||||
|
@ -483,7 +483,7 @@ func (engine *Engine) Desc(colNames ...string) *Session {
|
|||
return session.Desc(colNames...)
|
||||
}
|
||||
|
||||
// Method Asc will generate "ORDER BY column1 DESC, column2 Asc"
|
||||
// Method Asc will generate "ORDER BY column1,column2 Asc"
|
||||
// This method can chainable use.
|
||||
//
|
||||
// engine.Desc("name").Asc("age").Find(&users)
|
||||
|
@ -561,6 +561,7 @@ func (engine *Engine) newTable() *core.Table {
|
|||
}
|
||||
|
||||
func (engine *Engine) mapType(v reflect.Value) *core.Table {
|
||||
fmt.Println("has", v.NumField(), "fields")
|
||||
t := v.Type()
|
||||
table := engine.newTable()
|
||||
method := v.MethodByName("TableName")
|
||||
|
@ -587,10 +588,12 @@ func (engine *Engine) mapType(v reflect.Value) *core.Table {
|
|||
|
||||
for i := 0; i < t.NumField(); i++ {
|
||||
tag := t.Field(i).Tag
|
||||
|
||||
ormTagStr := tag.Get(engine.TagIdentifier)
|
||||
var col *core.Column
|
||||
fieldValue := v.Field(i)
|
||||
fieldType := fieldValue.Type()
|
||||
fmt.Println(table.Name, "===", t.Field(i).Name)
|
||||
|
||||
if ormTagStr != "" {
|
||||
col = &core.Column{FieldName: t.Field(i).Name, Nullable: true, IsPrimaryKey: false,
|
||||
|
@ -764,6 +767,7 @@ func (engine *Engine) mapType(v reflect.Value) *core.Table {
|
|||
sqlType = core.SQLType{core.Text, 0, 0}
|
||||
} else {
|
||||
sqlType = core.Type2SQLType(fieldType)
|
||||
fmt.Println(t.Field(i).Name, "...", sqlType)
|
||||
}
|
||||
col = core.NewColumn(engine.ColumnMapper.Obj2Table(t.Field(i).Name),
|
||||
t.Field(i).Name, sqlType, sqlType.DefaultLength,
|
||||
|
|
|
@ -3333,6 +3333,7 @@ func genCols(table *core.Table, session *Session, bean interface{}, useCol bool,
|
|||
args = append(args, session.Engine.NowTime(col.SQLType.Name))
|
||||
} else if col.IsVersion && session.Statement.checkVersion {
|
||||
args = append(args, 1)
|
||||
//} else if !col.DefaultIsEmpty {
|
||||
} else {
|
||||
arg, err := session.value2Interface(col, fieldValue)
|
||||
if err != nil {
|
||||
|
|
|
@ -264,6 +264,7 @@ func buildUpdates(engine *Engine, table *core.Table, bean interface{},
|
|||
|
||||
colNames := make([]string, 0)
|
||||
var args = make([]interface{}, 0)
|
||||
fmt.Println(table.ColumnsSeq())
|
||||
for _, col := range table.Columns() {
|
||||
if !includeVersion && col.IsVersion {
|
||||
continue
|
||||
|
@ -281,6 +282,7 @@ func buildUpdates(engine *Engine, table *core.Table, bean interface{},
|
|||
if engine.dialect.DBType() == core.MSSQL && col.SQLType.Name == core.Text {
|
||||
continue
|
||||
}
|
||||
fmt.Println("===", col.Name)
|
||||
fieldValuePtr, err := col.ValueOf(bean)
|
||||
if err != nil {
|
||||
engine.LogError(err)
|
||||
|
@ -291,6 +293,7 @@ func buildUpdates(engine *Engine, table *core.Table, bean interface{},
|
|||
fieldType := reflect.TypeOf(fieldValue.Interface())
|
||||
|
||||
requiredField := useAllCols
|
||||
includeNil := useAllCols
|
||||
if b, ok := mustColumnMap[strings.ToLower(col.Name)]; ok {
|
||||
if b {
|
||||
requiredField = true
|
||||
|
@ -323,9 +326,11 @@ func buildUpdates(engine *Engine, table *core.Table, bean interface{},
|
|||
goto APPEND
|
||||
}
|
||||
|
||||
fmt.Println(col.Name, "is", fieldValue)
|
||||
if fieldType.Kind() == reflect.Ptr {
|
||||
if fieldValue.IsNil() {
|
||||
if includeNil {
|
||||
fmt.Println(col.Name, "is nil")
|
||||
args = append(args, nil)
|
||||
colNames = append(colNames, fmt.Sprintf("%v=?", engine.Quote(col.Name)))
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue