package orm

import (
	
	

	
	
)

func ( reflect.Type) types.ScannerFunc {
	if .Kind() == reflect.Ptr {
		 = .Elem()
	}

	var  *Table
	return func( reflect.Value,  types.Reader,  int) error {
		if  == -1 {
			.Set(reflect.Zero(.Type()))
			return nil
		}

		if  == nil {
			 = GetTable()
		}
		if .Kind() == reflect.Ptr {
			if .IsNil() {
				.Set(reflect.New(.Type().Elem()))
			}
			 = .Elem()
		}

		 := newCompositeParser()
		var  *pool.BytesReader

		var  error
		for  := 0; ; ++ {
			,  := .NextElem()
			if  != nil {
				if  == errEndOfComposite {
					break
				}
				return 
			}

			if  >= len(.Fields) {
				if  == nil {
					 = fmt.Errorf(
						"pg: %s has %d fields, but composite requires at least %d values",
						, len(.Fields), )
				}
				continue
			}

			if  == nil {
				 = pool.NewBytesReader()
			} else {
				.Reset()
			}

			 := .Fields[]
			if  == nil {
				 = .ScanValue(, , -1)
			} else {
				 = .ScanValue(, , len())
			}
			if  != nil &&  == nil {
				 = 
			}
		}

		return 
	}
}

func ( reflect.Type) types.AppenderFunc {
	if .Kind() == reflect.Ptr {
		 = .Elem()
	}

	var  *Table
	return func( []byte,  reflect.Value,  int) []byte {
		if  == nil {
			 = GetTable()
		}
		if .Kind() == reflect.Ptr {
			 = .Elem()
		}

		 = append(, "ROW("...)
		for ,  := range .Fields {
			if  > 0 {
				 = append(, ',')
			}
			 = .AppendValue(, , )
		}
		 = append(, ')')
		return 
	}
}