summaryrefslogtreecommitdiff
path: root/vendor/github.com/uptrace/bun/internal/util.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/uptrace/bun/internal/util.go')
-rw-r--r--vendor/github.com/uptrace/bun/internal/util.go24
1 files changed, 24 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/internal/util.go b/vendor/github.com/uptrace/bun/internal/util.go
index 641309725..66b92b3c5 100644
--- a/vendor/github.com/uptrace/bun/internal/util.go
+++ b/vendor/github.com/uptrace/bun/internal/util.go
@@ -55,3 +55,27 @@ func Unwrap(err error) error {
}
return u.Unwrap()
}
+
+func FieldByIndexAlloc(v reflect.Value, index []int) reflect.Value {
+ if len(index) == 1 {
+ return v.Field(index[0])
+ }
+
+ for i, idx := range index {
+ if i > 0 {
+ v = indirectNil(v)
+ }
+ v = v.Field(idx)
+ }
+ return v
+}
+
+func indirectNil(v reflect.Value) reflect.Value {
+ if v.Kind() == reflect.Ptr {
+ if v.IsNil() {
+ v.Set(reflect.New(v.Type().Elem()))
+ }
+ v = v.Elem()
+ }
+ return v
+}