From bdcc090851f37f1e81a53c1e695f897b1252cd22 Mon Sep 17 00:00:00 2001 From: "kim (grufwub)" Date: Wed, 8 Sep 2021 20:05:26 +0100 Subject: update bun library -> v1.0.4 Signed-off-by: kim (grufwub) --- vendor/github.com/uptrace/bun/schema/reflect.go | 70 +++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 vendor/github.com/uptrace/bun/schema/reflect.go (limited to 'vendor/github.com/uptrace/bun/schema/reflect.go') diff --git a/vendor/github.com/uptrace/bun/schema/reflect.go b/vendor/github.com/uptrace/bun/schema/reflect.go new file mode 100644 index 000000000..5b20b1964 --- /dev/null +++ b/vendor/github.com/uptrace/bun/schema/reflect.go @@ -0,0 +1,70 @@ +package schema + +import ( + "database/sql/driver" + "encoding/json" + "net" + "reflect" + "time" +) + +var ( + bytesType = reflect.TypeOf((*[]byte)(nil)).Elem() + timeType = reflect.TypeOf((*time.Time)(nil)).Elem() + ipType = reflect.TypeOf((*net.IP)(nil)).Elem() + ipNetType = reflect.TypeOf((*net.IPNet)(nil)).Elem() + jsonRawMessageType = reflect.TypeOf((*json.RawMessage)(nil)).Elem() + + driverValuerType = reflect.TypeOf((*driver.Valuer)(nil)).Elem() + queryAppenderType = reflect.TypeOf((*QueryAppender)(nil)).Elem() +) + +func indirectType(t reflect.Type) reflect.Type { + if t.Kind() == reflect.Ptr { + t = t.Elem() + } + return t +} + +func fieldByIndex(v reflect.Value, index []int) (_ reflect.Value, ok bool) { + if len(index) == 1 { + return v.Field(index[0]), true + } + + for i, idx := range index { + if i > 0 { + if v.Kind() == reflect.Ptr { + if v.IsNil() { + return v, false + } + v = v.Elem() + } + } + v = v.Field(idx) + } + return v, true +} + +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 +} -- cgit v1.2.3