diff --git a/engine.go b/engine.go index d2db0cc7..77a636d4 100644 --- a/engine.go +++ b/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, diff --git a/session.go b/session.go index 591850af..cfa5696e 100644 --- a/session.go +++ b/session.go @@ -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 { diff --git a/statement.go b/statement.go index c19247a2..865e67d3 100644 --- a/statement.go +++ b/statement.go @@ -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))) }