From 4981881dc724f4f5b1c4998c0f8c223f40f26a59 Mon Sep 17 00:00:00 2001 From: jiangchangren Date: Thu, 1 Dec 2022 11:00:12 +0800 Subject: [PATCH] add private scanner for scan --- scan.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/scan.go b/scan.go index 0a26ce4b..5ac4ec15 100644 --- a/scan.go +++ b/scan.go @@ -98,6 +98,10 @@ func (db *DB) scanIntoStruct(rows Rows, reflectValue reflect.Value, values []int // ScanMode scan data mode type ScanMode uint8 +type Scanner interface { + Scan(values []interface{}, columns []string) +} + // scan modes const ( ScanInitialized ScanMode = 1 << 0 // 1 @@ -118,6 +122,17 @@ func Scan(rows Rows, db *DB, mode ScanMode) { db.RowsAffected = 0 switch dest := db.Statement.Dest.(type) { + case Scanner: + columnTypes, _ := rows.ColumnTypes() + for initialized || rows.Next() { + prepareValues(values, db, columnTypes, columns) + + initialized = false + db.RowsAffected++ + db.AddError(rows.Scan(values...)) + + dest.Scan(values,columns) + } case map[string]interface{}, *map[string]interface{}: if initialized || rows.Next() { columnTypes, _ := rows.ColumnTypes()