diff --git a/VERSION b/VERSION index bff78cca..915f9513 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -xorm v0.4.3.0812 +xorm v0.4.3.0824 diff --git a/session.go b/session.go index 3e26bba6..a8f53117 100644 --- a/session.go +++ b/session.go @@ -2998,16 +2998,20 @@ func (session *Session) value2Interface(col *core.Column, fieldValue reflect.Val return tf, nil } - if fieldTable, ok := session.Engine.Tables[fieldValue.Type()]; ok { - if len(fieldTable.PrimaryKeys) == 1 { - pkField := reflect.Indirect(fieldValue).FieldByName(fieldTable.PKColumns()[0].FieldName) - return pkField.Interface(), nil + if !col.SQLType.IsJson() { + // !! 增加支持driver.Valuer接口的结构,如sql.NullString + if v, ok := fieldValue.Interface().(driver.Valuer); ok { + return v.Value() } - return 0, fmt.Errorf("no primary key for col %v", col.Name) - } - // !! 增加支持driver.Valuer接口的结构,如sql.NullString - if v, ok := fieldValue.Interface().(driver.Valuer); ok { - return v.Value() + + fieldTable := session.Engine.autoMapType(fieldValue) + //if fieldTable, ok := session.Engine.Tables[fieldValue.Type()]; ok { + if len(fieldTable.PrimaryKeys) == 1 { + pkField := reflect.Indirect(fieldValue).FieldByName(fieldTable.PKColumns()[0].FieldName) + return pkField.Interface(), nil + } + return 0, fmt.Errorf("no primary key for col %v", col.Name) + //} } if col.SQLType.IsText() { diff --git a/xorm.go b/xorm.go index df4f3c18..4f4d8938 100644 --- a/xorm.go +++ b/xorm.go @@ -17,7 +17,7 @@ import ( ) const ( - Version string = "0.4.3.0812" + Version string = "0.4.3.0824" ) func regDrvsNDialects() bool {