Skip to content

Commit

Permalink
More array scan hooks
Browse files Browse the repository at this point in the history
  • Loading branch information
vmihailenco committed Nov 1, 2018
1 parent f941648 commit e482439
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 3 deletions.
8 changes: 8 additions & 0 deletions example_array_test.go
Expand Up @@ -48,6 +48,10 @@ type MyArrayValueScanner struct {

var _ types.ArrayValueScanner = (*MyArrayValueScanner)(nil)

func (s *MyArrayValueScanner) BeforeScanArrayValue(rd types.Reader, n int) error {
return nil
}

func (s *MyArrayValueScanner) ScanArrayValue(rd types.Reader, n int) error {
num, err := types.ScanInt(rd, n)
if err != nil {
Expand All @@ -57,6 +61,10 @@ func (s *MyArrayValueScanner) ScanArrayValue(rd types.Reader, n int) error {
return nil
}

func (s *MyArrayValueScanner) AfterScanArrayValue() error {
return nil
}

func ExampleDB_arrayValueScanner() {
var dst MyArrayValueScanner
_, err := pgdb.QueryOne(pg.Scan(pg.Array(&dst)),
Expand Down
12 changes: 9 additions & 3 deletions types/array_scan.go
Expand Up @@ -10,7 +10,9 @@ import (
var arrayValueScannerType = reflect.TypeOf((*ArrayValueScanner)(nil)).Elem()

type ArrayValueScanner interface {
BeforeScanArrayValue(rd Reader, n int) error
ScanArrayValue(rd Reader, n int) error
AfterScanArrayValue() error
}

func ArrayScanner(typ reflect.Type) ScannerFunc {
Expand Down Expand Up @@ -293,10 +295,14 @@ func scanArrayValueScannerValue(v reflect.Value, rd Reader, n int) error {
v.Set(reflect.New(v.Type().Elem()))
}

p := newArrayParser(rd)
scanner := v.Interface().(ArrayValueScanner)
var elemRd *internal.BytesReader
err := scanner.BeforeScanArrayValue(rd, n)
if err != nil {
return err
}

p := newArrayParser(rd)
var elemRd *internal.BytesReader
for p.Valid() {
elem, err := p.NextElem()
if err != nil {
Expand Down Expand Up @@ -325,5 +331,5 @@ func scanArrayValueScannerValue(v reflect.Value, rd Reader, n int) error {
}
}

return nil
return scanner.AfterScanArrayValue()
}

0 comments on commit e482439

Please sign in to comment.