fix tests
This commit is contained in:
parent
23a143717c
commit
2acd543562
24
session.go
24
session.go
|
@ -450,7 +450,7 @@ func (session *Session) row2Slice(rows *core.Rows, types []*sql.ColumnType, fiel
|
||||||
}
|
}
|
||||||
|
|
||||||
// convertAssign converts an interface src to dst reflect.Value fieldValue
|
// convertAssign converts an interface src to dst reflect.Value fieldValue
|
||||||
func (session *Session) convertAssign(fieldValue *reflect.Value, columnName string, src interface{}, table *schemas.Table, pk *schemas.PK, idx int) error {
|
func (session *Session) convertAssign(fieldValue *reflect.Value, columnName string, src interface{}, col *schemas.Column) error {
|
||||||
if fieldValue == nil {
|
if fieldValue == nil {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
@ -532,10 +532,6 @@ func (session *Session) convertAssign(fieldValue *reflect.Value, columnName stri
|
||||||
|
|
||||||
rawValueType := reflect.TypeOf(rawValue.Interface())
|
rawValueType := reflect.TypeOf(rawValue.Interface())
|
||||||
vv := reflect.ValueOf(rawValue.Interface())
|
vv := reflect.ValueOf(rawValue.Interface())
|
||||||
col := table.GetColumnIdx(columnName, idx)
|
|
||||||
if col.IsPrimaryKey {
|
|
||||||
*pk = append(*pk, rawValue.Interface())
|
|
||||||
}
|
|
||||||
fieldType := fieldValue.Type()
|
fieldType := fieldValue.Type()
|
||||||
hasAssigned := false
|
hasAssigned := false
|
||||||
|
|
||||||
|
@ -894,13 +890,22 @@ func (session *Session) convertAssign(fieldValue *reflect.Value, columnName stri
|
||||||
// !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch
|
// !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch
|
||||||
// however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne
|
// however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne
|
||||||
// property to be fetched lazily
|
// property to be fetched lazily
|
||||||
structInter := reflect.New(fieldValue.Type())
|
t := fieldValue.Type()
|
||||||
|
var isPtr = t.Kind() == reflect.Ptr
|
||||||
|
if isPtr {
|
||||||
|
t = t.Elem()
|
||||||
|
}
|
||||||
|
structInter := reflect.New(t)
|
||||||
has, err := session.ID(pk).NoCascade().get(structInter.Interface())
|
has, err := session.ID(pk).NoCascade().get(structInter.Interface())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
if has {
|
if has {
|
||||||
|
if isPtr {
|
||||||
|
fieldValue.Set(structInter)
|
||||||
|
} else {
|
||||||
fieldValue.Set(structInter.Elem())
|
fieldValue.Set(structInter.Elem())
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
return errors.New("cascade obj is not exist")
|
return errors.New("cascade obj is not exist")
|
||||||
}
|
}
|
||||||
|
@ -948,10 +953,15 @@ func (session *Session) slice2Bean(scanResults []interface{}, columnNames []stri
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
col := table.GetColumnIdx(columnName, idx)
|
||||||
fmt.Printf("88888====== %#v \n ", scanResults[i])
|
fmt.Printf("88888====== %#v \n ", scanResults[i])
|
||||||
if err := session.convertAssign(fieldValue, columnName, scanResults[i], table, &pk, idx); err != nil {
|
if err := session.convertAssign(fieldValue, columnName, scanResults[i], col); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if col.IsPrimaryKey {
|
||||||
|
pk = append(pk, fieldValue.Interface())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return pk, nil
|
return pk, nil
|
||||||
}
|
}
|
||||||
|
|
|
@ -194,6 +194,7 @@ func (session *Session) bytes2Value(col *schemas.Column, fieldValue *reflect.Val
|
||||||
v = x
|
v = x
|
||||||
fieldValue.Set(reflect.ValueOf(v).Convert(fieldType))
|
fieldValue.Set(reflect.ValueOf(v).Convert(fieldType))
|
||||||
} else if session.statement.UseCascade {
|
} else if session.statement.UseCascade {
|
||||||
|
fmt.Println("====2222")
|
||||||
table, err := session.engine.tagParser.ParseWithCache(*fieldValue)
|
table, err := session.engine.tagParser.ParseWithCache(*fieldValue)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -215,7 +216,7 @@ func (session *Session) bytes2Value(col *schemas.Column, fieldValue *reflect.Val
|
||||||
// !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch
|
// !nashtsai! TODO for hasOne relationship, it's preferred to use join query for eager fetch
|
||||||
// however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne
|
// however, also need to consider adding a 'lazy' attribute to xorm tag which allow hasOne
|
||||||
// property to be fetched lazily
|
// property to be fetched lazily
|
||||||
structInter := reflect.New(fieldValue.Type())
|
structInter := reflect.New(fieldValue.Elem().Type())
|
||||||
has, err := session.ID(pk).NoCascade().get(structInter.Interface())
|
has, err := session.ID(pk).NoCascade().get(structInter.Interface())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -474,6 +475,7 @@ func (session *Session) bytes2Value(col *schemas.Column, fieldValue *reflect.Val
|
||||||
fieldValue.Set(reflect.ValueOf(&x))
|
fieldValue.Set(reflect.ValueOf(&x))
|
||||||
default:
|
default:
|
||||||
if session.statement.UseCascade {
|
if session.statement.UseCascade {
|
||||||
|
fmt.Println("====1111")
|
||||||
structInter := reflect.New(fieldType.Elem())
|
structInter := reflect.New(fieldType.Elem())
|
||||||
table, err := session.engine.tagParser.ParseWithCache(structInter.Elem())
|
table, err := session.engine.tagParser.ParseWithCache(structInter.Elem())
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
@ -179,12 +179,15 @@ func (session *Session) noCacheFind(table *schemas.Table, containerValue reflect
|
||||||
|
|
||||||
var newElemFunc func(fields []string) reflect.Value
|
var newElemFunc func(fields []string) reflect.Value
|
||||||
elemType := containerValue.Type().Elem()
|
elemType := containerValue.Type().Elem()
|
||||||
|
|
||||||
var isPointer bool
|
var isPointer bool
|
||||||
if elemType.Kind() == reflect.Ptr {
|
if elemType.Kind() == reflect.Ptr {
|
||||||
|
fmt.Printf("1===== %#v %#v \n", elemType, containerValue.Interface())
|
||||||
isPointer = true
|
isPointer = true
|
||||||
elemType = elemType.Elem()
|
elemType = elemType.Elem()
|
||||||
}
|
}
|
||||||
if elemType.Kind() == reflect.Ptr {
|
if elemType.Kind() == reflect.Ptr {
|
||||||
|
fmt.Printf("2===== %#v \n", elemType)
|
||||||
return errors.New("pointer to pointer is not supported")
|
return errors.New("pointer to pointer is not supported")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -41,6 +41,8 @@ func (session *Session) get(bean interface{}) (bool, error) {
|
||||||
return false, session.statement.LastError
|
return false, session.statement.LastError
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fmt.Printf("========11111,,, %#v \n", bean)
|
||||||
|
|
||||||
beanValue := reflect.ValueOf(bean)
|
beanValue := reflect.ValueOf(bean)
|
||||||
if beanValue.Kind() != reflect.Ptr {
|
if beanValue.Kind() != reflect.Ptr {
|
||||||
return false, errors.New("needs a pointer to a value")
|
return false, errors.New("needs a pointer to a value")
|
||||||
|
@ -172,6 +174,7 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, table *schemas.Table,
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return true, err
|
return true, err
|
||||||
}
|
}
|
||||||
|
|
||||||
switch beanKind {
|
switch beanKind {
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
if _, ok := bean.(*time.Time); ok {
|
if _, ok := bean.(*time.Time); ok {
|
||||||
|
|
Loading…
Reference in New Issue