refactor rowsbean
This commit is contained in:
parent
0d9762712b
commit
d170089adf
5
rows.go
5
rows.go
|
@ -112,7 +112,10 @@ func (rows *Rows) Scan(bean interface{}) error {
|
||||||
return fmt.Errorf("scan arg is incompatible type to [%v]", rows.beanType)
|
return fmt.Errorf("scan arg is incompatible type to [%v]", rows.beanType)
|
||||||
}
|
}
|
||||||
|
|
||||||
_, err := rows.session.row2Bean(rows.rows, rows.fields, len(rows.fields), bean)
|
dataStruct := rValue(bean)
|
||||||
|
rows.session.Statement.setRefValue(dataStruct)
|
||||||
|
_, err := rows.session.row2Bean(rows.rows, rows.fields, len(rows.fields), bean, &dataStruct, rows.session.Statement.RefTable)
|
||||||
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
15
session.go
15
session.go
|
@ -380,7 +380,7 @@ func (session *Session) rows2Beans(rows *core.Rows, fields []string, fieldsCount
|
||||||
var newValue = newElemFunc(fields)
|
var newValue = newElemFunc(fields)
|
||||||
bean := newValue.Interface()
|
bean := newValue.Interface()
|
||||||
dataStruct := rValue(bean)
|
dataStruct := rValue(bean)
|
||||||
pk, err := session._row2Bean(rows, fields, fieldsCount, bean, &dataStruct, table)
|
pk, err := session.row2Bean(rows, fields, fieldsCount, bean, &dataStruct, table)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
@ -393,18 +393,7 @@ func (session *Session) rows2Beans(rows *core.Rows, fields []string, fieldsCount
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (session *Session) row2Bean(rows *core.Rows, fields []string, fieldsCount int, bean interface{}) (core.PK, error) {
|
func (session *Session) row2Bean(rows *core.Rows, fields []string, fieldsCount int, bean interface{}, dataStruct *reflect.Value, table *core.Table) (core.PK, error) {
|
||||||
dataStruct := rValue(bean)
|
|
||||||
if dataStruct.Kind() != reflect.Struct {
|
|
||||||
return nil, errors.New("Expected a pointer to a struct")
|
|
||||||
}
|
|
||||||
|
|
||||||
session.Statement.setRefValue(dataStruct)
|
|
||||||
|
|
||||||
return session._row2Bean(rows, fields, fieldsCount, bean, &dataStruct, session.Statement.RefTable)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (session *Session) _row2Bean(rows *core.Rows, fields []string, fieldsCount int, bean interface{}, dataStruct *reflect.Value, table *core.Table) (core.PK, error) {
|
|
||||||
scanResults := make([]interface{}, fieldsCount)
|
scanResults := make([]interface{}, fieldsCount)
|
||||||
for i := 0; i < len(fields); i++ {
|
for i := 0; i < len(fields); i++ {
|
||||||
var cell interface{}
|
var cell interface{}
|
||||||
|
|
|
@ -85,7 +85,9 @@ func (session *Session) nocacheGet(beanKind reflect.Kind, bean interface{}, sqlS
|
||||||
|
|
||||||
switch beanKind {
|
switch beanKind {
|
||||||
case reflect.Struct:
|
case reflect.Struct:
|
||||||
_, err = session.row2Bean(rawRows, fields, len(fields), bean)
|
dataStruct := rValue(bean)
|
||||||
|
session.Statement.setRefValue(dataStruct)
|
||||||
|
_, err = session.row2Bean(rawRows, fields, len(fields), bean, &dataStruct, session.Statement.RefTable)
|
||||||
case reflect.Slice:
|
case reflect.Slice:
|
||||||
err = rawRows.ScanSlice(bean)
|
err = rawRows.ScanSlice(bean)
|
||||||
case reflect.Map:
|
case reflect.Map:
|
||||||
|
|
Loading…
Reference in New Issue