Fix scan nil primitive type slice

This commit is contained in:
mlaflamm 2021-09-14 17:18:56 -04:00 committed by go-jet
parent b31464e491
commit fee77b695a
2 changed files with 12 additions and 8 deletions

View file

@ -214,9 +214,9 @@ func mapRowToBaseTypeSlice(scanContext *scanContext, slicePtrValue reflect.Value
} }
rowElemPtr := scanContext.rowElemValuePtr(index) rowElemPtr := scanContext.rowElemValuePtr(index)
if !rowElemPtr.IsNil() { if rowElemPtr != nil && !rowElemPtr.IsNil() {
updated = true updated = true
err = appendElemToSlice(slicePtrValue, rowElemPtr) err = appendElemToSlice(slicePtrValue, *rowElemPtr)
if err != nil { if err != nil {
return return
} }

View file

@ -222,19 +222,23 @@ func (s *scanContext) rowElem(index int) interface{} {
return value return value
} }
func (s *scanContext) rowElemValuePtr(index int) reflect.Value { func (s *scanContext) rowElemValuePtr(index int) *reflect.Value {
rowElem := s.rowElem(index) rowElem := s.rowElem(index)
rowElemValue := reflect.ValueOf(rowElem) rowElemValue := reflect.ValueOf(rowElem)
if rowElemValue.Kind() == reflect.Ptr { if rowElemValue.Kind() == reflect.Ptr {
return rowElemValue return &rowElemValue
} }
if rowElemValue.CanAddr() { if rowElemValue.CanAddr() {
return rowElemValue.Addr() addr := rowElemValue.Addr()
return &addr
} }
newElem := reflect.New(rowElemValue.Type()) if rowElemValue.IsValid() {
newElem.Elem().Set(rowElemValue) newElem := reflect.New(rowElemValue.Type())
return newElem newElem.Elem().Set(rowElemValue)
return &newElem
}
return nil
} }