package orm
import (
)
type manyModel struct {
*sliceTableModel
baseTable *Table
rel *Relation
buf []byte
dstValues map[string][]reflect.Value
}
var _ TableModel = (*manyModel)(nil)
func ( *join) *manyModel {
:= .BaseModel.Table()
:= .JoinModel.(*sliceTableModel)
:= dstValues(, .Rel.BaseFKs)
if len() == 0 {
return nil
}
:= manyModel{
sliceTableModel: ,
baseTable: ,
rel: .Rel,
dstValues: ,
}
if !.sliceOfPtr {
.strct = reflect.New(.table.Type).Elem()
}
return &
}
func ( *manyModel) () ColumnScanner {
if .sliceOfPtr {
.strct = reflect.New(.table.Type).Elem()
} else {
.strct.Set(.table.zeroStruct)
}
.structInited = false
return
}
func ( *manyModel) ( ColumnScanner) error {
.buf = modelID(.buf[:0], .strct, .rel.JoinFKs)
, := .dstValues[string(.buf)]
if ! {
return fmt.Errorf(
"pg: relation=%q does not have base %s with id=%q (check join conditions)",
.rel.Field.GoName, .baseTable, .buf)
}
for , := range {
if !.sliceOfPtr {
.Set(reflect.Append(, .strct))
continue
}
if == 0 {
.Set(reflect.Append(, .strct.Addr()))
continue
}
:= reflect.New(.strct.Type()).Elem()
.Set(.strct)
.Set(reflect.Append(, .Addr()))
}
return nil
}