diff options
Diffstat (limited to 'vendor/github.com/uptrace/bun/dialect/pgdialect/append.go')
-rw-r--r-- | vendor/github.com/uptrace/bun/dialect/pgdialect/append.go | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/vendor/github.com/uptrace/bun/dialect/pgdialect/append.go b/vendor/github.com/uptrace/bun/dialect/pgdialect/append.go index a60bf5de2..75798b385 100644 --- a/vendor/github.com/uptrace/bun/dialect/pgdialect/append.go +++ b/vendor/github.com/uptrace/bun/dialect/pgdialect/append.go @@ -27,6 +27,9 @@ var ( float64Type = reflect.TypeOf((*float64)(nil)).Elem() sliceFloat64Type = reflect.TypeOf([]float64(nil)) + + timeType = reflect.TypeOf((*time.Time)(nil)).Elem() + sliceTimeType = reflect.TypeOf([]time.Time(nil)) ) func arrayAppend(fmter schema.Formatter, b []byte, v interface{}) []byte { @@ -93,6 +96,8 @@ func (d *Dialect) arrayAppender(typ reflect.Type) schema.AppenderFunc { return appendInt64SliceValue case float64Type: return appendFloat64SliceValue + case timeType: + return appendTimeSliceValue } } @@ -308,6 +313,32 @@ func arrayAppendString(b []byte, s string) []byte { return b } +func appendTimeSliceValue(fmter schema.Formatter, b []byte, v reflect.Value) []byte { + ts := v.Convert(sliceTimeType).Interface().([]time.Time) + return appendTimeSlice(fmter, b, ts) +} + +func appendTimeSlice(fmter schema.Formatter, b []byte, ts []time.Time) []byte { + if ts == nil { + return dialect.AppendNull(b) + } + b = append(b, '\'') + b = append(b, '{') + for _, t := range ts { + b = append(b, '"') + b = t.UTC().AppendFormat(b, "2006-01-02 15:04:05.999999-07:00") + b = append(b, '"') + b = append(b, ',') + } + if len(ts) > 0 { + b[len(b)-1] = '}' // Replace trailing comma. + } else { + b = append(b, '}') + } + b = append(b, '\'') + return b +} + //------------------------------------------------------------------------------ var mapStringStringType = reflect.TypeOf(map[string]string(nil)) |