summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/model_scan.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/model_scan.go')
-rw-r--r--vendor/github.com/uptrace/bun/model_scan.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/model_scan.go b/vendor/github.com/uptrace/bun/model_scan.go
new file mode 100644
index 000000000..6dd061fb2
--- /dev/null
+++ b/vendor/github.com/uptrace/bun/model_scan.go
@@ -0,0 +1,54 @@
+package bun
+
+import (
+ "context"
+ "database/sql"
+ "reflect"
+)
+
+type scanModel struct {
+ db *DB
+
+ dest []interface{}
+ scanIndex int
+}
+
+var _ model = (*scanModel)(nil)
+
+func newScanModel(db *DB, dest []interface{}) *scanModel {
+ return &scanModel{
+ db: db,
+ dest: dest,
+ }
+}
+
+func (m *scanModel) Value() interface{} {
+ return m.dest
+}
+
+func (m *scanModel) ScanRows(ctx context.Context, rows *sql.Rows) (int, error) {
+ if !rows.Next() {
+ return 0, rows.Err()
+ }
+
+ dest := makeDest(m, len(m.dest))
+
+ m.scanIndex = 0
+ if err := rows.Scan(dest...); err != nil {
+ return 0, err
+ }
+
+ return 1, nil
+}
+
+func (m *scanModel) ScanRow(ctx context.Context, rows *sql.Rows) error {
+ return rows.Scan(m.dest...)
+}
+
+func (m *scanModel) Scan(src interface{}) error {
+ dest := reflect.ValueOf(m.dest[m.scanIndex])
+ m.scanIndex++
+
+ scanner := m.db.dialect.Scanner(dest.Type())
+ return scanner(dest, src)
+}