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
}
}