add private scanner for scan

This commit is contained in:
jiangchangren 2022-12-01 11:00:12 +08:00
parent f91313436a
commit 4981881dc7

15
scan.go
View File

@ -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()