mirror of
https://github.com/restic/restic.git
synced 2025-10-29 10:49:10 +00:00
Update dependencies
Among others, this updates minio-go, so that the new "eu-west-3" zone for AWS is supported.
This commit is contained in:
119
vendor/cloud.google.com/go/bigquery/value.go
generated
vendored
119
vendor/cloud.google.com/go/bigquery/value.go
generated
vendored
@@ -18,6 +18,7 @@ import (
|
||||
"encoding/base64"
|
||||
"errors"
|
||||
"fmt"
|
||||
"math"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"time"
|
||||
@@ -63,6 +64,8 @@ func loadMap(m map[string]Value, vals []Value, s Schema) {
|
||||
val := vals[i]
|
||||
var v interface{}
|
||||
switch {
|
||||
case val == nil:
|
||||
v = val
|
||||
case f.Schema == nil:
|
||||
v = val
|
||||
case !f.Repeated:
|
||||
@@ -79,6 +82,7 @@ func loadMap(m map[string]Value, vals []Value, s Schema) {
|
||||
}
|
||||
v = vs
|
||||
}
|
||||
|
||||
m[f.Name] = v
|
||||
}
|
||||
}
|
||||
@@ -125,6 +129,18 @@ func setInt(v reflect.Value, x interface{}) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func setUint(v reflect.Value, x interface{}) error {
|
||||
if x == nil {
|
||||
return errNoNulls
|
||||
}
|
||||
xx := x.(int64)
|
||||
if xx < 0 || v.OverflowUint(uint64(xx)) {
|
||||
return fmt.Errorf("bigquery: value %v overflows struct field of type %v", xx, v.Type())
|
||||
}
|
||||
v.SetUint(uint64(xx))
|
||||
return nil
|
||||
}
|
||||
|
||||
func setFloat(v reflect.Value, x interface{}) error {
|
||||
if x == nil {
|
||||
return errNoNulls
|
||||
@@ -155,9 +171,20 @@ func setString(v reflect.Value, x interface{}) error {
|
||||
|
||||
func setBytes(v reflect.Value, x interface{}) error {
|
||||
if x == nil {
|
||||
return errNoNulls
|
||||
v.SetBytes(nil)
|
||||
} else {
|
||||
v.SetBytes(x.([]byte))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func setNull(v reflect.Value, x interface{}, build func() interface{}) error {
|
||||
if x == nil {
|
||||
v.Set(reflect.Zero(v.Type()))
|
||||
} else {
|
||||
n := build()
|
||||
v.Set(reflect.ValueOf(n))
|
||||
}
|
||||
v.SetBytes(x.([]byte))
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -228,7 +255,7 @@ func compileToOps(structType reflect.Type, schema Schema) ([]structLoaderOp, err
|
||||
return nil, err
|
||||
}
|
||||
op.setFunc = func(v reflect.Value, val interface{}) error {
|
||||
return setNested(nested, v, val.([]Value))
|
||||
return setNested(nested, v, val)
|
||||
}
|
||||
} else {
|
||||
op.setFunc = determineSetFunc(t, schemaField.Type)
|
||||
@@ -253,6 +280,13 @@ func determineSetFunc(ftype reflect.Type, stype FieldType) setFunc {
|
||||
if ftype.Kind() == reflect.String {
|
||||
return setString
|
||||
}
|
||||
if ftype == typeOfNullString {
|
||||
return func(v reflect.Value, x interface{}) error {
|
||||
return setNull(v, x, func() interface{} {
|
||||
return NullString{StringVal: x.(string), Valid: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case BytesFieldType:
|
||||
if ftype == typeOfByteSlice {
|
||||
@@ -260,40 +294,91 @@ func determineSetFunc(ftype reflect.Type, stype FieldType) setFunc {
|
||||
}
|
||||
|
||||
case IntegerFieldType:
|
||||
if isSupportedIntType(ftype) {
|
||||
if isSupportedUintType(ftype) {
|
||||
return setUint
|
||||
} else if isSupportedIntType(ftype) {
|
||||
return setInt
|
||||
}
|
||||
if ftype == typeOfNullInt64 {
|
||||
return func(v reflect.Value, x interface{}) error {
|
||||
return setNull(v, x, func() interface{} {
|
||||
return NullInt64{Int64: x.(int64), Valid: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case FloatFieldType:
|
||||
switch ftype.Kind() {
|
||||
case reflect.Float32, reflect.Float64:
|
||||
return setFloat
|
||||
}
|
||||
if ftype == typeOfNullFloat64 {
|
||||
return func(v reflect.Value, x interface{}) error {
|
||||
return setNull(v, x, func() interface{} {
|
||||
return NullFloat64{Float64: x.(float64), Valid: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case BooleanFieldType:
|
||||
if ftype.Kind() == reflect.Bool {
|
||||
return setBool
|
||||
}
|
||||
if ftype == typeOfNullBool {
|
||||
return func(v reflect.Value, x interface{}) error {
|
||||
return setNull(v, x, func() interface{} {
|
||||
return NullBool{Bool: x.(bool), Valid: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case TimestampFieldType:
|
||||
if ftype == typeOfGoTime {
|
||||
return setAny
|
||||
}
|
||||
if ftype == typeOfNullTimestamp {
|
||||
return func(v reflect.Value, x interface{}) error {
|
||||
return setNull(v, x, func() interface{} {
|
||||
return NullTimestamp{Timestamp: x.(time.Time), Valid: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case DateFieldType:
|
||||
if ftype == typeOfDate {
|
||||
return setAny
|
||||
}
|
||||
if ftype == typeOfNullDate {
|
||||
return func(v reflect.Value, x interface{}) error {
|
||||
return setNull(v, x, func() interface{} {
|
||||
return NullDate{Date: x.(civil.Date), Valid: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case TimeFieldType:
|
||||
if ftype == typeOfTime {
|
||||
return setAny
|
||||
}
|
||||
if ftype == typeOfNullTime {
|
||||
return func(v reflect.Value, x interface{}) error {
|
||||
return setNull(v, x, func() interface{} {
|
||||
return NullTime{Time: x.(civil.Time), Valid: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
case DateTimeFieldType:
|
||||
if ftype == typeOfDateTime {
|
||||
return setAny
|
||||
}
|
||||
if ftype == typeOfNullDateTime {
|
||||
return func(v reflect.Value, x interface{}) error {
|
||||
return setNull(v, x, func() interface{} {
|
||||
return NullDateTime{DateTime: x.(civil.DateTime), Valid: true}
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
@@ -323,16 +408,21 @@ func runOps(ops []structLoaderOp, vstruct reflect.Value, values []Value) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func setNested(ops []structLoaderOp, v reflect.Value, vals []Value) error {
|
||||
func setNested(ops []structLoaderOp, v reflect.Value, val interface{}) error {
|
||||
// v is either a struct or a pointer to a struct.
|
||||
if v.Kind() == reflect.Ptr {
|
||||
// If the value is nil, set the pointer to nil.
|
||||
if val == nil {
|
||||
v.Set(reflect.Zero(v.Type()))
|
||||
return nil
|
||||
}
|
||||
// If the pointer is nil, set it to a zero struct value.
|
||||
if v.IsNil() {
|
||||
v.Set(reflect.New(v.Type().Elem()))
|
||||
}
|
||||
v = v.Elem()
|
||||
}
|
||||
return runOps(ops, v, vals)
|
||||
return runOps(ops, v, val.([]Value))
|
||||
}
|
||||
|
||||
func setRepeated(field reflect.Value, vslice []Value, setElem setFunc) error {
|
||||
@@ -404,6 +494,10 @@ func valuesToMap(vs []Value, schema Schema) (map[string]Value, error) {
|
||||
|
||||
m := make(map[string]Value)
|
||||
for i, fieldSchema := range schema {
|
||||
if vs[i] == nil {
|
||||
m[fieldSchema.Name] = nil
|
||||
continue
|
||||
}
|
||||
if fieldSchema.Type != RecordFieldType {
|
||||
m[fieldSchema.Name] = toUploadValue(vs[i], fieldSchema)
|
||||
continue
|
||||
@@ -550,10 +644,16 @@ func toUploadValue(val interface{}, fs *FieldSchema) interface{} {
|
||||
func toUploadValueReflect(v reflect.Value, fs *FieldSchema) interface{} {
|
||||
switch fs.Type {
|
||||
case TimeFieldType:
|
||||
if v.Type() == typeOfNullTime {
|
||||
return v.Interface()
|
||||
}
|
||||
return civilToUploadValue(v, fs, func(v reflect.Value) string {
|
||||
return CivilTimeString(v.Interface().(civil.Time))
|
||||
})
|
||||
case DateTimeFieldType:
|
||||
if v.Type() == typeOfNullDateTime {
|
||||
return v.Interface()
|
||||
}
|
||||
return civilToUploadValue(v, fs, func(v reflect.Value) string {
|
||||
return CivilDateTimeString(v.Interface().(civil.DateTime))
|
||||
})
|
||||
@@ -705,7 +805,12 @@ func convertBasicType(val string, typ FieldType) (Value, error) {
|
||||
return strconv.ParseBool(val)
|
||||
case TimestampFieldType:
|
||||
f, err := strconv.ParseFloat(val, 64)
|
||||
return Value(time.Unix(0, int64(f*1e9)).UTC()), err
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
secs := math.Trunc(f)
|
||||
nanos := (f - secs) * 1e9
|
||||
return Value(time.Unix(int64(secs), int64(nanos)).UTC()), nil
|
||||
case DateFieldType:
|
||||
return civil.ParseDate(val)
|
||||
case TimeFieldType:
|
||||
|
||||
Reference in New Issue
Block a user