summaryrefslogtreecommitdiff
path: root/vendor/github.com/go-pg/pg/v10/orm/model_slice.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/go-pg/pg/v10/orm/model_slice.go')
-rw-r--r--vendor/github.com/go-pg/pg/v10/orm/model_slice.go43
1 files changed, 43 insertions, 0 deletions
diff --git a/vendor/github.com/go-pg/pg/v10/orm/model_slice.go b/vendor/github.com/go-pg/pg/v10/orm/model_slice.go
new file mode 100644
index 000000000..1e163629e
--- /dev/null
+++ b/vendor/github.com/go-pg/pg/v10/orm/model_slice.go
@@ -0,0 +1,43 @@
+package orm
+
+import (
+ "reflect"
+
+ "github.com/go-pg/pg/v10/internal"
+ "github.com/go-pg/pg/v10/types"
+)
+
+type sliceModel struct {
+ Discard
+ slice reflect.Value
+ nextElem func() reflect.Value
+ scan func(reflect.Value, types.Reader, int) error
+}
+
+var _ Model = (*sliceModel)(nil)
+
+func newSliceModel(slice reflect.Value, elemType reflect.Type) *sliceModel {
+ return &sliceModel{
+ slice: slice,
+ scan: types.Scanner(elemType),
+ }
+}
+
+func (m *sliceModel) Init() error {
+ if m.slice.IsValid() && m.slice.Len() > 0 {
+ m.slice.Set(m.slice.Slice(0, 0))
+ }
+ return nil
+}
+
+func (m *sliceModel) NextColumnScanner() ColumnScanner {
+ return m
+}
+
+func (m *sliceModel) ScanColumn(col types.ColumnInfo, rd types.Reader, n int) error {
+ if m.nextElem == nil {
+ m.nextElem = internal.MakeSliceNextElemFunc(m.slice)
+ }
+ v := m.nextElem()
+ return m.scan(v, rd, n)
+}