diff --git a/util/sqlutil/fetch.go b/util/sqlutil/fetch.go
index 73dd137678940bdbc893a93a68d66f041bb77527..13053d1da2e20b147cfa91df79b855a736040ce6 100644
--- a/util/sqlutil/fetch.go
+++ b/util/sqlutil/fetch.go
@@ -152,7 +152,7 @@ func fetchResult(itemT reflect.Type, rows *sqlx.Rows, columns []string) (reflect
 		values := make([]interface{}, len(columns))
 		typeMap := rows.Mapper.TypeMap(itemT)
 		fieldMap := typeMap.Names
-		wrappedValues := map[reflect.Value][]interface{}{}
+		wrappedValues := map[*reflectx.Field]interface{}{}
 
 		for i, k := range columns {
 			fi, ok := fieldMap[k]
@@ -161,19 +161,18 @@ func fetchResult(itemT reflect.Type, rows *sqlx.Rows, columns []string) (reflect
 				continue
 			}
 
-			f := reflectx.FieldByIndexesReadOnly(item, fi.Index)
-
 			// TODO: refactor into a nice pattern
 			if _, ok := fi.Options["stringarray"]; ok {
 				values[i] = &[]byte{}
-				wrappedValues[f] = []interface{}{"stringarray", values[i]}
+				wrappedValues[fi] = values[i]
 			} else if _, ok := fi.Options["int64array"]; ok {
 				values[i] = &[]byte{}
-				wrappedValues[f] = []interface{}{"int64array", values[i]}
+				wrappedValues[fi] = values[i]
 			} else if _, ok := fi.Options["jsonb"]; ok {
 				values[i] = &[]byte{}
-				wrappedValues[f] = []interface{}{"jsonb", values[i]}
+				wrappedValues[fi] = values[i]
 			} else {
+				f := reflectx.FieldByIndexes(item, fi.Index)
 				values[i] = f.Addr().Interface()
 			}
 
@@ -194,9 +193,19 @@ func fetchResult(itemT reflect.Type, rows *sqlx.Rows, columns []string) (reflect
 		}
 
 		// TODO: move this stuff out of here.. find a nice pattern
-		for f, v := range wrappedValues {
-			opt := v[0].(string)
-			b := v[1].(*[]byte)
+		for fi, v := range wrappedValues {
+			var opt string
+			if _, ok := fi.Options["stringarray"]; ok {
+				opt = "stringarray"
+			} else if _, ok := fi.Options["int64array"]; ok {
+				opt = "int64array"
+			} else if _, ok := fi.Options["jsonb"]; ok {
+				opt = "jsonb"
+			}
+
+			b := v.(*[]byte)
+
+			f := reflectx.FieldByIndexesReadOnly(item, fi.Index)
 
 			switch opt {
 			case "stringarray":