didi / gendry

a golang library for sql builder
Apache License 2.0
1.6k stars 191 forks source link

ctx超时或取消情况下,scanner.Scan()方法会把err吞掉,不返回err,导致读出的数据不全 #143

Closed winston-ke closed 11 months ago

winston-ke commented 11 months ago

go/src/database/sql/sql.go #3010行在rs.lasterr != io.EOF情况下返回fasle, 从而跳出rows.Next()循环,但实际数据没有读全,应该在

for rows.Next() { err = rows.Scan(values...) if nil != err { return nil, err } mp := make(map[string]interface{}) for idx, name := range columns { //mp[name] = reflect.ValueOf(values[idx]).Elem().Interface() mp[name] = (values[idx].(interface{})) } result = append(result, mp) } err := rows.Err() if err != nil { // 应该在循环后检查err 并返回 return nil ,err }