feat: optimize relect value length and value
This commit is contained in:
parent
125d6b0f24
commit
c0b910e7d3
@ -288,12 +288,13 @@ func SaveAfterAssociations(create bool) func(db *gorm.DB) {
|
|||||||
appendToElems(db.Statement.ReflectValue)
|
appendToElems(db.Statement.ReflectValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
if elems.Len() > 0 {
|
// optimize elems of reflect value length
|
||||||
|
if elemLen := elems.Len(); elemLen > 0 {
|
||||||
if v, ok := selectColumns[rel.Name+".*"]; !ok || v {
|
if v, ok := selectColumns[rel.Name+".*"]; !ok || v {
|
||||||
saveAssociations(db, rel, elems.Interface(), selectColumns, restricted, nil)
|
saveAssociations(db, rel, elems.Interface(), selectColumns, restricted, nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < elems.Len(); i++ {
|
for i := 0; i < elemLen; i++ {
|
||||||
appendToJoins(objs[i], elems.Index(i))
|
appendToJoins(objs[i], elems.Index(i))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -71,10 +71,10 @@ func GetRelationsValues(reflectValue reflect.Value, rels []*Relationship) (refle
|
|||||||
reflectResults = reflect.Append(reflectResults, result.Addr())
|
reflectResults = reflect.Append(reflectResults, result.Addr())
|
||||||
case reflect.Slice, reflect.Array:
|
case reflect.Slice, reflect.Array:
|
||||||
for i := 0; i < result.Len(); i++ {
|
for i := 0; i < result.Len(); i++ {
|
||||||
if result.Index(i).Kind() == reflect.Ptr {
|
if elem := result.Index(i); elem.Kind() == reflect.Ptr {
|
||||||
reflectResults = reflect.Append(reflectResults, result.Index(i))
|
reflectResults = reflect.Append(reflectResults, elem)
|
||||||
} else {
|
} else {
|
||||||
reflectResults = reflect.Append(reflectResults, result.Index(i).Addr())
|
reflectResults = reflect.Append(reflectResults, elem.Addr())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
12
statement.go
12
statement.go
@ -328,8 +328,10 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []
|
|||||||
} else if _, ok := v[key].(Valuer); ok {
|
} else if _, ok := v[key].(Valuer); ok {
|
||||||
conds = append(conds, clause.Eq{Column: key, Value: v[key]})
|
conds = append(conds, clause.Eq{Column: key, Value: v[key]})
|
||||||
} else {
|
} else {
|
||||||
values := make([]interface{}, reflectValue.Len())
|
// optimize relect value length
|
||||||
for i := 0; i < reflectValue.Len(); i++ {
|
valueLen := reflectValue.Len()
|
||||||
|
values := make([]interface{}, valueLen)
|
||||||
|
for i := 0; i < valueLen; i++ {
|
||||||
values[i] = reflectValue.Index(i).Interface()
|
values[i] = reflectValue.Index(i).Interface()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -396,8 +398,10 @@ func (stmt *Statement) BuildCondition(query interface{}, args ...interface{}) []
|
|||||||
if len(args) == 1 {
|
if len(args) == 1 {
|
||||||
switch reflectValue.Kind() {
|
switch reflectValue.Kind() {
|
||||||
case reflect.Slice, reflect.Array:
|
case reflect.Slice, reflect.Array:
|
||||||
values := make([]interface{}, reflectValue.Len())
|
// optimize relect value length
|
||||||
for i := 0; i < reflectValue.Len(); i++ {
|
valueLen := reflectValue.Len()
|
||||||
|
values := make([]interface{}, valueLen)
|
||||||
|
for i := 0; i < valueLen; i++ {
|
||||||
values[i] = reflectValue.Index(i).Interface()
|
values[i] = reflectValue.Index(i).Interface()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user