summaryrefslogtreecommitdiff
path: root/vendor/github.com/go-pg/pg/v10/orm/model_scan.go
blob: 08f66bebac1fc3874d6d6943bec8fd730a7484d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
package orm

import (
	"fmt"
	"reflect"

	"github.com/go-pg/pg/v10/types"
)

type scanValuesModel struct {
	Discard
	values []interface{}
}

var _ Model = scanValuesModel{}

//nolint
func Scan(values ...interface{}) scanValuesModel {
	return scanValuesModel{
		values: values,
	}
}

func (scanValuesModel) useQueryOne() bool {
	return true
}

func (m scanValuesModel) NextColumnScanner() ColumnScanner {
	return m
}

func (m scanValuesModel) ScanColumn(col types.ColumnInfo, rd types.Reader, n int) error {
	if int(col.Index) >= len(m.values) {
		return fmt.Errorf("pg: no Scan var for column index=%d name=%q",
			col.Index, col.Name)
	}
	return types.Scan(m.values[col.Index], rd, n)
}

//------------------------------------------------------------------------------

type scanReflectValuesModel struct {
	Discard
	values []reflect.Value
}

var _ Model = scanReflectValuesModel{}

func scanReflectValues(values []reflect.Value) scanReflectValuesModel {
	return scanReflectValuesModel{
		values: values,
	}
}

func (scanReflectValuesModel) useQueryOne() bool {
	return true
}

func (m scanReflectValuesModel) NextColumnScanner() ColumnScanner {
	return m
}

func (m scanReflectValuesModel) ScanColumn(col types.ColumnInfo, rd types.Reader, n int) error {
	if int(col.Index) >= len(m.values) {
		return fmt.Errorf("pg: no Scan var for column index=%d name=%q",
			col.Index, col.Name)
	}
	return types.ScanValue(m.values[col.Index], rd, n)
}