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
}