Pre-allocate row slices.
This commit is contained in:
parent
02bae5a2cb
commit
4f81f5af63
2 changed files with 13 additions and 29 deletions
|
|
@ -214,7 +214,7 @@ stmt := SELECT(
|
|||
> Package(dot) import is used, so the statements look as close as possible to the native SQL.
|
||||
|
||||
Note that every column has a type. String columns, such as `Language.Name` and `Category.Name` can only be compared with
|
||||
string columns and expressions. Similarity, `Actor.ActorID`, `FilmActor.ActorID`, `Film.Length` are integer columns
|
||||
string columns and expressions. Similarly, `Actor.ActorID`, `FilmActor.ActorID`, `Film.Length` are integer columns
|
||||
and can only be compared with integer columns and expressions. The same type safety rules apply to arrays and their
|
||||
element types.
|
||||
|
||||
|
|
|
|||
|
|
@ -167,11 +167,11 @@ func ToSerializerValue(value interface{}) Serializer {
|
|||
func UnwindRowFromModel(columns []Column, data interface{}) []Serializer {
|
||||
structValue := reflect.Indirect(reflect.ValueOf(data))
|
||||
|
||||
row := []Serializer{}
|
||||
row := make([]Serializer, len(columns))
|
||||
|
||||
must.ValueBeOfTypeKind(structValue, reflect.Struct, "jet: data has to be a struct")
|
||||
|
||||
for _, column := range columns {
|
||||
for i, column := range columns {
|
||||
columnName := column.Name()
|
||||
structFieldName := dbidentifier.ToGoIdentifier(columnName)
|
||||
|
||||
|
|
@ -189,7 +189,7 @@ func UnwindRowFromModel(columns []Column, data interface{}) []Serializer {
|
|||
field = reflect.Indirect(structField).Interface()
|
||||
}
|
||||
|
||||
row = append(row, literal(field))
|
||||
row[i] = literal(field)
|
||||
}
|
||||
|
||||
return row
|
||||
|
|
@ -200,12 +200,13 @@ func UnwindRowsFromModels(columns []Column, data interface{}) [][]Serializer {
|
|||
sliceValue := reflect.Indirect(reflect.ValueOf(data))
|
||||
must.ValueBeOfTypeKind(sliceValue, reflect.Slice, "jet: data has to be a slice.")
|
||||
|
||||
rows := [][]Serializer{}
|
||||
sliceLen := sliceValue.Len()
|
||||
rows := make([][]Serializer, sliceLen)
|
||||
|
||||
for i := 0; i < sliceValue.Len(); i++ {
|
||||
for i := 0; i < sliceLen; i++ {
|
||||
structValue := sliceValue.Index(i)
|
||||
|
||||
rows = append(rows, UnwindRowFromModel(columns, structValue.Interface()))
|
||||
rows[i] = UnwindRowFromModel(columns, structValue.Interface())
|
||||
}
|
||||
|
||||
return rows
|
||||
|
|
@ -213,37 +214,20 @@ func UnwindRowsFromModels(columns []Column, data interface{}) [][]Serializer {
|
|||
|
||||
// UnwindRowFromValues func
|
||||
func UnwindRowFromValues(value interface{}, values []interface{}) []Serializer {
|
||||
row := []Serializer{}
|
||||
|
||||
allValues := append([]interface{}{value}, values...)
|
||||
|
||||
for _, val := range allValues {
|
||||
row = append(row, ToSerializerValue(val))
|
||||
row := make([]Serializer, len(allValues))
|
||||
|
||||
for i, val := range allValues {
|
||||
row[i] = ToSerializerValue(val)
|
||||
}
|
||||
|
||||
return row
|
||||
}
|
||||
|
||||
// UnwindColumns func
|
||||
func UnwindColumns(column1 Column, columns ...Column) []Column {
|
||||
columnList := []Column{}
|
||||
|
||||
if val, ok := column1.(ColumnList); ok {
|
||||
for _, col := range val {
|
||||
columnList = append(columnList, col)
|
||||
}
|
||||
columnList = append(columnList, columns...)
|
||||
} else {
|
||||
columnList = append(columnList, column1)
|
||||
columnList = append(columnList, columns...)
|
||||
}
|
||||
|
||||
return columnList
|
||||
}
|
||||
|
||||
// UnwidColumnList func
|
||||
func UnwidColumnList(columns []Column) []Column {
|
||||
ret := []Column{}
|
||||
var ret []Column
|
||||
|
||||
for _, col := range columns {
|
||||
if columnList, ok := col.(ColumnList); ok {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue