diff --git a/qrm/qrm.go b/qrm/qrm.go index 142f722..c21ce1f 100644 --- a/qrm/qrm.go +++ b/qrm/qrm.go @@ -214,9 +214,9 @@ func mapRowToBaseTypeSlice(scanContext *scanContext, slicePtrValue reflect.Value } rowElemPtr := scanContext.rowElemValuePtr(index) - if rowElemPtr != nil && !rowElemPtr.IsNil() { + if rowElemPtr.IsValid() && !rowElemPtr.IsNil() { updated = true - err = appendElemToSlice(slicePtrValue, *rowElemPtr) + err = appendElemToSlice(slicePtrValue, rowElemPtr) if err != nil { return } diff --git a/qrm/scan_context.go b/qrm/scan_context.go index d11f40b..5f26e8d 100644 --- a/qrm/scan_context.go +++ b/qrm/scan_context.go @@ -222,23 +222,23 @@ func (s *scanContext) rowElem(index int) interface{} { return value } -func (s *scanContext) rowElemValuePtr(index int) *reflect.Value { +func (s *scanContext) rowElemValuePtr(index int) reflect.Value { rowElem := s.rowElem(index) rowElemValue := reflect.ValueOf(rowElem) + if !rowElemValue.IsValid() { + return reflect.Value{} + } + if rowElemValue.Kind() == reflect.Ptr { - return &rowElemValue + return rowElemValue } if rowElemValue.CanAddr() { - addr := rowElemValue.Addr() - return &addr + return rowElemValue.Addr() } - if rowElemValue.IsValid() { - newElem := reflect.New(rowElemValue.Type()) - newElem.Elem().Set(rowElemValue) - return &newElem - } - return nil + newElem := reflect.New(rowElemValue.Type()) + newElem.Elem().Set(rowElemValue) + return newElem }