fix: make condition eval compatible with go 1.18 (#14534)

* fix: make condition eval compatible with go 1.18

* fix: update circle-ci image to yunion/centos-build:go-1.18.3-0

* update go,mod go version to 1.18

* update vendor

Co-authored-by: Qiu Jian <qiujian@yunionyun.com>
This commit is contained in:
Jian Qiu
2022-06-28 00:29:56 +08:00
committed by GitHub
parent 4ad382a7bd
commit 26089ffde0
243 changed files with 3164 additions and 5246 deletions
+3 -3
View File
@@ -5,7 +5,7 @@ version: 2
jobs:
check:
docker:
- image: yunion/centos-build:1.1-6
- image: yunion/centos-build:go-1.18.3-0
environment:
ONECLOUD_CI_BUILD: "1"
working_directory: /root/go/src/yunion.io/x/onecloud
@@ -18,7 +18,7 @@ jobs:
requires:
- check
docker:
- image: yunion/centos-build:1.1-6
- image: yunion/centos-build:go-1.18.3-0
environment:
ONECLOUD_CI_BUILD: "1"
@@ -52,7 +52,7 @@ jobs:
requires:
- check
docker:
- image: yunion/centos-build:1.1-6
- image: yunion/centos-build:go-1.18.3-0
environment:
ONECLOUD_CI_BUILD: "1"
working_directory: /root/go/src/yunion.io/x/onecloud
+2 -2
View File
@@ -7,8 +7,8 @@ endif
ModBaseName:=$(notdir $(ModName))
DockerImageRegistry?=registry.cn-beijing.aliyuncs.com
DockerImageAlpineBuild?=$(DockerImageRegistry)/yunionio/alpine-build:1.1-6
DockerImageCentOSBuild?=$(DockerImageRegistry)/yunionio/centos-build:1.1-6
DockerImageAlpineBuild?=$(DockerImageRegistry)/yunionio/alpine-build:3.16.0-go-1.18.2-0
DockerImageCentOSBuild?=$(DockerImageRegistry)/yunionio/centos-build:go-1.18.3-0
EnvIf=$(if $($(1)),$(1)=$($(1)))
+156 -54
View File
@@ -1,6 +1,6 @@
module yunion.io/x/onecloud
go 1.16
go 1.18
require (
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669
@@ -9,101 +9,57 @@ require (
github.com/Azure/azure-sdk-for-go v36.1.0+incompatible
github.com/Azure/go-autorest/autorest v0.9.6
github.com/Azure/go-autorest/autorest/azure/auth v0.4.2
github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
github.com/DataDog/dd-trace-go v0.6.1 // indirect
github.com/DataDog/zstd v1.3.4 // indirect
github.com/LeeEirc/terminalparser v0.0.0-20220328021224-de16b7643ea4
github.com/Masterminds/goutils v1.1.0 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
github.com/Masterminds/sprig v2.22.0+incompatible
github.com/Microsoft/azure-vhd-utils v0.0.0-20181115010904-44cbada2ece3
github.com/RoaringBitmap/roaring v0.4.16 // indirect
github.com/Shopify/sarama v1.20.0 // indirect
github.com/Shopify/toxiproxy v2.1.4+incompatible // indirect
github.com/aliyun/alibaba-cloud-sdk-go v1.61.684
github.com/aliyun/aliyun-oss-go-sdk v2.0.4+incompatible
github.com/anacrolix/dht v0.0.0-20181129074040-b09db78595aa // indirect
github.com/anacrolix/go-libutp v0.0.0-20180808010927-aebbeb60ea05 // indirect
github.com/anacrolix/log v0.0.0-20180808012509-286fcf906b48 // indirect
github.com/anacrolix/mmsg v0.0.0-20180808012353-5adb2c1127c0 // indirect
github.com/anacrolix/torrent v0.0.0-20181129073333-cc531b8c4a80
github.com/aokoli/goutils v1.0.1
github.com/apache/thrift v0.12.0 // indirect
github.com/aws/aws-sdk-go v1.39.0
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
github.com/basgys/goxml2json v1.1.1-0.20181031222924-996d9fc8d313
github.com/beevik/etree v1.1.0 // indirect
github.com/benbjohnson/clock v1.0.0
github.com/bitly/go-simplejson v0.5.0
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
github.com/c-bata/go-prompt v0.2.4
github.com/cheggaaa/pb/v3 v3.0.8
github.com/coredns/coredns v1.3.0
github.com/coreos/go-iptables v0.6.0
github.com/creack/pty v1.1.11
github.com/dnaeon/go-vcr v1.1.0 // indirect
github.com/dnstap/golang-dnstap v0.0.0-20170829151710-2cf77a2b5e11 // indirect
github.com/eapache/go-resiliency v1.1.0 // indirect
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
github.com/eapache/queue v1.1.0 // indirect
github.com/edsrzf/mmap-go v1.0.0 // indirect
github.com/farsightsec/golang-framestream v0.0.0-20181102145529-8a0cb8ba8710 // indirect
github.com/fatih/color v1.10.0
github.com/fernet/fernet-go v0.0.0-20180830025343-9eac43b88a5e
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect
github.com/frankban/quicktest v1.14.3 // indirect
github.com/fsnotify/fsnotify v1.4.9
github.com/ghodss/yaml v1.0.0
github.com/gin-gonic/gin v1.7.7
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2 // indirect
github.com/go-yaml/yaml v2.1.0+incompatible
github.com/gofrs/uuid v4.1.0+incompatible // indirect
github.com/golang-plus/errors v1.0.0
github.com/golang-plus/uuid v1.0.0
github.com/golang/mock v1.4.4
github.com/golang/protobuf v1.5.2
github.com/google/gopacket v1.1.17
github.com/googollee/go-engine.io v0.0.0-20180829091931-e2f255711dcb // indirect
github.com/googollee/go-socket.io v0.0.0-20181214084611-0ad7206c347a
github.com/gorilla/mux v1.7.0
github.com/gorilla/websocket v1.4.1
github.com/gosuri/uitable v0.0.0-20160404203958-36ee7e946282
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/hako/durafmt v0.0.0-20180520121703-7b7ae1e72ead
github.com/huandu/xstrings v1.2.0 // indirect
github.com/huaweicloud/huaweicloud-sdk-go v1.0.26
github.com/imdario/mergo v0.3.6 // indirect
github.com/jaypipes/ghw v0.9.0
github.com/jdcloud-api/jdcloud-sdk-go v1.55.0
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/koding/websocketproxy v0.0.0-20181220232114-7ed82d81a28c
github.com/lestrrat-go/jwx v1.0.2
github.com/lestrrat/go-jwx v0.0.0-20180221005942-b7d4802280ae
github.com/lestrrat/go-pdebug v0.0.0-20180220043741-569c97477ae8 // indirect
github.com/libvirt/libvirt-go-xml v5.2.0+incompatible
github.com/ma314smith/signedxml v0.0.0-20200410192636-c342a2d0ae60
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/mattn/go-sqlite3 v1.14.12
github.com/mattn/go-tty v0.0.0-20181127064339-e4f871175a2f // indirect
github.com/mdlayher/arp v0.0.0-20190313224443-98a83c8a2717
github.com/mdlayher/ethernet v0.0.0-20190606142754-0394541c37b7
github.com/mdlayher/raw v0.0.0-20190606144222-a54781e5f38f
github.com/mholt/caddy v0.10.11
github.com/miekg/dns v1.1.25
github.com/minio/minio-go v6.0.14+incompatible
github.com/mitchellh/copystructure v1.0.0 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/mozillazg/go-pinyin v0.15.0
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 // indirect
github.com/opentracing/opentracing-go v1.0.2 // indirect
github.com/openzipkin/zipkin-go-opentracing v0.3.4 // indirect
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
github.com/pierrec/lz4/v4 v4.1.14
github.com/pierrec/lz4/v4 v4.1.15
github.com/pkg/errors v0.9.1
github.com/pquerna/otp v1.2.0
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect
github.com/satori/go.uuid v1.2.0 // indirect
github.com/sergi/go-diff v1.2.0
github.com/serialx/hashring v0.0.0-20180504054112-49a4782e9908
github.com/sevlyar/go-daemon v0.1.5
@@ -111,19 +67,16 @@ require (
github.com/sirupsen/logrus v1.6.0
github.com/skip2/go-qrcode v0.0.0-20190110000554-dc11ecdae0a9
github.com/smartystreets/goconvey v1.6.4
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/stretchr/testify v1.7.1
github.com/stretchr/testify v1.7.2
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e
github.com/tencentcloud/tencentcloud-sdk-go/tencentcloud/common v1.0.413
github.com/tencentyun/cos-go-sdk-v5 v0.7.24
github.com/tinylib/msgp v1.1.0 // indirect
github.com/tjfoc/gmsm v1.4.1
github.com/tredoe/osutil v0.0.0-20161130133508-7d3ee1afa71c
github.com/vishvananda/netlink v1.0.0
github.com/vishvananda/netns v0.0.0-20211101163701-50045581ed74
github.com/vmihailenco/msgpack v4.0.4+incompatible
github.com/vmware/govmomi v0.20.1
github.com/yusufpapurcu/wmi v1.2.2 // indirect
go.etcd.io/etcd/api/v3 v3.5.0
go.etcd.io/etcd/client/v3 v3.5.0
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5
@@ -131,7 +84,6 @@ require (
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c
golang.org/x/sys v0.0.0-20220429233432-b5fbb4746d32
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect
golang.org/x/text v0.3.7
golang.org/x/time v0.0.0-20191024005414-555d28b269f0
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1
@@ -139,9 +91,7 @@ require (
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c
google.golang.org/grpc v1.38.0
google.golang.org/protobuf v1.27.1
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
gopkg.in/fatih/set.v0 v0.2.1
gopkg.in/ini.v1 v1.44.0 // indirect
gopkg.in/ldap.v3 v3.0.3
gopkg.in/yaml.v2 v2.4.0
k8s.io/api v0.19.3
@@ -155,10 +105,162 @@ require (
yunion.io/x/ovsdb v0.0.0-20200526071744-27bf0940cbc7
yunion.io/x/pkg v1.0.0
yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e
yunion.io/x/sqlchemy v1.1.2-0.20220623180503-1fe0bae99707
yunion.io/x/sqlchemy v1.1.2-0.20220627150547-83484bc98c81
yunion.io/x/structarg v0.0.0-20220312084958-9c6c79c7d1c6
)
require (
cloud.google.com/go v0.65.0 // indirect
github.com/Azure/go-autorest/autorest/adal v0.8.2 // indirect
github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 // indirect
github.com/Azure/go-autorest/autorest/date v0.2.0 // indirect
github.com/Azure/go-autorest/autorest/to v0.4.0 // indirect
github.com/Azure/go-autorest/logger v0.1.0 // indirect
github.com/Azure/go-autorest/tracing v0.5.0 // indirect
github.com/ClickHouse/clickhouse-go/v2 v2.1.0 // indirect
github.com/DataDog/dd-trace-go v0.6.1 // indirect
github.com/DataDog/zstd v1.3.4 // indirect
github.com/Masterminds/goutils v1.1.0 // indirect
github.com/Masterminds/semver v1.5.0 // indirect
github.com/RoaringBitmap/roaring v0.4.16 // indirect
github.com/Shopify/sarama v1.20.0 // indirect
github.com/Shopify/toxiproxy v2.1.4+incompatible // indirect
github.com/StackExchange/wmi v1.2.1 // indirect
github.com/VividCortex/ewma v1.1.1 // indirect
github.com/anacrolix/dht v0.0.0-20181129074040-b09db78595aa // indirect
github.com/anacrolix/go-libutp v0.0.0-20180808010927-aebbeb60ea05 // indirect
github.com/anacrolix/log v0.0.0-20180808012509-286fcf906b48 // indirect
github.com/anacrolix/missinggo v0.0.0-20181129073415-3237bf955fed // indirect
github.com/anacrolix/mmsg v0.0.0-20180808012353-5adb2c1127c0 // indirect
github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778 // indirect
github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572 // indirect
github.com/apache/thrift v0.12.0 // indirect
github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f // indirect
github.com/beevik/etree v1.1.0 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869 // indirect
github.com/boltdb/bolt v1.3.1 // indirect
github.com/boombuler/barcode v1.0.1-0.20190219062509-6c824513bacc // indirect
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2 // indirect
github.com/cespare/xxhash/v2 v2.1.2 // indirect
github.com/coreos/go-semver v0.3.0 // indirect
github.com/coreos/go-systemd/v22 v22.3.2 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/dgrijalva/jwt-go v3.2.0+incompatible // indirect
github.com/dimchansky/utfbom v1.1.0 // indirect
github.com/dnaeon/go-vcr v1.1.0 // indirect
github.com/dnstap/golang-dnstap v0.0.0-20170829151710-2cf77a2b5e11 // indirect
github.com/dustin/go-humanize v1.0.0 // indirect
github.com/eapache/go-resiliency v1.1.0 // indirect
github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21 // indirect
github.com/eapache/queue v1.1.0 // indirect
github.com/edsrzf/mmap-go v1.0.0 // indirect
github.com/elgatito/upnp v0.0.0-20180711183757-2f244d205f9a // indirect
github.com/farsightsec/golang-framestream v0.0.0-20181102145529-8a0cb8ba8710 // indirect
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 // indirect
github.com/frankban/quicktest v1.14.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
github.com/glycerine/go-unsnap-stream v0.0.0-20181221182339-f9677308dec2 // indirect
github.com/go-logfmt/logfmt v0.5.0 // indirect
github.com/go-logr/logr v1.2.3 // indirect
github.com/go-ole/go-ole v1.2.6 // indirect
github.com/go-playground/locales v0.13.0 // indirect
github.com/go-playground/universal-translator v0.17.0 // indirect
github.com/go-playground/validator/v10 v10.4.1 // indirect
github.com/go-sql-driver/mysql v1.6.0 // indirect
github.com/gofrs/uuid v4.1.0+incompatible // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db // indirect
github.com/google/btree v1.0.0 // indirect
github.com/google/go-querystring v1.0.0 // indirect
github.com/google/gofuzz v1.1.0 // indirect
github.com/google/uuid v1.3.0 // indirect
github.com/googleapis/gax-go/v2 v2.0.5 // indirect
github.com/googleapis/gnostic v0.4.1 // indirect
github.com/googollee/go-engine.io v0.0.0-20180829091931-e2f255711dcb // indirect
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 // indirect
github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 // indirect
github.com/huandu/xstrings v1.2.0 // indirect
github.com/imdario/mergo v0.3.6 // indirect
github.com/jmespath/go-jmespath v0.4.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/jstemmer/go-junit-report v0.9.1 // indirect
github.com/jtolds/gls v4.20.0+incompatible // indirect
github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 // indirect
github.com/konsorten/go-windows-terminal-sequences v1.0.3 // indirect
github.com/leodido/go-urn v1.2.0 // indirect
github.com/lestrrat-go/iter v0.0.0-20200422075355-fc1769541911 // indirect
github.com/lestrrat-go/pdebug v0.0.0-20200204225717-4d6bd78da58d // indirect
github.com/lestrrat/go-pdebug v0.0.0-20180220043741-569c97477ae8 // indirect
github.com/mattn/go-colorable v0.1.8 // indirect
github.com/mattn/go-isatty v0.0.14 // indirect
github.com/mattn/go-runewidth v0.0.13 // indirect
github.com/mattn/go-tty v0.0.0-20181127064339-e4f871175a2f // indirect
github.com/matttproud/golang_protobuf_extensions v1.0.1 // indirect
github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b // indirect
github.com/minio/minio-go/v6 v6.0.33 // indirect
github.com/mitchellh/copystructure v1.0.0 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/reflectwalk v1.0.0 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect
github.com/mozillazg/go-httpheader v0.2.1 // indirect
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae // indirect
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492 // indirect
github.com/opentracing/opentracing-go v1.0.2 // indirect
github.com/openzipkin/zipkin-go-opentracing v0.3.4 // indirect
github.com/paulmach/orb v0.7.1 // indirect
github.com/philhofer/fwd v1.0.0 // indirect
github.com/pierrec/lz4 v2.6.1+incompatible // indirect
github.com/pkg/term v1.0.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/prometheus/client_golang v1.12.1 // indirect
github.com/prometheus/client_model v0.2.0 // indirect
github.com/prometheus/common v0.32.1 // indirect
github.com/prometheus/procfs v0.7.3 // indirect
github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a // indirect
github.com/rivo/uniseg v0.2.0 // indirect
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect
github.com/satori/go.uuid v1.2.0 // indirect
github.com/shopspring/decimal v1.3.1 // indirect
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d // indirect
github.com/spaolacci/murmur3 v1.1.0 // indirect
github.com/spf13/pflag v1.0.5 // indirect
github.com/stretchr/objx v0.1.1 // indirect
github.com/texttheater/golang-levenshtein v0.0.0-20180516184445-d188e65d659e // indirect
github.com/tinylib/msgp v1.1.0 // indirect
github.com/tklauser/go-sysconf v0.3.10 // indirect
github.com/tklauser/numcpus v0.4.0 // indirect
github.com/ugorji/go/codec v1.1.7 // indirect
github.com/willf/bitset v1.1.9 // indirect
github.com/willf/bloom v2.0.3+incompatible // indirect
github.com/yusufpapurcu/wmi v1.2.2 // indirect
go.etcd.io/etcd/client/pkg/v3 v3.5.0 // indirect
go.opencensus.io v0.22.4 // indirect
go.opentelemetry.io/otel v1.7.0 // indirect
go.opentelemetry.io/otel/trace v1.7.0 // indirect
go.uber.org/atomic v1.7.0 // indirect
go.uber.org/multierr v1.6.0 // indirect
go.uber.org/zap v1.17.0 // indirect
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616 // indirect
golang.org/x/mod v0.4.2 // indirect
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b // indirect
golang.org/x/tools v0.1.2 // indirect
google.golang.org/api v0.30.0 // indirect
google.golang.org/appengine v1.6.6 // indirect
gopkg.in/asn1-ber.v1 v1.0.0-20181015200546-f715ec2f112d // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.44.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/klog/v2 v2.2.0 // indirect
k8s.io/utils v0.0.0-20200729134348-d5654de09c73 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.0.1 // indirect
sigs.k8s.io/yaml v1.2.0 // indirect
)
replace (
github.com/go-logr/logr => github.com/go-logr/logr v0.4.0
google.golang.org/grpc => google.golang.org/grpc v1.29.0
+12 -15
View File
@@ -71,10 +71,9 @@ github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VY
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0=
github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
github.com/ClickHouse/clickhouse-go/v2 v2.0.14 h1:7HW+MXPaQfVyCzPGEn/LciMc8K6cG58FZMUc7DXQmro=
github.com/ClickHouse/clickhouse-go/v2 v2.0.14/go.mod h1:iq2DUGgpA4BBki2CVwrF8x43zqBjdgHtbexkFkh5a6M=
github.com/ClickHouse/clickhouse-go/v2 v2.1.0 h1:X53a5FzRna9TLGGYm1A7T+3kEnrfEYl15BNsL6sw81s=
github.com/ClickHouse/clickhouse-go/v2 v2.1.0/go.mod h1:nOBMOlMUGQJ2eb6PtECHYldbEHmDJFzfIrtaDXMjrb4=
github.com/DataDog/dd-trace-go v0.6.1 h1:nsZ2lohbSw1CKtfNRu3wPh1jFirv6XSz8vqNpuIYWbM=
github.com/DataDog/dd-trace-go v0.6.1/go.mod h1:SmQTTcC37XMyEm75HV0AWiZIYxDiaNhRi49zorIpW+o=
github.com/DataDog/zstd v1.3.4 h1:LAGHkXuvC6yky+C2CUG2tD7w8QlrUwpue8XwIh0X4AY=
@@ -575,8 +574,8 @@ github.com/opentracing/opentracing-go v1.0.2 h1:3jA2P6O1F9UOrWVpwrIo17pu01KWvNWg
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
github.com/openzipkin/zipkin-go-opentracing v0.3.4 h1:x/pBv/5VJNWkcHF1G9xqhug8Iw7X1y1zOMzDmyuvP2g=
github.com/openzipkin/zipkin-go-opentracing v0.3.4/go.mod h1:js2AbwmHW0YD9DwIw2JhQWmbfFi/UnWyYwdVhqbCDOE=
github.com/paulmach/orb v0.5.0 h1:sNhJV5ML+mv1F077ljOck/9inorF4ahDO8iNNpHbKHY=
github.com/paulmach/orb v0.5.0/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A=
github.com/paulmach/orb v0.7.1 h1:Zha++Z5OX/l168sqHK3k4z18LDvr+YAO/VjK0ReQ9rU=
github.com/paulmach/orb v0.7.1/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A=
github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
@@ -584,8 +583,8 @@ github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM=
github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE=
github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pierrec/lz4/v4 v4.1.15 h1:MO0/ucJhngq7299dKLwIMtgTfbkoSPF6AoMYDd8Q4q0=
github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pkg/diff v0.0.0-20200914180035-5b29258ca4f7/go.mod h1:zO8QMzTeZd5cpnIkz/Gn6iK0jDfGicM1nynOkkPIl28=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -677,8 +676,9 @@ github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UV
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.2 h1:4jaiDzPyXQvSd7D0EjG45355tLlV3VOECpq10pLC+8s=
github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals=
github.com/syncthing/syncthing v0.14.48-rc.4/go.mod h1:nw3siZwHPA6M8iSfjDCWQ402eqvEIasMQOE8nFOxy7M=
github.com/tailscale/depaware v0.0.0-20210622194025-720c4b409502/go.mod h1:p9lPsd+cx33L3H9nNoecRRxPssFKUwwI50I3pZ0yT+8=
github.com/tatsushid/go-fastping v0.0.0-20160109021039-d7bb493dee3e h1:nt2877sKfojlHCTOBXbpWjBkuWKritFaGIfgQwbQUls=
@@ -700,7 +700,6 @@ github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
github.com/tredoe/osutil v0.0.0-20161130133508-7d3ee1afa71c h1:5q7IHeqvAA4hWR1CfpTOS7RFsTDC36TaSZ8Dvc00bPk=
github.com/tredoe/osutil v0.0.0-20161130133508-7d3ee1afa71c/go.mod h1:M/I710pXKQToMdqt/D+mJ4QsnW6WDaajyB6DWFmDXBs=
github.com/ugorji/go v1.1.7 h1:/68gy2h+1mWMrwZFeD1kQialdSzAb432dtpeJ42ovdo=
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs=
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
@@ -836,7 +835,6 @@ golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81R
golang.org/x/net v0.0.0-20201010224723-4f7140c49acb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5 h1:wjuX4b5yYQnEQHzd+CBcrcC6OVR2J1CN6mUy0oSxIPo=
golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
@@ -918,7 +916,6 @@ golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
@@ -997,7 +994,6 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.zx2c4.com/wireguard v0.0.20190908 h1:SUoXDdwSMtomLdvke+zz83/u9tNvl4hHmcTIWp38tow=
golang.zx2c4.com/wireguard v0.0.20190908/go.mod h1:LhfXh5z6bLC2lW2ve6BzYZFwnnsXK3OQjySR0Yh2dO8=
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20191008142428-8d021180e987 h1:26OAgqBTufVr8WKonCEhhjO1oKsYhHv0iM5Dg92G1TM=
golang.zx2c4.com/wireguard/wgctrl v0.0.0-20191008142428-8d021180e987/go.mod h1:7hq1rEDsx7/FWl8IEEnfH2Xhs6M2MNnjUfN0PeI8Rm0=
@@ -1104,8 +1100,9 @@ gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b h1:h8qDotaEPuJATrMmW04NCwg7v22aHH28wwpauUhK9Oo=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
@@ -1159,7 +1156,7 @@ yunion.io/x/pkg v1.0.0/go.mod h1:nYOMflWG1wQC6301rGVglQva9bYbJxHThEJUxRAgMFc=
yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e h1:v+EzIadodSwkdZ/7bremd7J8J50Cise/HCylsOJngmo=
yunion.io/x/s3cli v0.0.0-20190917004522-13ac36d8687e/go.mod h1:0iFKpOs1y4lbCxeOmq3Xx/0AcQoewVPwj62eRluioEo=
yunion.io/x/sqlchemy v1.0.1/go.mod h1:FTdwPdGhMgh4E+UFXc9klI1Ok34fMuybTT+jLhOaIjI=
yunion.io/x/sqlchemy v1.1.2-0.20220623180503-1fe0bae99707 h1:m30VBvvig7stNMWcjA378KNFT5Jjxs6wWTyxRTrp4DU=
yunion.io/x/sqlchemy v1.1.2-0.20220623180503-1fe0bae99707/go.mod h1:/S199GwvjXdKRskgn1KT4cSL5666L4H/Yv05eFPe9To=
yunion.io/x/sqlchemy v1.1.2-0.20220627150547-83484bc98c81 h1:SIRXUOE3LbxxdZWNg6vr1vFDCGKXxYtiIEn9gSfVrOk=
yunion.io/x/sqlchemy v1.1.2-0.20220627150547-83484bc98c81/go.mod h1:BDxPNpTPN/CbzKnqoI3w6r0jGCqBh7fmaJr9nh1jLPs=
yunion.io/x/structarg v0.0.0-20220312084958-9c6c79c7d1c6 h1:WuWXhY3DvhdRTzWCJ/kwt3Ss6KIq7+KqJwb+esvNGwU=
yunion.io/x/structarg v0.0.0-20220312084958-9c6c79c7d1c6/go.mod h1:EP6NSv2C0zzqBDTKumv8hPWLb3XvgMZDHQRfyuOrQng=
+60 -28
View File
@@ -98,23 +98,55 @@ func EvalBool(exprStr string, input interface{}) (bool, error) {
func eval(expr ast.Expr, input interface{}) (interface{}, error) {
switch expr.(type) {
case *ast.BinaryExpr:
return evalBinary(expr.(*ast.BinaryExpr), input)
v, err := evalBinary(expr.(*ast.BinaryExpr), input)
if err != nil {
return nil, errors.Wrap(err, "evalBinary")
}
return v, nil
case *ast.UnaryExpr:
return evalUnary(expr.(*ast.UnaryExpr), input)
v, err := evalUnary(expr.(*ast.UnaryExpr), input)
if err != nil {
return nil, errors.Wrap(err, "evalUnary")
}
return v, nil
case *ast.SelectorExpr:
return evalSelector(expr.(*ast.SelectorExpr), input)
v, err := evalSelector(expr.(*ast.SelectorExpr), input)
if err != nil {
return nil, errors.Wrap(err, "evalSelector")
}
return v, nil
case *ast.Ident:
return evalIdent(expr.(*ast.Ident), input)
v, err := evalIdent(expr.(*ast.Ident), input)
if err != nil {
return nil, errors.Wrap(err, "evalIdent")
}
return v, nil
case *ast.ParenExpr:
return evalParen(expr.(*ast.ParenExpr), input)
v, err := evalParen(expr.(*ast.ParenExpr), input)
if err != nil {
return nil, errors.Wrap(err, "evalParen")
}
return v, nil
case *ast.CallExpr:
return evalCall(expr.(*ast.CallExpr), input)
v, err := evalCall(expr.(*ast.CallExpr), input)
if err != nil {
return nil, errors.Wrap(err, "evalCall")
}
return v, nil
case *ast.IndexExpr:
return evalIndex(expr.(*ast.IndexExpr), input)
v, err := evalIndex(expr.(*ast.IndexExpr), input)
if err != nil {
return nil, errors.Wrap(err, "evalIndex")
}
return v, nil
case *ast.BasicLit:
return evalBasicLit(expr.(*ast.BasicLit), input)
v, err := evalBasicLit(expr.(*ast.BasicLit), input)
if err != nil {
return nil, errors.Wrap(err, "evalBasicLit")
}
return v, nil
default:
return nil, ErrInvalidOp
return nil, errors.Wrapf(ErrInvalidOp, "unsupported expr type %s", reflect.TypeOf(expr))
}
}
@@ -126,7 +158,7 @@ func evalBasicLit(expr *ast.BasicLit, input interface{}) (interface{}, error) {
jsonX := input.(*jsonutils.JSONDict)
return jsonX.Get(expr.Value)
default:
return nil, ErrInvalidOp
return nil, errors.Wrapf(ErrInvalidOp, "evalBasicLit unsupported type %s", reflect.TypeOf(input))
}
case token.INT:
return strconv.Atoi(expr.Value)
@@ -137,7 +169,7 @@ func evalBasicLit(expr *ast.BasicLit, input interface{}) (interface{}, error) {
case token.STRING:
return expr.Value[1 : len(expr.Value)-1], nil
default:
return nil, ErrInvalidOp
return nil, errors.Wrapf(ErrInvalidOp, "evalBasicLit unsupported kind %s", expr.Kind)
}
}
@@ -375,7 +407,7 @@ func getJSONProperty(json *jsonutils.JSONDict, identStr string) (jsonutils.JSONO
}
func evalIdent(expr *ast.Ident, input interface{}) (interface{}, error) {
if expr.Obj == nil || input == nil {
if input == nil {
return expr.Name, nil
} else {
switch input.(type) {
@@ -383,7 +415,7 @@ func evalIdent(expr *ast.Ident, input interface{}) (interface{}, error) {
json := input.(*jsonutils.JSONDict)
return getJSONProperty(json, expr.Name)
default:
return nil, ErrInvalidOp
return nil, errors.Wrapf(ErrInvalidOp, "evalIdent unsupported type %s", reflect.TypeOf(input))
}
}
}
@@ -415,7 +447,7 @@ func evalSelectorInternal(X interface{}, identStr string) (interface{}, error) {
if err == ErrFieldNotFound {
return &funcCaller{caller: X, method: identStr}, nil
} else {
return ret, err
return ret, errors.Wrapf(err, "getJSONProperty %s", identStr)
}
case []interface{}, *jsonutils.JSONArray:
if identStr == "len" || identStr == "contains" {
@@ -434,18 +466,18 @@ func evalSelectorInternal(X interface{}, identStr string) (interface{}, error) {
case string, *jsonutils.JSONString:
return &funcCaller{caller: getString(X), method: identStr}, nil
default:
return nil, ErrInvalidOp
return nil, errors.Wrapf(ErrInvalidOp, "unsupported type %s", reflect.TypeOf(X))
}
}
func evalSelector(expr *ast.SelectorExpr, input interface{}) (interface{}, error) {
X, err := eval(expr.X, input)
if err != nil {
return nil, ErrInvalidOp
return nil, errors.Wrap(ErrInvalidOp, "eval selector X")
}
ident, err := evalIdent(expr.Sel, nil)
if err != nil {
return nil, ErrInvalidOp
return nil, errors.Wrap(ErrInvalidOp, "eval selector Sel")
}
identStr := ident.(string)
@@ -551,7 +583,7 @@ func evalBinaryInternal(X, Y interface{}, op token.Token) (interface{}, error) {
for i := 0; i < len(arrX); i += 1 {
reti, err := evalBinaryInternal(arrX[i], Y, op)
if err != nil {
return nil, err
return nil, errors.Wrapf(err, "X.evalBinaryInternal at [%d]", i)
}
ret[i] = reti
}
@@ -564,7 +596,7 @@ func evalBinaryInternal(X, Y interface{}, op token.Token) (interface{}, error) {
for i := 0; i < len(arrY); i += 1 {
reti, err := evalBinaryInternal(X, arrY[i], op)
if err != nil {
return nil, err
return nil, errors.Wrapf(err, "Y.evalBinaryInternal at [%d]", i)
}
ret[i] = reti
}
@@ -582,10 +614,10 @@ func evalBinaryInternal(X, Y interface{}, op token.Token) (interface{}, error) {
case token.LOR:
return boolX || boolY, nil
default:
return nil, ErrInvalidOp
return nil, errors.Wrapf(ErrInvalidOp, "bool op %v", op)
}
default:
return nil, ErrInvalidOp
return nil, errors.Wrap(ErrInvalidOp, "mismatch bool type")
}
case string, *jsonutils.JSONString:
switch Y.(type) {
@@ -600,10 +632,10 @@ func evalBinaryInternal(X, Y interface{}, op token.Token) (interface{}, error) {
case token.NEQ:
return strX != strY, nil
default:
return nil, ErrInvalidOp
return nil, errors.Wrapf(ErrInvalidOp, "string op %v", op)
}
default:
return nil, ErrInvalidOp
return nil, errors.Wrap(ErrInvalidOp, "mismatch string type")
}
case int, int8, int16, int32, int64, uint, uint8, uint16, uint32, uint64, *jsonutils.JSONInt:
intX := getInt(X)
@@ -616,7 +648,7 @@ func evalBinaryInternal(X, Y interface{}, op token.Token) (interface{}, error) {
floatY := getFloat(Y)
return evalFloatOp(floatX, floatY, op)
default:
return nil, ErrInvalidOp
return nil, errors.Wrap(ErrInvalidOp, "mismatch type int")
}
case float32, float64, *jsonutils.JSONFloat:
floatX := getFloat(X)
@@ -628,21 +660,21 @@ func evalBinaryInternal(X, Y interface{}, op token.Token) (interface{}, error) {
floatY := getFloat(Y)
return evalFloatOp(floatX, floatY, op)
default:
return nil, ErrInvalidOp
return nil, errors.Wrap(ErrInvalidOp, "mismatch type float")
}
default:
return nil, ErrInvalidOp
return nil, errors.Wrapf(ErrInvalidOp, "unsupported op type %v", reflect.TypeOf(X))
}
}
func evalBinary(bExpr *ast.BinaryExpr, input interface{}) (interface{}, error) {
X, err := eval(bExpr.X, input)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "eval binary left")
}
Y, err := eval(bExpr.Y, input)
if err != nil {
return nil, err
return nil, errors.Wrap(err, "eval binary right")
}
return evalBinaryInternal(X, Y, bExpr.Op)
}
-24
View File
@@ -1,24 +0,0 @@
module cloud.google.com/go
go 1.11
require (
cloud.google.com/go/storage v1.10.0
github.com/golang/mock v1.4.4
github.com/golang/protobuf v1.4.2
github.com/google/go-cmp v0.5.1
github.com/google/martian/v3 v3.0.0
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99
github.com/googleapis/gax-go/v2 v2.0.5
github.com/jstemmer/go-junit-report v0.9.1
go.opencensus.io v0.22.4
golang.org/x/lint v0.0.0-20200302205851-738671d3881b
golang.org/x/net v0.0.0-20200822124328-c89045814202
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
golang.org/x/text v0.3.3
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
google.golang.org/api v0.30.0
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987
google.golang.org/grpc v1.31.0
)
-504
View File
@@ -1,504 +0,0 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0 h1:sAbMqjY1PEQKZBWfbu6Y6bsupJ9c4QdHnzg/VvYTLcE=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hMWU=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0 h1:a/O/bK/vWrYGOTFtH8di4rBxMZnmkjy+Y5LxpDwo+dA=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1 h1:W9tAK3E57P75u0XLLR82LZyw8VpAnhmyTOxW9qzmyj8=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0 h1:9/vpR43S4aJaROxqQHQ3nH9lfyKKV0dC3vOmnw8ebQQ=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0 h1:Lpy6hKgdcl7a3WGSfJIFmxmcdjSpP6OmBEfcOv1Y680=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0 h1:VV2nUM3wwLLGh9lSABFgZMjInyUbJeaRSE64WuAIQ+4=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0 h1:RPUcBvDeYgQFMfQu1eBMq6piD1SXmLH+vK3qjewZPus=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0 h1:UDpwYIwla4jHGzZJaEJYx1tOejbgSoNqsAfHAUYe2r8=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0 h1:86K1Gel7BQ9/WmNWn7dTKMvTLFzwtBe5FNqYbi9X35g=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0 h1:STgFzyU5/8miMl0//zKh2aQeTyeaUH3WN9bSUiJ09bA=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e h1:fY5BOSpyZCqRo5OhCuC+XN+r/bBCmeuuJtjz+bCNIf8=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0 h1:28o5sBqPkBsMGnC6b4MvE2TzSr5/AT4c/1fLqVGIwlk=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0 h1:Rd1kQnQu0Hq3qvJppYSG0HtP+f5LPPUiDswTLiEegLg=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3 h1:GV+pQPG/EUUbkh47niozDcADz6go/dUwhVzdUQHIVRw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4 h1:l75CXGRSwbaYNpl/Z2X1XIIAMSCquvXgpVZDhwEIJsc=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1 h1:YF8+flBXS5eO826T4nzqPrxfhQThhXl0YzfuUPu4SBg=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0 h1:+dTQ8DZQJz0Mb/HjFlkptS1FeQ4cWSnN941F8aEG4SQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1 h1:JFrFEBb2xKufg6XkJsJr+WbKb4FQlURi5RUcBveYu9k=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0 h1:pMen7vLs8nvgEYhywH3KDWJIJTeEr2ULsVWHWYHQyBs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57 h1:eqyIo2HjKhKe/mJzTG8n4VqvLXIOEG+SLdDqX7xGtkY=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f h1:Jnx61latede7zDD3DiiP4gmNz33uK0U5HDUaF0a/HVQ=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99 h1:Ak8CrdlwwXwAZxzS66vgPt4U8yUZX7JwLvVR58FN5jM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6 h1:UDMh68UUwekSh5iP2OMhRRZJiiBccgV7axzUG8vi56c=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4 h1:LYy1Hy3MJdrCdMwwzxA/dRok4ejH+RwNGbuoD9fCjto=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4 h1:c2HOrn5iMezYjSlGPncknSEr/8x5LELb/ilJbXi9DEA=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522 h1:OeRHuibLsmZkFj773W4LcfAGsSxJgfPONhr8cmO+eLA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979 h1:Agxu5KLo8o7Bb634SVDnhIfpTvxmzUwhbYAzBvXt6h4=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f h1:hX65Cu3JDlGH3uEdK7I99Ii+9kjD6mvnnpfLdEAH0x4=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422 h1:QzoH/1pFpZguR8NrRHLcO6jKqfv2zpuSqZLgdm7ZmjI=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac h1:8R1esu+8QioDxo4E4mX6bFztO+dMTM49DNAaWfO5OeY=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367 h1:0IiAsCRByjO2QjX7ZPkw5oU9x+n1YqRL802rjC0c3Aw=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c h1:uOCk1iQW6Vc18bnC13MfzScl+wdKBmM9Y9kU7Z83/lw=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5 h1:WQ8q63x+f/zpC8Ac1s9wLElVoHhm32p6tudrU72n1QA=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f h1:QBjCr1Fz5kw158VqdE9JfI9cJnl/ymnJWAdMuinqL7Y=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344 h1:vGXIOMxbNfDTk/aXCmfdLgkrSV+Z2tcbze+pEc3v5W4=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381 h1:VXak5I6aEWmAXeQjA+QSZzlgNrpq9mjcfDemuexIKsU=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421 h1:Wo7BWFiOk0QRFMLYMqJGFMd9CgUAcGx7V+qEg/h5IBI=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6 h1:bjcUS9ztw9kFmmIxJInhon/0Is3p+EHBKNgquIzo1OI=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208 h1:qwRHBd0NqMbJxfbotnDhm2ByMI1Shq4Y6oRJo21SGJA=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b h1:ag/x1USPSsqHud38I9BAC88qdNLDHHtQ4mlgQIZPPNA=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e h1:hq86ru83GdWTlfQFZGO4nZJTU4Bs2wfHl8oFHRaXsfc=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25 h1:OKbAoGs4fGM5cPLlVQLZGYkFC8OnOfgo6tt0Smf9XhM=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642 h1:B6caxRw+hozq68X2MY7jEpZh/cr4/aHLv9xU8Kkadrw=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2 h1:z99zHgr7hKfrUcX/KsoJk5FJfjTceCKIp96+biqP4To=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c h1:fqgJT0MGcGpPgpWU7VRdRjuArfcOvC4AoJmILihzhDg=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4 h1:SvFZT6jyqRaOeXpc5h/JSfZenJ2O330aBsf7JfSUXmQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138 h1:H3uGjxCR/6Ds0Mjgyp7LMK81+LvmbvWWEnJhzk1Pi9E=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c h1:97SnQk1GYRXJgvwZ8fadnxDOWfKvkNQHH3CtZntPSrM=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0 h1:Dh6fw+p6FyRl5x/FvNswO1ji0lIGzm3KP8Y9VkS9PTE=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff h1:On1qIo75ByTwFJ4/W2bIqHcwJ9XAqtSWUs8GwRrIhtc=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d h1:lzLdP95xJmMpwQ6LUHwrc5V7js93hTiY7gkznu0BgmY=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88 h1:4j84u0sokprDu3IdSYHJMmou+YSLflMz8p7yAx/QI4g=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d h1:szSOL78iTCl0LF1AMjhSWJj8tIM0KixlUUnBtYXsmd8=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d h1:W07d4xkoAUSNOkOzdzXCdFGxT7o2rW4q8M34tB2i//k=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0 h1:VGGbLNyPF7dvYHhcUGYBBGCRDDK0RRJAI6KCvo0CL+E=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0 h1:yzlyyDW/J0w8yNFJIhiAJy4kq74S+1DOLdawELNxFMA=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0 h1:0q95w+VuFtv4PAx4PZVQdBMmYbaCHbnfKaEiDIcVyag=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0 h1:J1Pl9P2lnmYFSJvgs70DKELqHNh8CNWXPbud4njEE2s=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0 h1:cG03eaksBzhfSIk7JRGctfp3lanklcOM/mTGvow7BbQ=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0 h1:BaiDisFir8O4IJxvAabCGGkQ6yCJegNQqSVoYUNAnbk=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0 h1:yfrXXP61wVuLb0vBcG6qaOoIoqYEzOQS8jum51jkv2w=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0 h1:KxkO13IPW4Lslp2bz+KHP2E3gtFlrIGNThxkZQ3g+4c=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19 h1:Lj2SnHtxkRGJDqnGaSjo+CCdIieEnwVazbOXILwQemk=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873 h1:nfPFGzJkUDX6uBmpN/pSw7MbOAWegH5QDQuoXFHedLg=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64 h1:iKtrH9Y8mcbADOP0YFaEMth7OfuHY9xHOwNj4znpM1A=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51 h1:Ex1mq5jaJof+kRnYi3SlYJ8KKa9Ao3NHyIT5XJ1gF6U=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84 h1:pSLkPbrjnPyLDYUO2VM9mDLqo2V6CFBY84lFSZAfoi4=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380 h1:xriR1EgvKfkKxIoU2uUvrMVl+H26359loFFUleSMXFo=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c h1:Lq4llNryJoaVFRmvrIwC/ZHH7tNt4tUYIu8+se2aayY=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987 h1:PDIOdWxZ8eRizhKa1AAvY53xsvLB1cWorMjslvY3VA8=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0 h1:cfg4PD8YEdSFnm7qLV4++93WcmhH2nIUhMjhdCvl3j8=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1 h1:Hz2g2wirWK7H0qIIhGIqRGTuMwTE8HEKFnDZZ7lm9NU=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc h1:TnonUr8u3himcMY0vSh23jFOXA+cnucl1gB6EQTReBI=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a h1:/8zB6iBfHCl1qAnEAWwGPNrUvapuy6CPla1VM0k8hQw=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a h1:LJwr7TCTghdatWv40WobzlKXc9c4s8oGa7QKJUtHhWA=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0 h1:HfqmD5MEmC0zvwBuF187nq9mdnXjXsSivRiXN7SmRkE=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0 h1:9JKUTTIUgS6kzR9mK1YuGKv6Nl+DijDNIc0ghT58FaY=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0 h1:7uVkIFmeBqHfdjD+gZwtXXI+RODJ2Wc4O7MPEh/QiW4=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-18
View File
@@ -1,18 +0,0 @@
module cloud.google.com/go/storage
go 1.11
require (
cloud.google.com/go v0.57.0
cloud.google.com/go/bigquery v1.8.0 // indirect
github.com/golang/protobuf v1.4.2
github.com/google/go-cmp v0.4.1
github.com/googleapis/gax-go/v2 v2.0.5
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 // indirect
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
golang.org/x/sys v0.0.0-20200523222454-059865788121 // indirect
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2 // indirect
google.golang.org/api v0.28.0
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790
google.golang.org/grpc v1.29.1
)
-450
View File
@@ -1,450 +0,0 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3 h1:AVXDdKsrtX33oR9fbCMu/+c1o8Ofjq6Ku/MInaLVg5Y=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0 h1:GGslhk/BU052LPlnI1vpp3fcbUs+hQ3E+Doti/3/vF8=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0 h1:MZQCQQaRwOrAcuKjiHWHrgKykt4fZyuwF2dtiG3fGW8=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0 h1:3ithwDMr7/3vpAMXiH+ZQnYbuIsh+OPhUPMFC9enmn0=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0 h1:WRz29PgAsVEyPSDHyk+0fpEkwEFyfhHn+JbksT6gIL4=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0 h1:EpMNVUorLiZIELdMZbCYX/ByTFCdoYopYAGxaGVz9ms=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go/bigquery v1.0.1 h1:hL+ycaJpVE9M7nLoiXb/Pn10ENE2u+oddxbD8uu0ZVU=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0 h1:sAbMqjY1PEQKZBWfbu6Y6bsupJ9c4QdHnzg/VvYTLcE=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0 h1:xE3CPsOgttP4ACBePh79zTKALtXwn/Edhcr16R5hMWU=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0 h1:K2NyuHRuv15ku6eUpe0DQk5ZykPMnSOnvuVf6IHcjaE=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0 h1:a/O/bK/vWrYGOTFtH8di4rBxMZnmkjy+Y5LxpDwo+dA=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0 h1:PQcPefKFdaIzjQFbiyOgAqyx8q5djaE7x9Sqe712DPA=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0 h1:Kt+gOPPp2LEPWp8CSfxhsM8ik9CcyE/gYu+0r+RnZvM=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0 h1:/May9ojXjRkPBNVrq+oWLqmWCkr4OU5uRY29bu0mRyQ=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1 h1:W9tAK3E57P75u0XLLR82LZyw8VpAnhmyTOxW9qzmyj8=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0 h1:9/vpR43S4aJaROxqQHQ3nH9lfyKKV0dC3vOmnw8ebQQ=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0 h1:Lpy6hKgdcl7a3WGSfJIFmxmcdjSpP6OmBEfcOv1Y680=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1 h1:ukjixP1wl0LpnZ6LWtZJ0mX5tBmjp1f8Sqer8Z2OMUU=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b h1:VKtxabqXZkF25pY9ekfRL6a582T4P37/31XEstQ5p58=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7 h1:5ZkaAPbicIKTF2I64qf5Fh8Aa83Q/dnOafMYV0OMwjA=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3 h1:gyjaxf+svBWX08ZjK86iN9geUJF0H6gp2IRKX6Nf6/I=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4 h1:87PNWwrRvUSnqS4dlcBU/ftvOIBep4sYuBLlh6rX2wk=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5 h1:F768QJ1E9tib+q5Sc8MkdJi1RxLTbRcTf8LJV56aRls=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0 h1:oOuy+ugB+P/kBdUnG5QaMXSIyJ1q38wWSojYCb3z5VQ=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2 h1:+Z5KGCizgyZCbGh1KZqA0fcLLkwbsjIzS4aV2v7wJX0=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0 h1:crn/baboCvb5fXaQ0IJ1SGTsTVrWpDsCWC8EGETZijY=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1 h1:/exdXoGamhu5ONeUJH0deniYLWYvQwW66yvlfiiKTu0=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5 h1:sjZBwGj9Jlw33ImPtvFviGYvseOtDM7hkSKB7+Tv3SM=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024 h1:rBMNdlhTLzJjJSDIjNEXX1Pz3Hmwmz91v+zycvx9PJc=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1 h1:6QPYqodiu3GuPL+7mfx+NwDdp2eTkp9IfEUpgAwUN0o=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0 h1:C9hSCOW830chIVkdja34wa6Ky+IzWllkUinR+BtRZd4=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2 h1:75k/FF0Q2YM8QYo07VPddOLBslDt1MZOdEslOHvmzAs=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979 h1:Agxu5KLo8o7Bb634SVDnhIfpTvxmzUwhbYAzBvXt6h4=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299 h1:zQpM52jfKHG6II1ISZY1ZcpygvuSFZpLwfluuF89XOg=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a h1:7Wlg8L54In96HTWOaI4sreLJ6qfyGuvSau5el3fK41Y=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd h1:zkO/Lhoka23X63N9OSzpSeROEUQ5ODw47tM3YWjygbs=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6 h1:QE6XYQK6naiK1EPAe1g/ILLxN5RBoH5xkJk3CqlMI/Y=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac h1:8R1esu+8QioDxo4E4mX6bFztO+dMTM49DNAaWfO5OeY=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f h1:J5lckAjkw6qYlOZNj90mLYNTEKDvWeuc1yieZ8qUzUE=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367 h1:0IiAsCRByjO2QjX7ZPkw5oU9x+n1YqRL802rjC0c3Aw=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b h1:Wh+f8QHJXR411sJR8/vRBTZ7YapZaRvUcLFFJhusH0k=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee h1:WG0RUwxtNT4qqaXX3DPA8zHFNm/D9xaBpxzHt1WcA/E=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859 h1:R/3boaszxrf1GEUWTVDzSKVwLmSJpwZ1yqXm8j0v2QI=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa h1:F+8P+gmewFQYRk6JoLQLwjBCTu3mcIURZfNkVweuRKA=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2 h1:CCH4IOTTfewWjGOlSp+zGcjutRKlBEZQ6wTn8ozI/nI=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b h1:0mm1VjtFUOIlE1SbDlwjYaDxZVDP2S5ou6y0gSgXHu8=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a h1:GuSPYbZzB5/dcLNCwLQLsg3obCJtX9IJhpXkvY7kzk0=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5 h1:WQ8q63x+f/zpC8Ac1s9wLElVoHhm32p6tudrU72n1QA=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2 h1:eDrdRpKgkcCqKZQwyZRyeFZgfqt37SL7Kv3tok06cKE=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45 h1:SVwTIAaPC2U/AvvLNZ2a7OVsmBpC8L5BlwK1whH3hm0=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e h1:vcxGaoTs7kV8m5Np9uUNQin4BrLOthgV7252N8V+FwY=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a h1:WXEvlFVvvGxCJLG6REjsT03iWnKLEWinaScsxF2Vm2o=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0 h1:HyfiK1WMnHj5FXFXatD+Qs1A/xC2Run6RzeW1SyHxpc=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1 h1:gZpLHxUX5BdYLA08Lj4YCJNN/jk7KtquiArPoeX0WvA=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5 h1:LfCXLvNmTYH9kEmVgqbnsWfruoXZIrh4YBgqVHtDvw0=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4 h1:sfkvUWPNGwSV+8/fNqctR5lS2AqCSqYwXdrjCxp/dXo=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527 h1:uYVVQ9WP/Ds2ROhcaGPeIdVq0RIXVLwsHlnvJ+cT1So=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d h1:nc5K6ox/4lTFbMVSL9WRR81ixkcwXThoiF6yf+R9scA=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e h1:hq86ru83GdWTlfQFZGO4nZJTU4Bs2wfHl8oFHRaXsfc=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121 h1:rITEj+UZHYC927n8GT97eC3zrpzXdb/voyeOuVKS46o=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff h1:On1qIo75ByTwFJ4/W2bIqHcwJ9XAqtSWUs8GwRrIhtc=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c h1:2EA2K0k9bcvvEDlqD8xdlOhCOqq+O/p9Voqi4x9W1YU=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a h1:7YaEqUc1tUg0yDwvdX+3U5bwrBg7u3FFAZ5D8gUs4/c=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74 h1:KW20qMcLRWuIgjdCpHFJbVZA7zsDKtFXPNcm7/eI5ZA=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56 h1:DFtSed2q3HtNuVazwVDZ4nSRS/JrZEig0gz2BY4VNrg=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d h1:7M9AXzLrJWWGdDYtBblPHBTnHtaN6KKQ98OYb35mLlY=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb h1:iKlO7ROJc6SttHKlxzwGytRtBUqX4VARrNTgP2YLX5M=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d h1:3K34ovZAOnVaUPxanr0j4ghTZTPTA0CnXvjCl+5lZqk=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4 h1:kDtqNkeBrZb8B+atrj50B5XLHpzXXqcCdZPP/ApQ5NY=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d h1:lzLdP95xJmMpwQ6LUHwrc5V7js93hTiY7gkznu0BgmY=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2 h1:FD4wDsP+CQUqh2V12OBOt90pLHVToe58P++fUu3ggV4=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0 h1:jbyannxz0XFD3zdjgrSUsaJbgpH4eTrkdhRChkHPfO8=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0 h1:yzlyyDW/J0w8yNFJIhiAJy4kq74S+1DOLdawELNxFMA=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0 h1:0q95w+VuFtv4PAx4PZVQdBMmYbaCHbnfKaEiDIcVyag=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0 h1:GwFK8+l5/gdsOYKz5p6M4UK+QT8OvmHWZPJCnf+5DjA=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0 h1:jz2KixHX7EcCPiQrySzPdnYT7DbINAypCqKZ1Z7GM40=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0 h1:J1Pl9P2lnmYFSJvgs70DKELqHNh8CNWXPbud4njEE2s=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0 h1:cG03eaksBzhfSIk7JRGctfp3lanklcOM/mTGvow7BbQ=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0 h1:jMF5hhVfMkTZwHW1SDpKq5CkgWLXOb31Foaca9Zr3oM=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1 h1:QzqyMA1tlu6CgqCDUtU9V+ZKhLFT2dkJuANu5QaxI3I=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6 h1:lMO5rYAqUxkmaj76jAkRUvt5JZgFymx/+Q5Mzfivuhc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51 h1:Ex1mq5jaJof+kRnYi3SlYJ8KKa9Ao3NHyIT5XJ1gF6U=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba h1:pRj9OXZbwNtbtZtOB4dLwfK4u+EVRMvP+e9zKkg2grM=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150 h1:VPpdpQkGvFicX9yo4G5oxZPi9ALBnEOZblPSa/Wa2m4=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90 h1:7THRSvPuzF1bql5kyFzX0JM0vpGhwuhskgJrJsbZ80Y=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce h1:1mbrb1tUU+Zmt5C94IGKADBTJZjZXAd+BubWi7r9EiI=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383 h1:Vo0fD5w0fUKriWlZLyrim2GXbumyN0D6euW79T9PgEE=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171 h1:xes2Q2k+d/+YNXVw0FpZkIDJiaux4OVrRKXRAzH6A0U=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672 h1:jiDSspVssiikoRPFHT6pYrL+CL6/yIc3b9AuHO/4xik=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940 h1:MRHtG0U6SnaUb+s+LhNE1qt1FQ1wlhqr5E4usBKC0uA=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84 h1:pSLkPbrjnPyLDYUO2VM9mDLqo2V6CFBY84lFSZAfoi4=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790 h1:FGjyjrQGURdc98leD1P65IdQD9Zlr4McvRcqIlV6OSs=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1 h1:j6XxA85m/6txkUCHvzlV5f+HBNl/1r5cZ2A/3IEFOO8=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0 h1:rRYRFMVgRv6E0D70Skyfsr28tDXIuuPZyWGMPdMcnXg=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0 h1:bO/TA4OxCOummhSf10siHuG7vJOiwh7SpRpFZDkOgl4=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1 h1:EC2SB8S04d2r73uptxphDSUG+kTKVgjRPF+N3xpxRB4=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0 h1:qdOKuR/EIArgaWNjetjgTzgVTAZ+S/WXVrq9HW9zimw=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0 h1:4MY060fB1DLGMB/7MBTLnwQUY6+F09GEiz6SsrNqyzM=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc h1:TnonUr8u3himcMY0vSh23jFOXA+cnucl1gB6EQTReBI=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0 h1:UhZDfRO8JRQru4/+LlLE0BRKGF8L+PICnvYZmx/fEGA=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3 h1:3JgtbtFHMiCmsznwGVTUWbgGov+pVqnlf1dEJTNAXeM=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3 h1:sXmLre5bzIR6ypkjXCDI3jHPssRhc8KD/Ome589sc3U=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
-12
View File
@@ -1,12 +0,0 @@
module github.com/Azure/go-autorest/autorest/adal
go 1.12
require (
github.com/Azure/go-autorest/autorest v0.9.0
github.com/Azure/go-autorest/autorest/date v0.2.0
github.com/Azure/go-autorest/autorest/mocks v0.3.0
github.com/Azure/go-autorest/tracing v0.5.0
github.com/dgrijalva/jwt-go v3.2.0+incompatible
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413
)
-28
View File
@@ -1,28 +0,0 @@
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-11
View File
@@ -1,11 +0,0 @@
module github.com/Azure/go-autorest/autorest/azure/auth
go 1.12
require (
github.com/Azure/go-autorest/autorest v0.9.3
github.com/Azure/go-autorest/autorest/adal v0.8.1
github.com/Azure/go-autorest/autorest/azure/cli v0.3.1
github.com/dimchansky/utfbom v1.1.0
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413
)
-39
View File
@@ -1,39 +0,0 @@
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
github.com/Azure/go-autorest/autorest v0.9.3 h1:OZEIaBbMdUE/Js+BQKlpO81XlISgipr6yDJ+PSwsgi4=
github.com/Azure/go-autorest/autorest v0.9.3/go.mod h1:GsRuLYvwzLjjjRoWEIyMUaYq8GNUx2nRB378IPt/1p0=
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
github.com/Azure/go-autorest/autorest/adal v0.8.0 h1:CxTzQrySOxDnKpLjFJeZAS5Qrv/qFPkgLjx5bOAi//I=
github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc=
github.com/Azure/go-autorest/autorest/adal v0.8.1 h1:pZdL8o72rK+avFWl+p9nE8RWi1JInZrWJYlnpfXJwHk=
github.com/Azure/go-autorest/autorest/adal v0.8.1/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
github.com/Azure/go-autorest/autorest/azure/cli v0.3.1 h1:LXl088ZQlP0SBppGFsRZonW6hSvwgL5gRByMbvUbx8U=
github.com/Azure/go-autorest/autorest/azure/cli v0.3.1/go.mod h1:ZG5p860J94/0kI9mNJVoIoLgXcirM2gF5i2kWloofxw=
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4=
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-11
View File
@@ -1,11 +0,0 @@
module github.com/Azure/go-autorest/autorest/azure/cli
go 1.12
require (
github.com/Azure/go-autorest/autorest v0.9.0
github.com/Azure/go-autorest/autorest/adal v0.8.0
github.com/Azure/go-autorest/autorest/date v0.2.0
github.com/dimchansky/utfbom v1.1.0
github.com/mitchellh/go-homedir v1.1.0
)
-29
View File
@@ -1,29 +0,0 @@
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
github.com/Azure/go-autorest/autorest/adal v0.8.0 h1:CxTzQrySOxDnKpLjFJeZAS5Qrv/qFPkgLjx5bOAi//I=
github.com/Azure/go-autorest/autorest/adal v0.8.0/go.mod h1:Z6vX6WXXuyieHAXwMj0S6HY6e6wcHn37qQMBQlvY3lc=
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
github.com/dimchansky/utfbom v1.1.0 h1:FcM3g+nofKgUteL8dm/UpdRXNC9KmADgTpLKsu0TRo4=
github.com/dimchansky/utfbom v1.1.0/go.mod h1:rO41eb7gLfo8SF1jd9F8HplJm1Fewwi4mQvIirEdv+8=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-5
View File
@@ -1,5 +0,0 @@
module github.com/Azure/go-autorest/autorest/date
go 1.12
require github.com/Azure/go-autorest/autorest v0.9.0
-16
View File
@@ -1,16 +0,0 @@
github.com/Azure/go-autorest/autorest v0.9.0 h1:MRvx8gncNaXJqOoLmhNjUAKh33JJF8LyxPhomEtOsjs=
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-11
View File
@@ -1,11 +0,0 @@
module github.com/Azure/go-autorest/autorest
go 1.12
require (
github.com/Azure/go-autorest/autorest/adal v0.8.2
github.com/Azure/go-autorest/autorest/mocks v0.3.0
github.com/Azure/go-autorest/logger v0.1.0
github.com/Azure/go-autorest/tracing v0.5.0
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413
)
-30
View File
@@ -1,30 +0,0 @@
github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI=
github.com/Azure/go-autorest/autorest/adal v0.5.0 h1:q2gDruN08/guU9vAjuPWff0+QIrpH6ediguzdAzXAUU=
github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0=
github.com/Azure/go-autorest/autorest/adal v0.8.2 h1:O1X4oexUxnZCaEUGsvMnr8ZGj8HI37tNezwY4npRqA0=
github.com/Azure/go-autorest/autorest/adal v0.8.2/go.mod h1:ZjhuQClTqx435SRJ2iMlOxPYt3d2C/T/7TiQCVZSn3Q=
github.com/Azure/go-autorest/autorest/date v0.1.0 h1:YGrhWfrgtFs84+h0o46rJrlmsZtyZRg470CqAXTZaGM=
github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA=
github.com/Azure/go-autorest/autorest/date v0.2.0 h1:yW+Zlqf26583pE43KhfnhFcdmSWlm5Ew6bxipnr/tbM=
github.com/Azure/go-autorest/autorest/date v0.2.0/go.mod h1:vcORJHLJEh643/Ioh9+vPmf1Ij9AEBM5FuBIXLmIy0g=
github.com/Azure/go-autorest/autorest/mocks v0.1.0 h1:Kx+AUU2Te+A3JIyYn6Dfs+cFgx5XorQKuIXrZGoq/SI=
github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0 h1:Ww5g4zThfD/6cLb4z6xxgeyDa7QDkizMkJKe0ysZXp0=
github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0=
github.com/Azure/go-autorest/autorest/mocks v0.3.0 h1:qJumjCaCudz+OcqE9/XtEPfvtOjOmKaui4EOpFI6zZc=
github.com/Azure/go-autorest/autorest/mocks v0.3.0/go.mod h1:a8FDP3DYzQ4RYfVAxAN3SVSiiO77gL2j2ronKKP0syM=
github.com/Azure/go-autorest/logger v0.1.0 h1:ruG4BSDXONFRrZZJ2GUXDiUyVpayPmb1GnWeHDdaNKY=
github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc=
github.com/Azure/go-autorest/tracing v0.5.0 h1:TRn4WjSnkcSy5AEG3pnbtFSwNtwzjr4VYyQflFE619k=
github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk=
github.com/dgrijalva/jwt-go v3.2.0+incompatible h1:7qlOGliEKZXTDg6OTjfoBKDXWrumCAMpl/TFQ4/5kLM=
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413 h1:ULYEB3JvPRE/IfO+9uO7vKV/xzVTO7XPAwm8xbf4w2g=
golang.org/x/crypto v0.0.0-20191206172530-e9b2fee46413/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-3
View File
@@ -1,3 +0,0 @@
module github.com/Azure/go-autorest/logger
go 1.12
-3
View File
@@ -1,3 +0,0 @@
module github.com/Azure/go-autorest/tracing
go 1.12
+7 -8
View File
@@ -10,6 +10,10 @@ There are two version of this driver, v1 and v2, available as separate branches.
Users should use v2 which is production ready and [significantly faster than v1](#benchmark).
## Supported ClickHouse Versions
The driver is tested against the currently [supported versions](https://github.com/ClickHouse/ClickHouse/blob/master/SECURITY.md) of ClickHouse
## Key features
* Uses native ClickHouse TCP client-server protocol
@@ -144,20 +148,15 @@ This minimal tls.Config is normally all that is necessary to connect to the secu
If additional TLS parameters are necessary the application code should set the desired fields in the tls.Config struct. That can include specific cipher suites, forcing a particular TLS version (like 1.2 or 1.3), adding an internal CA certificate chain, adding a client certificate (and private key) if required by the ClickHouse server, and most of the other options that come with a more specialized security setup.
## Alternatives
## Third-party alternatives
* Database drivers
* Database drivers:
* [mailru/go-clickhouse](https://github.com/mailru/go-clickhouse) (uses the HTTP protocol)
* [uptrace/go-clickhouse](https://github.com/uptrace/go-clickhouse) (uses the native TCP protocol with `database/sql`-like API)
* drivers with columnar interface :
* Drivers with columnar interface:
* [vahid-sohrabloo/chconn](https://github.com/vahid-sohrabloo/chconn)
* [go-faster/ch](https://github.com/go-faster/ch)
* Insert collectors:
* [KittenHouse](https://github.com/YuriyNasretdinov/kittenhouse)
* [nikepan/clickhouse-bulk](https://github.com/nikepan/clickhouse-bulk)
### Useful projects
* [clickhouse-backup](https://github.com/AlexAkulov/clickhouse-backup)
* [go-graphite](https://github.com/go-graphite)
+109 -24
View File
@@ -35,32 +35,78 @@ func Named(name string, value interface{}) driver.NamedValue {
}
}
var bindNumericRe = regexp.MustCompile(`\$[0-9]+`)
var bindPositionalRe = regexp.MustCompile(`[^\\][?]`)
func bind(tz *time.Location, query string, args ...interface{}) (string, error) {
if len(args) == 0 {
return query, nil
}
var (
haveNamed bool
haveNumeric bool
haveNamed bool
haveNumeric bool
havePositional bool
)
haveNumeric = bindNumericRe.MatchString(query)
havePositional = bindPositionalRe.MatchString(query)
if haveNumeric && havePositional {
return "", ErrBindMixedParamsFormats
}
for _, v := range args {
switch v.(type) {
case driver.NamedValue:
haveNamed = true
default:
haveNumeric = true
}
if haveNamed && haveNumeric {
return "", ErrBindMixedNamedAndNumericParams
if haveNamed && (haveNumeric || havePositional) {
return "", ErrBindMixedParamsFormats
}
}
if haveNamed {
return bindNamed(tz, query, args...)
}
return bindNumeric(tz, query, args...)
if haveNumeric {
return bindNumeric(tz, query, args...)
}
return bindPositional(tz, query, args...)
}
var bindNumericRe = regexp.MustCompile(`\$[0-9]+`)
var bindPositionCharRe = regexp.MustCompile(`[?]`)
func bindPositional(tz *time.Location, query string, args ...interface{}) (_ string, err error) {
var (
unbind = make(map[int]struct{})
params = make([]string, len(args))
)
for i, v := range args {
if fn, ok := v.(std_driver.Valuer); ok {
if v, err = fn.Value(); err != nil {
return "", nil
}
}
params[i], err = format(tz, v)
if err != nil {
return "", err
}
}
i := 0
query = bindPositionalRe.ReplaceAllStringFunc(query, func(n string) string {
if i >= len(params) {
unbind[i] = struct{}{}
return ""
}
val := params[i]
i++
return bindPositionCharRe.ReplaceAllStringFunc(n, func(m string) string {
return val
})
})
for param := range unbind {
return "", fmt.Errorf("have no arg for param ? at position %d", param)
}
// replace \? escape sequence
return strings.ReplaceAll(query, "\\?", "?"), nil
}
func bindNumeric(tz *time.Location, query string, args ...interface{}) (_ string, err error) {
var (
@@ -73,7 +119,11 @@ func bindNumeric(tz *time.Location, query string, args ...interface{}) (_ string
return "", nil
}
}
params[fmt.Sprintf("$%d", i+1)] = format(tz, v)
val, err := format(tz, v)
if err != nil {
return "", err
}
params[fmt.Sprintf("$%d", i+1)] = val
}
query = bindNumericRe.ReplaceAllStringFunc(query, func(n string) string {
if _, found := params[n]; !found {
@@ -104,7 +154,11 @@ func bindNamed(tz *time.Location, query string, args ...interface{}) (_ string,
return "", err
}
}
params["@"+v.Name] = format(tz, value)
val, err := format(tz, value)
if err != nil {
return "", err
}
params["@"+v.Name] = val
}
}
query = bindNamedRe.ReplaceAllStringFunc(query, func(n string) string {
@@ -120,49 +174,80 @@ func bindNamed(tz *time.Location, query string, args ...interface{}) (_ string,
return query, nil
}
func format(tz *time.Location, v interface{}) string {
func format(tz *time.Location, v interface{}) (string, error) {
quote := func(v string) string {
return "'" + strings.NewReplacer(`\`, `\\`, `'`, `\'`).Replace(v) + "'"
}
switch v := v.(type) {
case nil:
return "NULL"
return "NULL", nil
case string:
return quote(v)
return quote(v), nil
case time.Time:
switch v.Location().String() {
case "Local":
return fmt.Sprintf("toDateTime(%d)", v.Unix())
return fmt.Sprintf("toDateTime(%d)", v.Unix()), nil
case tz.String():
return v.Format("toDateTime('2006-01-02 15:04:05')")
return v.Format("toDateTime('2006-01-02 15:04:05')"), nil
}
return v.Format("toDateTime('2006-01-02 15:04:05', '" + v.Location().String() + "')")
return v.Format("toDateTime('2006-01-02 15:04:05', '" + v.Location().String() + "')"), nil
case []interface{}: // tuple
elements := make([]string, 0, len(v))
for _, e := range v {
elements = append(elements, format(tz, e))
val, err := format(tz, e)
if err != nil {
return "", err
}
elements = append(elements, val)
}
return "(" + strings.Join(elements, ", ") + ")"
return "(" + strings.Join(elements, ", ") + ")", nil
case [][]interface{}:
items := make([]string, 0, len(v))
for _, t := range v {
items = append(items, format(tz, t))
val, err := format(tz, t)
if err != nil {
return "", err
}
items = append(items, val)
}
return strings.Join(items, ", ")
return strings.Join(items, ", "), nil
case fmt.Stringer:
return quote(v.String())
return quote(v.String()), nil
}
switch v := reflect.ValueOf(v); v.Kind() {
case reflect.String:
return quote(v.String())
return quote(v.String()), nil
case reflect.Slice:
values := make([]string, 0, v.Len())
for i := 0; i < v.Len(); i++ {
values = append(values, format(tz, v.Index(i).Interface()))
val, err := format(tz, v.Index(i).Interface())
if err != nil {
return "", err
}
values = append(values, val)
}
return strings.Join(values, ", ")
return strings.Join(values, ", "), nil
case reflect.Map: // map
values := make([]string, 0, len(v.MapKeys()))
for _, key := range v.MapKeys() {
name := fmt.Sprint(key.Interface())
if key.Kind() == reflect.String {
name = fmt.Sprintf("'%s'", name)
}
val, err := format(tz, v.MapIndex(key).Interface())
if err != nil {
return "", err
}
if v.MapIndex(key).Kind() == reflect.Slice {
// assume slices in maps are arrays
val = fmt.Sprintf("[%s]", val)
}
values = append(values, fmt.Sprintf("%s : %s", name, val))
}
return "{" + strings.Join(values, ", ") + "}", nil
}
return fmt.Sprint(v)
return fmt.Sprint(v), nil
}
func rebind(in []std_driver.NamedValue) []interface{} {
+20 -8
View File
@@ -40,10 +40,11 @@ type (
)
var (
ErrBatchAlreadySent = errors.New("clickhouse: batch has already been sent")
ErrAcquireConnTimeout = errors.New("clickhouse: acquire conn timeout. you can increase the number of max open conn or the dial timeout")
ErrUnsupportedServerRevision = errors.New("clickhouse: unsupported server revision")
ErrBindMixedNamedAndNumericParams = errors.New("clickhouse [bind]: mixed named and numeric parameters")
ErrBatchAlreadySent = errors.New("clickhouse: batch has already been sent")
ErrAcquireConnTimeout = errors.New("clickhouse: acquire conn timeout. you can increase the number of max open conn or the dial timeout")
ErrUnsupportedServerRevision = errors.New("clickhouse: unsupported server revision")
ErrBindMixedParamsFormats = errors.New("clickhouse [bind]: mixed named, numeric or positional parameters")
ErrAcquireConnNoAddress = errors.New("clickhouse: no valid address supplied")
)
type OpError struct {
@@ -143,7 +144,11 @@ func (ch *clickhouse) PrepareBatch(ctx context.Context, query string) (driver.Ba
if err != nil {
return nil, err
}
return conn.prepareBatch(ctx, query, ch.release)
batch, err := conn.prepareBatch(ctx, query, ch.release)
if err != nil {
return nil, err
}
return batch, nil
}
func (ch *clickhouse) AsyncInsert(ctx context.Context, query string, wait bool) error {
@@ -183,14 +188,21 @@ func (ch *clickhouse) Stats() driver.Stats {
func (ch *clickhouse) dial(ctx context.Context) (conn *connect, err error) {
connID := int(atomic.AddInt64(&ch.connID, 1))
for num := range ch.opt.Addr {
if ch.opt.ConnOpenStrategy == ConnOpenRoundRobin {
num = int(connID) % len(ch.opt.Addr)
for i := range ch.opt.Addr {
var num int
switch ch.opt.ConnOpenStrategy {
case ConnOpenInOrder:
num = i
case ConnOpenRoundRobin:
num = (int(connID) + i) % len(ch.opt.Addr)
}
if conn, err = dial(ctx, ch.opt.Addr[num], connID, ch.opt); err == nil {
return conn, nil
}
}
if err == nil {
err = ErrAcquireConnNoAddress
}
return nil, err
}
+1 -1
View File
@@ -63,6 +63,7 @@ type Options struct {
Auth Auth
DialContext func(ctx context.Context, addr string) (net.Conn, error)
Debug bool
Debugf func(format string, v ...interface{}) // only works when Debug is true
Settings Settings
Compression *Compression
DialTimeout time.Duration // default 1 second
@@ -136,7 +137,6 @@ func (o *Options) fromDSN(in string) error {
InsecureSkipVerify: skipVerify,
}
}
o.setDefaults()
return nil
}
+1 -2
View File
@@ -32,7 +32,7 @@ type rows struct {
errors chan error
stream chan *proto.Block
columns []string
structMap structMap
structMap *structMap
}
func (r *rows) Next() (result bool) {
@@ -117,7 +117,6 @@ func (r *rows) Close() error {
}
}
}
return r.err
}
func (r *rows) Err() error {
+8 -3
View File
@@ -50,9 +50,13 @@ func (o *stdConnOpener) Connect(ctx context.Context) (_ driver.Conn, err error)
conn *connect
connID = int(atomic.AddInt64(&globalConnID, 1))
)
for num := range o.opt.Addr {
if o.opt.ConnOpenStrategy == ConnOpenRoundRobin {
num = int(connID) % len(o.opt.Addr)
for i := range o.opt.Addr {
var num int
switch o.opt.ConnOpenStrategy {
case ConnOpenInOrder:
num = i
case ConnOpenRoundRobin:
num = (int(connID) + i) % len(o.opt.Addr)
}
if conn, err = dial(ctx, o.opt.Addr[num], connID, o.opt); err == nil {
return &stdDriver{
@@ -99,6 +103,7 @@ func (d *stdDriver) Open(dsn string) (_ driver.Conn, err error) {
if err := opt.fromDSN(dsn); err != nil {
return nil, err
}
opt.setDefaults()
return (&stdConnOpener{opt: &opt}).Connect(context.Background())
}
+15 -14
View File
@@ -24,7 +24,6 @@ import (
"log"
"net"
"os"
"reflect"
"time"
"github.com/ClickHouse/clickhouse-go/v2/lib/binary"
@@ -53,7 +52,11 @@ func dial(ctx context.Context, addr string, num int, opt *Options) (*connect, er
return nil, err
}
if opt.Debug {
debugf = log.New(os.Stdout, fmt.Sprintf("[clickhouse][conn=%d][%s]", num, conn.RemoteAddr()), 0).Printf
if opt.Debugf != nil {
debugf = opt.Debugf
} else {
debugf = log.New(os.Stdout, fmt.Sprintf("[clickhouse][conn=%d][%s]", num, conn.RemoteAddr()), 0).Printf
}
}
var compression bool
if opt.Compression != nil {
@@ -62,16 +65,14 @@ func dial(ctx context.Context, addr string, num int, opt *Options) (*connect, er
var (
stream = io.NewStream(conn)
connect = &connect{
opt: opt,
conn: conn,
debugf: debugf,
stream: stream,
encoder: binary.NewEncoder(stream),
decoder: binary.NewDecoder(stream),
revision: proto.ClientTCPProtocolVersion,
structMap: structMap{
cache: make(map[reflect.Type]map[string][]int),
},
opt: opt,
conn: conn,
debugf: debugf,
stream: stream,
encoder: binary.NewEncoder(stream),
decoder: binary.NewDecoder(stream),
revision: proto.ClientTCPProtocolVersion,
structMap: &structMap{},
compression: compression,
connectedAt: time.Now(),
}
@@ -94,9 +95,9 @@ type connect struct {
decoder *binary.Decoder
released bool
revision uint64
structMap structMap
structMap *structMap
compression bool
//lastUsedIn time.Time
// lastUsedIn time.Time
connectedAt time.Time
}
-17
View File
@@ -1,17 +0,0 @@
module github.com/ClickHouse/clickhouse-go/v2
go 1.16
require (
github.com/ClickHouse/clickhouse-go v1.5.4
github.com/google/uuid v1.3.0
github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615
github.com/paulmach/orb v0.5.0
github.com/pierrec/lz4/v4 v4.1.14
github.com/shirou/gopsutil v3.21.11+incompatible // indirect
github.com/shopspring/decimal v1.3.1
github.com/stretchr/testify v1.7.1
github.com/tklauser/go-sysconf v0.3.10 // indirect
go.opentelemetry.io/otel/trace v1.7.0
golang.org/x/sys v0.0.0-20220429233432-b5fbb4746d32 // indirect
)
-102
View File
@@ -1,102 +0,0 @@
github.com/ClickHouse/clickhouse-go v1.5.4 h1:cKjXeYLNWVJIx2J1K6H2CqyRmfwVJVY1OV1coaaFcI0=
github.com/ClickHouse/clickhouse-go v1.5.4/go.mod h1:EaI/sW7Azgz9UATzd5ZdZHRUhHgv5+JMS9NSr2smCJI=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d h1:G0m3OIz70MZUWq3EgK3CesDbo8upS2Vm9/P3FtgI+Jk=
github.com/StackExchange/wmi v0.0.0-20190523213315-cbe66965904d/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg=
github.com/bkaradzic/go-lz4 v1.0.0 h1:RXc4wYsyz985CkXXeX04y4VnZFGG8Rd43pRaHsOXAKk=
github.com/bkaradzic/go-lz4 v1.0.0/go.mod h1:0YdlkowM3VswSROI7qDxhRvJ3sLhlFrRRwjwegp5jy4=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58 h1:F1EaeKL/ta07PY/k9Os/UFtwERei2/XzGemhpGnBKNg=
github.com/cloudflare/golz4 v0.0.0-20150217214814-ef862a3cdc58/go.mod h1:EOBUe0h4xcZ5GoxqC5SDxFQ8gwyZPKQoEzownBlhI80=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-ole/go-ole v1.2.4 h1:nNBDSCOigTSiarFpYE9J/KtEA1IOW4CNeqT9TQDqCxI=
github.com/go-ole/go-ole v1.2.4/go.mod h1:XCwSNxSkXRo4vlyPy93sltvi/qJq0jqQhjqQNIwKuxM=
github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.7 h1:81/ik6ipDQS2aGcBfIN5dHDB36BwrStyeAQquSYCV4o=
github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
github.com/gorilla/websocket v1.4.1 h1:q7AeDBpnBk8AogcD4DSag/Ukw/KV+YhzLj2bP5HvKCM=
github.com/gorilla/websocket v1.4.1/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/jmoiron/sqlx v1.2.0/go.mod h1:1FEQNm3xlJgrMD+FBdI9+xvCksHtbpVBBw5dYhBSsks=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615 h1:/mD+ABZyXD39BzJI2XyRJlqdZG11gXFo0SSynL+OFeU=
github.com/mkevac/debugcharts v0.0.0-20191222103121-ae1c48aa8615/go.mod h1:Ad7oeElCZqA1Ufj0U9/liOF4BtVepxRcTvr2ey7zTvM=
github.com/paulmach/orb v0.5.0 h1:sNhJV5ML+mv1F077ljOck/9inorF4ahDO8iNNpHbKHY=
github.com/paulmach/orb v0.5.0/go.mod h1:FWRlTgl88VI1RBx/MkrwWDRhQ96ctqMCh8boXhmqB/A=
github.com/paulmach/protoscan v0.2.1/go.mod h1:SpcSwydNLrxUGSDvXvO0P7g7AuhJ7lcKfDlhJCDw2gY=
github.com/pierrec/lz4 v2.0.5+incompatible h1:2xWsjqPFWcplujydGg4WmhC/6fZqK42wMM8aXeqhl0I=
github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY=
github.com/pierrec/lz4/v4 v4.1.14 h1:+fL8AQEZtz/ijeNnpduH0bROTu0O3NZAlPjQxGn8LwE=
github.com/pierrec/lz4/v4 v4.1.14/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/shirou/gopsutil v2.19.11+incompatible h1:lJHR0foqAjI4exXqWsU3DbH7bX1xvdhGdnXTIARA9W4=
github.com/shirou/gopsutil v2.19.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4 h1:udFKJ0aHUL60LboW/A+DfgoHVedieIzIXE8uylPue0U=
github.com/shirou/w32 v0.0.0-20160930032740-bb4de0191aa4/go.mod h1:qsXQc7+bwAM3Q1u/4XEfrquwF8Lw7D7y5cD8CuHnfIc=
github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5gKV8=
github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/tklauser/go-sysconf v0.3.10 h1:IJ1AZGZRWbY8T5Vfk04D9WOA5WSejdflXxP03OUqALw=
github.com/tklauser/go-sysconf v0.3.10/go.mod h1:C8XykCvCb+Gn0oNCWPIlcb0RuglQTYaQ2hGm7jmxEFk=
github.com/tklauser/numcpus v0.4.0 h1:E53Dm1HjH1/R2/aoCtXtPgzmElmn51aOkhCFSuZq//o=
github.com/tklauser/numcpus v0.4.0/go.mod h1:1+UI3pD8NW14VMwdgJNJ1ESk2UnwhAnz5hMwiKKqXCQ=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opentelemetry.io/otel v1.7.0 h1:Z2lA3Tdch0iDcrhJXDIlC94XE+bxok1F9B+4Lz/lGsM=
go.opentelemetry.io/otel v1.7.0/go.mod h1:5BdUoMIz5WEs0vt0CUEMtSSaTSHBBVwrhnz7+nrD5xk=
go.opentelemetry.io/otel/trace v1.7.0 h1:O37Iogk1lEkMRXewVtZ1BBTVn5JEp8GrJvP92bJqC6o=
go.opentelemetry.io/otel/trace v1.7.0/go.mod h1:fzLSB9nqR2eXzxPXb2JW9IKE+ScyXA48yyE4TNvoHqU=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191220220014-0732a990476f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220429233432-b5fbb4746d32 h1:Js08h5hqB5xyWR789+QqueR6sDE8mk+YvpETZ+F6X9Y=
golang.org/x/sys v0.0.0-20220429233432-b5fbb4746d32/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
+188 -9
View File
@@ -36,6 +36,11 @@ type Array struct {
values Interface
offsets []*offset
scanType reflect.Type
name string
}
func (col *Array) Name() string {
return col.name
}
func (col *Array) parse(t Type) (_ Interface, err error) {
@@ -54,7 +59,7 @@ parse:
}
}
if col.depth != 0 {
if col.values, err = Type(typeStr).Column(); err != nil {
if col.values, err = Type(typeStr).Column(col.name); err != nil {
return nil, err
}
offsetScanTypes := make([]reflect.Type, 0, col.depth)
@@ -89,7 +94,7 @@ func (col *Array) ScanType() reflect.Type {
func (col *Array) Rows() int {
if len(col.offsets) != 0 {
return len(col.offsets[0].values)
return len(col.offsets[0].values.data)
}
return 0
}
@@ -158,10 +163,10 @@ func (col *Array) AppendRow(v interface{}) error {
func (col *Array) append(elem reflect.Value, level int) error {
if level < col.depth {
offset := uint64(elem.Len())
if ln := len(col.offsets[level].values); ln != 0 {
offset += col.offsets[level].values[ln-1]
if ln := len(col.offsets[level].values.data); ln != 0 {
offset += col.offsets[level].values.data[ln-1]
}
col.offsets[level].values = append(col.offsets[level].values, offset)
col.offsets[level].values.data = append(col.offsets[level].values.data, offset)
for i := 0; i < elem.Len(); i++ {
if err := col.append(elem.Index(i), level+1); err != nil {
return err
@@ -181,8 +186,8 @@ func (col *Array) Decode(decoder *binary.Decoder, rows int) error {
return err
}
switch {
case len(offset.values) > 0:
rows = int(offset.values[len(offset.values)-1])
case len(offset.values.data) > 0:
rows = int(offset.values.data[len(offset.values.data)-1])
default:
rows = 0
}
@@ -220,11 +225,11 @@ func (col *Array) WriteStatePrefix(encoder *binary.Encoder) error {
func (col *Array) make(row uint64, level int) reflect.Value {
offset := col.offsets[level]
var (
end = offset.values[row]
end = offset.values.data[row]
start = uint64(0)
)
if row > 0 {
start = offset.values[row-1]
start = offset.values.data[row-1]
}
var (
base = offset.scanType.Elem()
@@ -249,6 +254,180 @@ func (col *Array) make(row uint64, level int) reflect.Value {
return slice
}
func (col *Array) scanJSONSlice(sliceType reflect.Type, row int, level int) (reflect.Value, error) {
// We could try and set - if it exceeds just return immediately
offset := col.offsets[level]
var (
end = offset.values.data[row]
start = uint64(0)
)
if row > 0 {
start = offset.values.data[row-1]
}
var jsonSlice reflect.Value
switch sliceType.Kind() {
case reflect.Interface:
jsonSlice = reflect.ValueOf(make([]interface{}, 0, int(end-start)))
case reflect.Slice:
jsonSlice = reflect.MakeSlice(sliceType, 0, int(end-start))
default:
return reflect.Value{}, &Error{
ColumnType: fmt.Sprint(sliceType.Kind()),
Err: fmt.Errorf("column %s - needs a slice or interface{}", col.Name()),
}
}
for i := start; i < end; i++ {
var value reflect.Value
var err error
switch {
case level == len(col.offsets)-1:
switch dcol := col.values.(type) {
case *Nested:
aCol := dcol.Interface.(*Array)
value, err = aCol.parseJSONSliceOfObjects(sliceType.Elem(), int(i))
if err != nil {
return reflect.Value{}, err
}
case *Array:
value, err = dcol.scanJSONSlice(sliceType.Elem(), int(i), 0)
if err != nil {
return reflect.Value{}, err
}
default:
v := col.values.Row(int(i), false)
if sliceType.Kind() == reflect.Interface {
value = reflect.New(sliceType).Elem()
if err := setJSONFieldValue(value, reflect.ValueOf(v)); err != nil {
return reflect.Value{}, err
}
} else {
value = reflect.New(sliceType.Elem()).Elem()
if err := setJSONFieldValue(value, reflect.ValueOf(v)); err != nil {
return reflect.Value{}, err
}
}
}
default:
value, err = col.scanJSONSlice(sliceType.Elem(), int(i), level+1)
if err != nil {
return reflect.Value{}, err
}
}
jsonSlice = reflect.Append(jsonSlice, value)
}
return jsonSlice, nil
}
func (col *Array) parseJSONSliceOfObjects(sliceType reflect.Type, row int) (reflect.Value, error) {
if sliceType.Kind() == reflect.Interface {
// catches interface{} - Note this swallows custom interfaces to which maps couldn't conform
subMap := make(map[string]interface{})
return col.scanJSONSliceOfMaps(reflect.SliceOf(reflect.TypeOf(subMap)), row)
} else if sliceType.Kind() == reflect.Slice {
// make a slice of the right type - we need this to be a slice of a type capable of taking an object as nested
switch sliceType.Elem().Kind() {
case reflect.Struct:
return col.scanJSONSliceOfStructs(sliceType, row)
case reflect.Map:
return col.scanJSONSliceOfMaps(sliceType, row)
case reflect.Interface:
// catches []interface{} - Note this swallows custom interfaces to which maps couldn't conform
// might lead to fail
subMap := make(map[string]interface{})
return col.scanJSONSliceOfMaps(reflect.SliceOf(reflect.TypeOf(subMap)), row)
default:
return reflect.Value{}, &Error{
ColumnType: fmt.Sprint(sliceType.Elem().Kind()),
Err: fmt.Errorf("column %s - needs a slice of objects or an interface{}", col.Name()),
}
}
return reflect.Value{}, nil
}
return reflect.Value{}, &Error{
ColumnType: fmt.Sprint(sliceType.Kind()),
Err: fmt.Errorf("column %s - needs a slice or interface{}", col.Name()),
}
}
// the following 2 functions can probably be refactored - the share alot of common code for structs and maps
func (col *Array) scanJSONSliceOfMaps(sliceType reflect.Type, row int) (reflect.Value, error) {
if sliceType.Kind() != reflect.Slice {
return reflect.Value{}, &ColumnConverterError{
Op: "ScanRow",
To: fmt.Sprintf("%s", sliceType),
From: string(col.Type()),
}
}
tCol, ok := col.values.(*Tuple)
if !ok {
return reflect.Value{}, &Error{
ColumnType: fmt.Sprint(col.values.Type()),
Err: fmt.Errorf("column %s - must be a tuple", col.Name()),
}
}
// Array(Tuple so depth 1 for JSON
offset := col.offsets[0]
var (
end = offset.values.data[row]
start = uint64(0)
)
if row > 0 {
start = offset.values.data[row-1]
}
if end-start > 0 {
jsonSlice := reflect.MakeSlice(sliceType, 0, int(end-start))
for i := start; i < end; i++ {
sMap := reflect.MakeMap(sliceType.Elem())
if err := tCol.scanJSONMap(sMap, int(i)); err != nil {
return reflect.Value{}, err
}
jsonSlice = reflect.Append(jsonSlice, sMap)
}
return jsonSlice, nil
}
return reflect.MakeSlice(sliceType, 0, 0), nil
}
func (col *Array) scanJSONSliceOfStructs(sliceType reflect.Type, row int) (reflect.Value, error) {
if sliceType.Kind() != reflect.Slice {
return reflect.Value{}, &ColumnConverterError{
Op: "ScanRow",
To: fmt.Sprintf("%s", sliceType),
From: string(col.Type()),
}
}
tCol, ok := col.values.(*Tuple)
if !ok {
return reflect.Value{}, &Error{
ColumnType: fmt.Sprint(col.values.Type()),
Err: fmt.Errorf("column %s - must be a tuple", col.Name()),
}
}
// Array(Tuple so depth 1 for JSON
offset := col.offsets[0]
var (
end = offset.values.data[row]
start = uint64(0)
)
if row > 0 {
start = offset.values.data[row-1]
}
if end-start > 0 {
// create a slice of the type from the jsonSlice - if this might be interface{} as its driven by the target datastructure
jsonSlice := reflect.MakeSlice(sliceType, 0, int(end-start))
for i := start; i < end; i++ {
sStruct := reflect.New(sliceType.Elem()).Elem()
if err := tCol.scanJSONStruct(sStruct, int(i)); err != nil {
return reflect.Value{}, err
}
jsonSlice = reflect.Append(jsonSlice, sStruct)
}
return jsonSlice, nil
}
return reflect.MakeSlice(sliceType, 0, 0), nil
}
var (
_ Interface = (*Array)(nil)
_ CustomSerialization = (*Array)(nil)
+5
View File
@@ -29,6 +29,11 @@ type BigInt struct {
size int
data []byte
chType Type
name string
}
func (col *BigInt) Name() string {
return col.name
}
func (col *BigInt) Type() Type {
+11 -6
View File
@@ -26,6 +26,11 @@ import (
type Bool struct {
values UInt8
name string
}
func (col *Bool) Name() string {
return col.name
}
func (col *Bool) Type() Type {
@@ -37,7 +42,7 @@ func (col *Bool) ScanType() reflect.Type {
}
func (col *Bool) Rows() int {
return len(col.values)
return len(col.values.data)
}
func (col *Bool) Row(i int, ptr bool) interface{} {
@@ -77,7 +82,7 @@ func (col *Bool) Append(v interface{}) (nulls []uint8, err error) {
in = append(in, 0)
}
}
col.values, nulls = append(col.values, in...), make([]uint8, len(v))
col.values.data, nulls = append(col.values.data, in...), make([]uint8, len(v))
case []*bool:
nulls = make([]uint8, len(v))
in := make([]uint8, 0, len(v))
@@ -93,7 +98,7 @@ func (col *Bool) Append(v interface{}) (nulls []uint8, err error) {
}
in = append(in, value)
}
col.values = append(col.values, in...)
col.values.data = append(col.values.data, in...)
default:
return nil, &ColumnConverterError{
Op: "Append",
@@ -123,9 +128,9 @@ func (col *Bool) AppendRow(v interface{}) error {
}
switch {
case value:
col.values = append(col.values, 1)
col.values.data = append(col.values.data, 1)
default:
col.values = append(col.values, 0)
col.values.data = append(col.values.data, 0)
}
return nil
}
@@ -139,7 +144,7 @@ func (col *Bool) Encode(encoder *binary.Encoder) error {
}
func (col *Bool) row(i int) bool {
return col.values[i] == 1
return col.values.data[i] == 1
}
var _ Interface = (*Bool)(nil)
+1
View File
@@ -68,6 +68,7 @@ func (e *UnsupportedColumnTypeError) Error() string {
}
type Interface interface {
Name() string
Type() Type
Rows() int
Row(i int, ptr bool) interface{}
File diff suppressed because it is too large Load Diff
+20 -20
View File
@@ -33,13 +33,13 @@ func (col *Float32) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *Float32) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.Float32(v); err != nil {
return err
}
@@ -53,13 +53,13 @@ func (col *Float64) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *Float64) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.Float64(v); err != nil {
return err
}
@@ -73,13 +73,13 @@ func (col *Int8) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *Int8) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.Int8(v); err != nil {
return err
}
@@ -93,13 +93,13 @@ func (col *Int16) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *Int16) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.Int16(v); err != nil {
return err
}
@@ -113,13 +113,13 @@ func (col *Int32) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *Int32) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.Int32(v); err != nil {
return err
}
@@ -133,13 +133,13 @@ func (col *Int64) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *Int64) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.Int64(v); err != nil {
return err
}
@@ -153,13 +153,13 @@ func (col *UInt8) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *UInt8) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.UInt8(v); err != nil {
return err
}
@@ -173,13 +173,13 @@ func (col *UInt16) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *UInt16) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.UInt16(v); err != nil {
return err
}
@@ -193,13 +193,13 @@ func (col *UInt32) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *UInt32) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.UInt32(v); err != nil {
return err
}
@@ -213,13 +213,13 @@ func (col *UInt64) Decode(decoder *binary.Decoder, rows int) error {
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *UInt64) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.UInt64(v); err != nil {
return err
}
@@ -35,13 +35,13 @@ func (col *Float32) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 32 / 8
*col = append(*col, make([]float32, rows)...)
col.data = append(col.data, make([]float32, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -50,17 +50,17 @@ func (col *Float32) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *Float32) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 32 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -73,13 +73,13 @@ func (col *Float64) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 64 / 8
*col = append(*col, make([]float64, rows)...)
col.data = append(col.data, make([]float64, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -88,17 +88,17 @@ func (col *Float64) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *Float64) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 64 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -111,13 +111,13 @@ func (col *Int8) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 8 / 8
*col = append(*col, make([]int8, rows)...)
col.data = append(col.data, make([]int8, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -126,17 +126,17 @@ func (col *Int8) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *Int8) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 8 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -149,13 +149,13 @@ func (col *Int16) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 16 / 8
*col = append(*col, make([]int16, rows)...)
col.data = append(col.data, make([]int16, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -164,17 +164,17 @@ func (col *Int16) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *Int16) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 16 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -187,13 +187,13 @@ func (col *Int32) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 32 / 8
*col = append(*col, make([]int32, rows)...)
col.data = append(col.data, make([]int32, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -202,17 +202,17 @@ func (col *Int32) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *Int32) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 32 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -225,13 +225,13 @@ func (col *Int64) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 64 / 8
*col = append(*col, make([]int64, rows)...)
col.data = append(col.data, make([]int64, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -240,17 +240,17 @@ func (col *Int64) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *Int64) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 64 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -263,13 +263,13 @@ func (col *UInt8) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 8 / 8
*col = append(*col, make([]uint8, rows)...)
col.data = append(col.data, make([]uint8, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -278,17 +278,17 @@ func (col *UInt8) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *UInt8) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 8 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -301,13 +301,13 @@ func (col *UInt16) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 16 / 8
*col = append(*col, make([]uint16, rows)...)
col.data = append(col.data, make([]uint16, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -316,17 +316,17 @@ func (col *UInt16) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *UInt16) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 16 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -339,13 +339,13 @@ func (col *UInt32) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 32 / 8
*col = append(*col, make([]uint32, rows)...)
col.data = append(col.data, make([]uint32, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -354,17 +354,17 @@ func (col *UInt32) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *UInt32) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 32 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
@@ -377,13 +377,13 @@ func (col *UInt64) Decode(decoder *binary.Decoder, rows int) error {
}
const size = 64 / 8
*col = append(*col, make([]uint64, rows)...)
col.data = append(col.data, make([]uint64, rows)...)
var dst []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&dst))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
if err := decoder.Raw(dst); err != nil {
return err
@@ -392,17 +392,17 @@ func (col *UInt64) Decode(decoder *binary.Decoder, rows int) error {
}
func (col *UInt64) Encode(encoder *binary.Encoder) error {
if len(*col) == 0 {
if len(col.data) == 0 {
return nil
}
const size = 64 / 8
scratch := make([]byte, size*len(*col))
scratch := make([]byte, size*len(col.data))
{
var src []byte
slice := (*reflect.SliceHeader)(unsafe.Pointer(&src))
slice.Data = (*reflect.SliceHeader)(unsafe.Pointer(col)).Data
slice.Len = len(*col) * size
slice.Cap = cap(*col) * size
slice.Len = len(col.data) * size
slice.Cap = cap(col.data) * size
copy(scratch, src)
}
+25 -20
View File
@@ -32,9 +32,14 @@ var (
type Date struct {
values Int16
name string
}
func (dt *Date) Type() Type {
func (col *Date) Name() string {
return col.name
}
func (col *Date) Type() Type {
return "Date"
}
@@ -42,25 +47,25 @@ func (col *Date) ScanType() reflect.Type {
return scanTypeTime
}
func (dt *Date) Rows() int {
return len(dt.values)
func (col *Date) Rows() int {
return len(col.values.data)
}
func (dt *Date) Row(i int, ptr bool) interface{} {
value := dt.row(i)
func (col *Date) Row(i int, ptr bool) interface{} {
value := col.row(i)
if ptr {
return &value
}
return value
}
func (dt *Date) ScanRow(dest interface{}, row int) error {
func (col *Date) ScanRow(dest interface{}, row int) error {
switch d := dest.(type) {
case *time.Time:
*d = dt.row(row)
*d = col.row(row)
case **time.Time:
*d = new(time.Time)
**d = dt.row(row)
**d = col.row(row)
default:
return &ColumnConverterError{
Op: "ScanRow",
@@ -71,7 +76,7 @@ func (dt *Date) ScanRow(dest interface{}, row int) error {
return nil
}
func (dt *Date) Append(v interface{}) (nulls []uint8, err error) {
func (col *Date) Append(v interface{}) (nulls []uint8, err error) {
switch v := v.(type) {
case []time.Time:
in := make([]int16, 0, len(v))
@@ -81,7 +86,7 @@ func (dt *Date) Append(v interface{}) (nulls []uint8, err error) {
}
in = append(in, int16(t.Unix()/secInDay))
}
dt.values, nulls = append(dt.values, in...), make([]uint8, len(v))
col.values.data, nulls = append(col.values.data, in...), make([]uint8, len(v))
case []*time.Time:
nulls = make([]uint8, len(v))
for i, v := range v {
@@ -90,9 +95,9 @@ func (dt *Date) Append(v interface{}) (nulls []uint8, err error) {
if err := dateOverflow(minDate, maxDate, *v, "2006-01-02"); err != nil {
return nil, err
}
dt.values = append(dt.values, int16(v.Unix()/secInDay))
col.values.data = append(col.values.data, int16(v.Unix()/secInDay))
default:
dt.values, nulls[i] = append(dt.values, 0), 1
col.values.data, nulls[i] = append(col.values.data, 0), 1
}
}
default:
@@ -105,7 +110,7 @@ func (dt *Date) Append(v interface{}) (nulls []uint8, err error) {
return
}
func (dt *Date) AppendRow(v interface{}) error {
func (col *Date) AppendRow(v interface{}) error {
var date int16
switch v := v.(type) {
case time.Time:
@@ -128,20 +133,20 @@ func (dt *Date) AppendRow(v interface{}) error {
From: fmt.Sprintf("%T", v),
}
}
dt.values = append(dt.values, date)
col.values.data = append(col.values.data, date)
return nil
}
func (dt *Date) Decode(decoder *binary.Decoder, rows int) error {
return dt.values.Decode(decoder, rows)
func (col *Date) Decode(decoder *binary.Decoder, rows int) error {
return col.values.Decode(decoder, rows)
}
func (dt *Date) Encode(encoder *binary.Encoder) error {
return dt.values.Encode(encoder)
func (col *Date) Encode(encoder *binary.Encoder) error {
return col.values.Encode(encoder)
}
func (dt *Date) row(i int) time.Time {
return time.Unix(int64(dt.values[i])*secInDay, 0).UTC()
func (col *Date) row(i int) time.Time {
return time.Unix(int64(col.values.data[i])*secInDay, 0).UTC()
}
var _ Interface = (*Date)(nil)
+25 -20
View File
@@ -32,9 +32,14 @@ var (
type Date32 struct {
values Int32
name string
}
func (dt *Date32) Type() Type {
func (col *Date32) Name() string {
return col.name
}
func (col *Date32) Type() Type {
return "Date32"
}
@@ -42,25 +47,25 @@ func (col *Date32) ScanType() reflect.Type {
return scanTypeTime
}
func (dt *Date32) Rows() int {
return len(dt.values)
func (col *Date32) Rows() int {
return len(col.values.data)
}
func (dt *Date32) Row(i int, ptr bool) interface{} {
value := dt.row(i)
func (col *Date32) Row(i int, ptr bool) interface{} {
value := col.row(i)
if ptr {
return &value
}
return value
}
func (dt *Date32) ScanRow(dest interface{}, row int) error {
func (col *Date32) ScanRow(dest interface{}, row int) error {
switch d := dest.(type) {
case *time.Time:
*d = dt.row(row)
*d = col.row(row)
case **time.Time:
*d = new(time.Time)
**d = dt.row(row)
**d = col.row(row)
default:
return &ColumnConverterError{
Op: "ScanRow",
@@ -71,7 +76,7 @@ func (dt *Date32) ScanRow(dest interface{}, row int) error {
return nil
}
func (dt *Date32) Append(v interface{}) (nulls []uint8, err error) {
func (col *Date32) Append(v interface{}) (nulls []uint8, err error) {
switch v := v.(type) {
case []time.Time:
in := make([]int32, 0, len(v))
@@ -81,7 +86,7 @@ func (dt *Date32) Append(v interface{}) (nulls []uint8, err error) {
}
in = append(in, timeToInt32(t))
}
dt.values, nulls = append(dt.values, in...), make([]uint8, len(v))
col.values.data, nulls = append(col.values.data, in...), make([]uint8, len(v))
case []*time.Time:
nulls = make([]uint8, len(v))
for i, v := range v {
@@ -90,9 +95,9 @@ func (dt *Date32) Append(v interface{}) (nulls []uint8, err error) {
if err := dateOverflow(minDate32, maxDate32, *v, "2006-01-02"); err != nil {
return nil, err
}
dt.values = append(dt.values, timeToInt32(*v))
col.values.data = append(col.values.data, timeToInt32(*v))
default:
dt.values, nulls[i] = append(dt.values, 0), 1
col.values.data, nulls[i] = append(col.values.data, 0), 1
}
}
default:
@@ -105,7 +110,7 @@ func (dt *Date32) Append(v interface{}) (nulls []uint8, err error) {
return
}
func (dt *Date32) AppendRow(v interface{}) error {
func (col *Date32) AppendRow(v interface{}) error {
var date int32
switch v := v.(type) {
case time.Time:
@@ -128,20 +133,20 @@ func (dt *Date32) AppendRow(v interface{}) error {
From: fmt.Sprintf("%T", v),
}
}
dt.values = append(dt.values, date)
col.values.data = append(col.values.data, date)
return nil
}
func (dt *Date32) Decode(decoder *binary.Decoder, rows int) error {
return dt.values.Decode(decoder, rows)
func (col *Date32) Decode(decoder *binary.Decoder, rows int) error {
return col.values.Decode(decoder, rows)
}
func (dt *Date32) Encode(encoder *binary.Encoder) error {
return dt.values.Encode(encoder)
func (col *Date32) Encode(encoder *binary.Encoder) error {
return col.values.Encode(encoder)
}
func (dt *Date32) row(i int) time.Time {
return time.Unix((int64(dt.values[i]) * secInDay), 0).UTC()
func (col *Date32) row(i int) time.Time {
return time.Unix((int64(col.values.data[i]) * secInDay), 0).UTC()
}
func timeToInt32(t time.Time) int32 {
+33 -28
View File
@@ -36,46 +36,51 @@ type DateTime struct {
chType Type
values UInt32
timezone *time.Location
name string
}
func (dt *DateTime) parse(t Type) (_ *DateTime, err error) {
if dt.chType = t; dt.chType == "DateTime" {
return dt, nil
func (col *DateTime) Name() string {
return col.name
}
func (col *DateTime) parse(t Type) (_ *DateTime, err error) {
if col.chType = t; col.chType == "DateTime" {
return col, nil
}
var name = strings.TrimSuffix(strings.TrimPrefix(string(t), "DateTime('"), "')")
if dt.timezone, err = timezone.Load(name); err != nil {
if col.timezone, err = timezone.Load(name); err != nil {
return nil, err
}
return dt, nil
return col, nil
}
func (dt *DateTime) Type() Type {
return dt.chType
func (col *DateTime) Type() Type {
return col.chType
}
func (col *DateTime) ScanType() reflect.Type {
return scanTypeTime
}
func (dt *DateTime) Rows() int {
return len(dt.values)
func (col *DateTime) Rows() int {
return len(col.values.data)
}
func (dt *DateTime) Row(i int, ptr bool) interface{} {
value := dt.row(i)
func (col *DateTime) Row(i int, ptr bool) interface{} {
value := col.row(i)
if ptr {
return &value
}
return value
}
func (dt *DateTime) ScanRow(dest interface{}, row int) error {
func (col *DateTime) ScanRow(dest interface{}, row int) error {
switch d := dest.(type) {
case *time.Time:
*d = dt.row(row)
*d = col.row(row)
case **time.Time:
*d = new(time.Time)
**d = dt.row(row)
**d = col.row(row)
default:
return &ColumnConverterError{
Op: "ScanRow",
@@ -86,7 +91,7 @@ func (dt *DateTime) ScanRow(dest interface{}, row int) error {
return nil
}
func (dt *DateTime) Append(v interface{}) (nulls []uint8, err error) {
func (col *DateTime) Append(v interface{}) (nulls []uint8, err error) {
switch v := v.(type) {
case []time.Time:
in := make([]uint32, 0, len(v))
@@ -96,7 +101,7 @@ func (dt *DateTime) Append(v interface{}) (nulls []uint8, err error) {
}
in = append(in, uint32(t.Unix()))
}
dt.values, nulls = append(dt.values, in...), make([]uint8, len(v))
col.values.data, nulls = append(col.values.data, in...), make([]uint8, len(v))
case []*time.Time:
nulls = make([]uint8, len(v))
for i, v := range v {
@@ -105,9 +110,9 @@ func (dt *DateTime) Append(v interface{}) (nulls []uint8, err error) {
if err := dateOverflow(minDateTime, maxDateTime, *v, "2006-01-02 15:04:05"); err != nil {
return nil, err
}
dt.values = append(dt.values, uint32(v.Unix()))
col.values.data = append(col.values.data, uint32(v.Unix()))
default:
dt.values, nulls[i] = append(dt.values, 0), 1
col.values.data, nulls[i] = append(col.values.data, 0), 1
}
}
default:
@@ -120,7 +125,7 @@ func (dt *DateTime) Append(v interface{}) (nulls []uint8, err error) {
return
}
func (dt *DateTime) AppendRow(v interface{}) error {
func (col *DateTime) AppendRow(v interface{}) error {
var datetime uint32
switch v := v.(type) {
case time.Time:
@@ -143,22 +148,22 @@ func (dt *DateTime) AppendRow(v interface{}) error {
From: fmt.Sprintf("%T", v),
}
}
dt.values = append(dt.values, datetime)
col.values.data = append(col.values.data, datetime)
return nil
}
func (dt *DateTime) Decode(decoder *binary.Decoder, rows int) error {
return dt.values.Decode(decoder, rows)
func (col *DateTime) Decode(decoder *binary.Decoder, rows int) error {
return col.values.Decode(decoder, rows)
}
func (dt *DateTime) Encode(encoder *binary.Encoder) error {
return dt.values.Encode(encoder)
func (col *DateTime) Encode(encoder *binary.Encoder) error {
return col.values.Encode(encoder)
}
func (dt *DateTime) row(i int) time.Time {
v := time.Unix(int64(dt.values[i]), 0)
if dt.timezone != nil {
v = v.In(dt.timezone)
func (col *DateTime) row(i int) time.Time {
v := time.Unix(int64(col.values.data[i]), 0)
if col.timezone != nil {
v = v.In(col.timezone)
}
return v
}
+69 -38
View File
@@ -39,20 +39,25 @@ type DateTime64 struct {
values Int64
timezone *time.Location
precision int
name string
}
func (dt *DateTime64) parse(t Type) (_ Interface, err error) {
dt.chType = t
func (col *DateTime64) Name() string {
return col.name
}
func (col *DateTime64) parse(t Type) (_ Interface, err error) {
col.chType = t
switch params := strings.Split(t.params(), ","); len(params) {
case 2:
if dt.precision, err = strconv.Atoi(params[0]); err != nil {
if col.precision, err = strconv.Atoi(params[0]); err != nil {
return nil, err
}
if dt.timezone, err = timezone.Load(params[1][2 : len(params[1])-1]); err != nil {
if col.timezone, err = timezone.Load(params[1][2 : len(params[1])-1]); err != nil {
return nil, err
}
case 1:
if dt.precision, err = strconv.Atoi(params[0]); err != nil {
if col.precision, err = strconv.Atoi(params[0]); err != nil {
return nil, err
}
default:
@@ -60,36 +65,36 @@ func (dt *DateTime64) parse(t Type) (_ Interface, err error) {
t: t,
}
}
return dt, nil
return col, nil
}
func (dt *DateTime64) Type() Type {
return dt.chType
func (col *DateTime64) Type() Type {
return col.chType
}
func (col *DateTime64) ScanType() reflect.Type {
return scanTypeTime
}
func (dt *DateTime64) Rows() int {
return len(dt.values)
func (col *DateTime64) Rows() int {
return len(col.values.data)
}
func (dt *DateTime64) Row(i int, ptr bool) interface{} {
value := dt.row(i)
func (col *DateTime64) Row(i int, ptr bool) interface{} {
value := col.row(i)
if ptr {
return &value
}
return value
}
func (dt *DateTime64) ScanRow(dest interface{}, row int) error {
func (col *DateTime64) ScanRow(dest interface{}, row int) error {
switch d := dest.(type) {
case *time.Time:
*d = dt.row(row)
*d = col.row(row)
case **time.Time:
*d = new(time.Time)
**d = dt.row(row)
**d = col.row(row)
default:
return &ColumnConverterError{
Op: "ScanRow",
@@ -100,18 +105,18 @@ func (dt *DateTime64) ScanRow(dest interface{}, row int) error {
return nil
}
func (dt *DateTime64) Append(v interface{}) (nulls []uint8, err error) {
func (col *DateTime64) Append(v interface{}) (nulls []uint8, err error) {
switch v := v.(type) {
case []int64:
dt.values, nulls = append(dt.values, v...), make([]uint8, len(v))
col.values.data, nulls = append(col.values.data, v...), make([]uint8, len(v))
case []*int64:
nulls = make([]uint8, len(v))
for i, v := range v {
switch {
case v != nil:
dt.values = append(dt.values, *v)
col.values.data = append(col.values.data, *v)
default:
dt.values, nulls[i] = append(dt.values, 0), 1
col.values.data, nulls[i] = append(col.values.data, 0), 1
}
}
case []time.Time:
@@ -120,9 +125,9 @@ func (dt *DateTime64) Append(v interface{}) (nulls []uint8, err error) {
if err := dateOverflow(minDateTime64, maxDateTime64, t, "2006-01-02 15:04:05"); err != nil {
return nil, err
}
in = append(in, dt.timeToInt64(t))
in = append(in, col.timeToInt64(t))
}
dt.values, nulls = append(dt.values, in...), make([]uint8, len(v))
col.values.data, nulls = append(col.values.data, in...), make([]uint8, len(v))
case []*time.Time:
nulls = make([]uint8, len(v))
for i, v := range v {
@@ -131,11 +136,21 @@ func (dt *DateTime64) Append(v interface{}) (nulls []uint8, err error) {
if err := dateOverflow(minDateTime64, maxDateTime64, *v, "2006-01-02 15:04:05"); err != nil {
return nil, err
}
dt.values = append(dt.values, dt.timeToInt64(*v))
col.values.data = append(col.values.data, col.timeToInt64(*v))
default:
dt.values, nulls[i] = append(dt.values, 0), 1
col.values.data, nulls[i] = append(col.values.data, 0), 1
}
}
case []string:
in := make([]int64, 0, len(v))
for _, t := range v {
value, err := col.parseString(t)
if err != nil {
return nil, err
}
in = append(in, value)
}
col.values.data, nulls = append(col.values.data, in...), make([]uint8, len(v))
default:
return nil, &ColumnConverterError{
Op: "Append",
@@ -146,7 +161,7 @@ func (dt *DateTime64) Append(v interface{}) (nulls []uint8, err error) {
return
}
func (dt *DateTime64) AppendRow(v interface{}) error {
func (col *DateTime64) AppendRow(v interface{}) error {
var datetime int64
switch v := v.(type) {
case int64:
@@ -159,13 +174,19 @@ func (dt *DateTime64) AppendRow(v interface{}) error {
if err := dateOverflow(minDateTime64, maxDateTime64, v, "2006-01-02 15:04:05"); err != nil {
return err
}
datetime = dt.timeToInt64(v)
datetime = col.timeToInt64(v)
case *time.Time:
if v != nil {
if err := dateOverflow(minDateTime64, maxDateTime64, *v, "2006-01-02 15:04:05"); err != nil {
return err
}
datetime = dt.timeToInt64(*v)
datetime = col.timeToInt64(*v)
}
case string:
var err error
datetime, err = col.parseString(v)
if err != nil {
return err
}
case nil:
default:
@@ -175,40 +196,50 @@ func (dt *DateTime64) AppendRow(v interface{}) error {
From: fmt.Sprintf("%T", v),
}
}
dt.values = append(dt.values, datetime)
col.values.data = append(col.values.data, datetime)
return nil
}
func (dt *DateTime64) Decode(decoder *binary.Decoder, rows int) error {
return dt.values.Decode(decoder, rows)
func (col *DateTime64) Decode(decoder *binary.Decoder, rows int) error {
return col.values.Decode(decoder, rows)
}
func (dt *DateTime64) Encode(encoder *binary.Encoder) error {
return dt.values.Encode(encoder)
func (col *DateTime64) Encode(encoder *binary.Encoder) error {
return col.values.Encode(encoder)
}
func (dt *DateTime64) row(i int) time.Time {
func (col *DateTime64) row(i int) time.Time {
var nano int64
if dt.precision < 19 {
nano = dt.values[i] * int64(math.Pow10(9-dt.precision))
if col.precision < 19 {
nano = col.values.data[i] * int64(math.Pow10(9-col.precision))
}
var (
sec = nano / int64(10e8)
nsec = nano - sec*10e8
time = time.Unix(sec, nsec)
)
if dt.timezone != nil {
time = time.In(dt.timezone)
if col.timezone != nil {
time = time.In(col.timezone)
}
return time
}
func (dt *DateTime64) timeToInt64(t time.Time) int64 {
func (col *DateTime64) timeToInt64(t time.Time) int64 {
var timestamp int64
if !t.IsZero() {
timestamp = t.UnixNano()
}
return timestamp / int64(math.Pow10(9-dt.precision))
return timestamp / int64(math.Pow10(9-col.precision))
}
func (col *DateTime64) parseString(value string) (int64, error) {
tv, err := time.Parse("2006-01-02 15:04:05.999", value)
if err != nil {
return 0, err
}
// scale to the appropriate units based on the precision
val := tv.UnixMilli() * int64(math.Pow10(col.precision-3))
return val, nil
}
var _ Interface = (*DateTime64)(nil)
+11 -6
View File
@@ -35,6 +35,11 @@ type Decimal struct {
nobits int // its domain is {32, 64, 128, 256}
precision int
values []decimal.Decimal
name string
}
func (col *Decimal) Name() string {
return col.name
}
func (col *Decimal) parse(t Type) (_ *Decimal, err error) {
@@ -155,19 +160,19 @@ func (col *Decimal) AppendRow(v interface{}) error {
func (col *Decimal) Decode(decoder *binary.Decoder, rows int) error {
switch col.nobits {
case 32:
var base UInt32
var base Int32
if err := base.Decode(decoder, rows); err != nil {
return err
}
for _, v := range base {
for _, v := range base.data {
col.values = append(col.values, decimal.New(int64(v), int32(-col.scale)))
}
case 64:
var base UInt64
var base Int64
if err := base.Decode(decoder, rows); err != nil {
return err
}
for _, v := range base {
for _, v := range base.data {
col.values = append(col.values, decimal.New(int64(v), int32(-col.scale)))
}
case 128, 256:
@@ -202,7 +207,7 @@ func (col *Decimal) Encode(encoder *binary.Encoder) error {
default:
part = uint32(v.IntPart())
}
base = append(base, part)
base.data = append(base.data, part)
}
return base.Encode(encoder)
case 64:
@@ -215,7 +220,7 @@ func (col *Decimal) Encode(encoder *binary.Encoder) error {
default:
part = uint64(v.IntPart())
}
base = append(base, part)
base.data = append(base.data, part)
}
return base.Encode(encoder)
case 128, 256:
+3 -1
View File
@@ -24,7 +24,7 @@ import (
"strings"
)
func Enum(chType Type) (Interface, error) {
func Enum(chType Type, name string) (Interface, error) {
var (
payload string
columnType = string(chType)
@@ -76,6 +76,7 @@ func Enum(chType Type) (Interface, error) {
iv: make(map[string]uint8, len(idents)),
vi: make(map[uint8]string, len(idents)),
chType: chType,
name: name,
}
for i := range idents {
if indexes[i] > math.MaxUint8 {
@@ -93,6 +94,7 @@ func Enum(chType Type) (Interface, error) {
iv: make(map[string]uint16, len(idents)),
vi: make(map[uint16]string, len(idents)),
chType: chType,
name: name,
}
for i := range idents {
enum.iv[idents[i]] = uint16(indexes[i])
+35 -30
View File
@@ -29,35 +29,40 @@ type Enum16 struct {
vi map[uint16]string
chType Type
values UInt16
name string
}
func (e *Enum16) Type() Type {
return e.chType
func (col *Enum16) Name() string {
return col.name
}
func (col *Enum16) Type() Type {
return col.chType
}
func (col *Enum16) ScanType() reflect.Type {
return scanTypeString
}
func (e *Enum16) Rows() int {
return len(e.values)
func (col *Enum16) Rows() int {
return len(col.values.data)
}
func (e *Enum16) Row(i int, ptr bool) interface{} {
value := e.vi[e.values[i]]
func (col *Enum16) Row(i int, ptr bool) interface{} {
value := col.vi[col.values.data[i]]
if ptr {
return &value
}
return value
}
func (e *Enum16) ScanRow(dest interface{}, row int) error {
func (col *Enum16) ScanRow(dest interface{}, row int) error {
switch d := dest.(type) {
case *string:
*d = e.vi[e.values[row]]
*d = col.vi[col.values.data[row]]
case **string:
*d = new(string)
**d = e.vi[e.values[row]]
**d = col.vi[col.values.data[row]]
default:
return &ColumnConverterError{
Op: "ScanRow",
@@ -68,68 +73,68 @@ func (e *Enum16) ScanRow(dest interface{}, row int) error {
return nil
}
func (e *Enum16) Append(v interface{}) (nulls []uint8, err error) {
func (col *Enum16) Append(v interface{}) (nulls []uint8, err error) {
switch v := v.(type) {
case []string:
nulls = make([]uint8, len(v))
for _, elem := range v {
v, ok := e.iv[elem]
v, ok := col.iv[elem]
if !ok {
return nil, &Error{
Err: fmt.Errorf("unknown element %q", elem),
ColumnType: string(e.chType),
ColumnType: string(col.chType),
}
}
e.values = append(e.values, v)
col.values.data = append(col.values.data, v)
}
case []*string:
nulls = make([]uint8, len(v))
for i, elem := range v {
switch {
case elem != nil:
v, ok := e.iv[*elem]
v, ok := col.iv[*elem]
if !ok {
return nil, &Error{
Err: fmt.Errorf("unknown element %q", *elem),
ColumnType: string(e.chType),
ColumnType: string(col.chType),
}
}
e.values = append(e.values, v)
col.values.data = append(col.values.data, v)
default:
e.values, nulls[i] = append(e.values, 0), 1
col.values.data, nulls[i] = append(col.values.data, 0), 1
}
}
}
return
}
func (e *Enum16) AppendRow(elem interface{}) error {
func (col *Enum16) AppendRow(elem interface{}) error {
switch elem := elem.(type) {
case string:
v, ok := e.iv[elem]
v, ok := col.iv[elem]
if !ok {
return &Error{
Err: fmt.Errorf("unknown element %q", elem),
ColumnType: string(e.chType),
ColumnType: string(col.chType),
}
}
e.values = append(e.values, v)
col.values.data = append(col.values.data, v)
case *string:
switch {
case elem != nil:
v, ok := e.iv[*elem]
v, ok := col.iv[*elem]
if !ok {
return &Error{
Err: fmt.Errorf("unknown element %q", *elem),
ColumnType: string(e.chType),
ColumnType: string(col.chType),
}
}
e.values = append(e.values, v)
col.values.data = append(col.values.data, v)
default:
e.values = append(e.values, 0)
col.values.data = append(col.values.data, 0)
}
case nil:
e.values = append(e.values, 0)
col.values.data = append(col.values.data, 0)
default:
return &ColumnConverterError{
Op: "AppendRow",
@@ -140,12 +145,12 @@ func (e *Enum16) AppendRow(elem interface{}) error {
return nil
}
func (e *Enum16) Decode(decoder *binary.Decoder, rows int) error {
return e.values.Decode(decoder, rows)
func (col *Enum16) Decode(decoder *binary.Decoder, rows int) error {
return col.values.Decode(decoder, rows)
}
func (e *Enum16) Encode(encoder *binary.Encoder) error {
return e.values.Encode(encoder)
func (col *Enum16) Encode(encoder *binary.Encoder) error {
return col.values.Encode(encoder)
}
var _ Interface = (*Enum16)(nil)
+35 -30
View File
@@ -29,35 +29,40 @@ type Enum8 struct {
vi map[uint8]string
chType Type
values UInt8
name string
}
func (e *Enum8) Type() Type {
return e.chType
func (col *Enum8) Name() string {
return col.name
}
func (col *Enum8) Type() Type {
return col.chType
}
func (col *Enum8) ScanType() reflect.Type {
return scanTypeString
}
func (e *Enum8) Rows() int {
return len(e.values)
func (col *Enum8) Rows() int {
return len(col.values.data)
}
func (e *Enum8) Row(i int, ptr bool) interface{} {
value := e.vi[e.values[i]]
func (col *Enum8) Row(i int, ptr bool) interface{} {
value := col.vi[col.values.data[i]]
if ptr {
return &value
}
return value
}
func (e *Enum8) ScanRow(dest interface{}, row int) error {
func (col *Enum8) ScanRow(dest interface{}, row int) error {
switch d := dest.(type) {
case *string:
*d = e.vi[e.values[row]]
*d = col.vi[col.values.data[row]]
case **string:
*d = new(string)
**d = e.vi[e.values[row]]
**d = col.vi[col.values.data[row]]
default:
return &ColumnConverterError{
Op: "ScanRow",
@@ -68,35 +73,35 @@ func (e *Enum8) ScanRow(dest interface{}, row int) error {
return nil
}
func (e *Enum8) Append(v interface{}) (nulls []uint8, err error) {
func (col *Enum8) Append(v interface{}) (nulls []uint8, err error) {
switch v := v.(type) {
case []string:
nulls = make([]uint8, len(v))
for _, elem := range v {
v, ok := e.iv[elem]
v, ok := col.iv[elem]
if !ok {
return nil, &Error{
Err: fmt.Errorf("unknown element %q", elem),
ColumnType: string(e.chType),
ColumnType: string(col.chType),
}
}
e.values = append(e.values, v)
col.values.data = append(col.values.data, v)
}
case []*string:
nulls = make([]uint8, len(v))
for i, elem := range v {
switch {
case elem != nil:
v, ok := e.iv[*elem]
v, ok := col.iv[*elem]
if !ok {
return nil, &Error{
Err: fmt.Errorf("unknown element %q", *elem),
ColumnType: string(e.chType),
ColumnType: string(col.chType),
}
}
e.values = append(e.values, v)
col.values.data = append(col.values.data, v)
default:
e.values, nulls[i] = append(e.values, 0), 1
col.values.data, nulls[i] = append(col.values.data, 0), 1
}
}
default:
@@ -109,33 +114,33 @@ func (e *Enum8) Append(v interface{}) (nulls []uint8, err error) {
return
}
func (e *Enum8) AppendRow(elem interface{}) error {
func (col *Enum8) AppendRow(elem interface{}) error {
switch elem := elem.(type) {
case string:
v, ok := e.iv[elem]
v, ok := col.iv[elem]
if !ok {
return &Error{
Err: fmt.Errorf("unknown element %q", elem),
ColumnType: string(e.chType),
ColumnType: string(col.chType),
}
}
e.values = append(e.values, v)
col.values.data = append(col.values.data, v)
case *string:
switch {
case elem != nil:
v, ok := e.iv[*elem]
v, ok := col.iv[*elem]
if !ok {
return &Error{
Err: fmt.Errorf("unknown element %q", *elem),
ColumnType: string(e.chType),
ColumnType: string(col.chType),
}
}
e.values = append(e.values, v)
col.values.data = append(col.values.data, v)
default:
e.values = append(e.values, 0)
col.values.data = append(col.values.data, 0)
}
case nil:
e.values = append(e.values, 0)
col.values.data = append(col.values.data, 0)
default:
return &ColumnConverterError{
Op: "AppendRow",
@@ -146,12 +151,12 @@ func (e *Enum8) AppendRow(elem interface{}) error {
return nil
}
func (e *Enum8) Decode(decoder *binary.Decoder, rows int) error {
return e.values.Decode(decoder, rows)
func (col *Enum8) Decode(decoder *binary.Decoder, rows int) error {
return col.values.Decode(decoder, rows)
}
func (e *Enum8) Encode(encoder *binary.Encoder) error {
return e.values.Encode(encoder)
func (col *Enum8) Encode(encoder *binary.Encoder) error {
return col.values.Encode(encoder)
}
var _ Interface = (*Enum8)(nil)
@@ -28,6 +28,11 @@ import (
type FixedString struct {
data []byte
size int
name string
}
func (col *FixedString) Name() string {
return col.name
}
func (col *FixedString) parse(t Type) (*FixedString, error) {
@@ -26,7 +26,12 @@ import (
)
type MultiPolygon struct {
set *Array
set *Array
name string
}
func (col *MultiPolygon) Name() string {
return col.name
}
func (col *MultiPolygon) Type() Type {
+13 -8
View File
@@ -26,8 +26,13 @@ import (
)
type Point struct {
lon Float64
lat Float64
lon Float64
lat Float64
name string
}
func (col *Point) Name() string {
return col.name
}
func (col *Point) Type() Type {
@@ -73,8 +78,8 @@ func (col *Point) Append(v interface{}) (nulls []uint8, err error) {
case []orb.Point:
nulls = make([]uint8, len(v))
for _, v := range v {
col.lon = append(col.lon, v.Lon())
col.lat = append(col.lat, v.Lat())
col.lon.data = append(col.lon.data, v.Lon())
col.lat.data = append(col.lat.data, v.Lat())
}
default:
return nil, &ColumnConverterError{
@@ -88,8 +93,8 @@ func (col *Point) Append(v interface{}) (nulls []uint8, err error) {
func (col *Point) AppendRow(v interface{}) error {
switch v := v.(type) {
case orb.Point:
col.lon = append(col.lon, v.Lon())
col.lat = append(col.lat, v.Lat())
col.lon.data = append(col.lon.data, v.Lon())
col.lat.data = append(col.lat.data, v.Lat())
default:
return &ColumnConverterError{
Op: "AppendRow",
@@ -119,8 +124,8 @@ func (col *Point) Encode(encoder *binary.Encoder) error {
func (col *Point) row(i int) orb.Point {
return orb.Point{
col.lon[i],
col.lat[i],
col.lon.data[i],
col.lat.data[i],
}
}
+6 -1
View File
@@ -26,7 +26,12 @@ import (
)
type Polygon struct {
set *Array
set *Array
name string
}
func (col *Polygon) Name() string {
return col.name
}
func (col *Polygon) Type() Type {
+6 -1
View File
@@ -26,7 +26,12 @@ import (
)
type Ring struct {
set *Array
set *Array
name string
}
func (col *Ring) Name() string {
return col.name
}
func (col *Ring) Type() Type {
+8 -3
View File
@@ -29,6 +29,11 @@ import (
type Interval struct {
chType Type
values Int64
name string
}
func (col *Interval) Name() string {
return col.name
}
func (col *Interval) parse(t Type) (Interface, error) {
@@ -43,7 +48,7 @@ func (col *Interval) parse(t Type) (Interface, error) {
func (col *Interval) Type() Type { return col.chType }
func (col *Interval) ScanType() reflect.Type { return scanTypeString }
func (col *Interval) Rows() int { return len(col.values) }
func (col *Interval) Rows() int { return len(col.values.data) }
func (col *Interval) Row(i int, ptr bool) interface{} {
return col.row(i)
}
@@ -90,8 +95,8 @@ func (Interval) Encode(*binary.Encoder) error {
}
func (col *Interval) row(i int) string {
v := fmt.Sprintf("%d %s", col.values[i], strings.TrimPrefix(string(col.chType), "Interval"))
if col.values[i] > 1 {
v := fmt.Sprintf("%d %s", col.values.data[i], strings.TrimPrefix(string(col.chType), "Interval"))
if col.values.data[i] > 1 {
v += "s"
}
return v
+5
View File
@@ -27,6 +27,11 @@ import (
type IPv4 struct {
data []byte
name string
}
func (col *IPv4) Name() string {
return col.name
}
func (col *IPv4) Type() Type {
+11 -14
View File
@@ -27,6 +27,11 @@ import (
type IPv6 struct {
data []byte
name string
}
func (col *IPv6) Name() string {
return col.name
}
func (col *IPv6) Type() Type {
@@ -72,10 +77,7 @@ func (col *IPv6) Append(v interface{}) (nulls []uint8, err error) {
nulls = make([]uint8, len(v))
for _, v := range v {
if len(v) != net.IPv6len {
return nil, &Error{
ColumnType: string(col.Type()),
Err: fmt.Errorf("invalid size. expected %d got %d", net.IPv6len, len(v)),
}
v = v.To16()
}
col.data = append(col.data, v[:]...)
}
@@ -84,13 +86,11 @@ func (col *IPv6) Append(v interface{}) (nulls []uint8, err error) {
for i, v := range v {
switch {
case v != nil:
if len(*v) != net.IPv6len {
return nil, &Error{
ColumnType: string(col.Type()),
Err: fmt.Errorf("invalid size. expected %d got %d", net.IPv6len, len(*v)),
}
}
//copy so we don't modify original value
tmp := *v
if len(tmp) != net.IPv6len {
tmp = tmp.To16()
}
col.data = append(col.data, tmp[:]...)
default:
col.data, nulls[i] = append(col.data, make([]byte, net.IPv6len)...), 1
@@ -128,10 +128,7 @@ func (col *IPv6) AppendRow(v interface{}) error {
}
}
if len(ip) != net.IPv6len {
return &Error{
ColumnType: string(col.Type()),
Err: fmt.Errorf("invalid size. expected %d got %d", net.IPv6len, len(ip)),
}
ip = ip.To16()
}
col.data = append(col.data, ip[:]...)
return nil
+904
View File
@@ -0,0 +1,904 @@
// Licensed to ClickHouse, Inc. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. ClickHouse, Inc. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package column
import (
"fmt"
"github.com/ClickHouse/clickhouse-go/v2/lib/binary"
"reflect"
"strings"
)
// inverse mapping - go types to clickhouse types
var kindMappings = map[reflect.Kind]string{
reflect.String: "String",
reflect.Int: "Int64",
reflect.Int8: "Int8",
reflect.Int16: "Int16",
reflect.Int32: "Int32",
reflect.Int64: "Int64",
reflect.Uint: "UInt64",
reflect.Uint8: "UInt8",
reflect.Uint16: "UInt16",
reflect.Uint32: "UInt32",
reflect.Uint64: "UInt64",
reflect.Float32: "Float32",
reflect.Float64: "Float64",
reflect.Bool: "Boolean",
}
// complex types for which a mapping exists - currently we map to String but could enhance in the future for other types
var typeMappings = map[string]struct{}{
// currently JSON doesn't support DateTime, Decimal or IP so mapped to String
"time.Time": struct{}{},
"decimal.Decimal": struct{}{},
"net.IP": struct{}{},
"uuid.UUID": struct{}{},
}
type JSON interface {
Interface
appendEmptyValue() error
}
type JSONParent interface {
upsertValue(name string, ct string) (*JSONValue, error)
upsertList(name string) (*JSONList, error)
upsertObject(name string) (*JSONObject, error)
insertEmptyColumn(name string) error
columnNames() []string
rows() int
}
func parseType(name string, vType reflect.Type, values interface{}, isArray bool, jCol JSONParent, numEmpty int) error {
_, ok := typeMappings[vType.String()]
if !ok {
return &UnsupportedColumnTypeError{
t: Type(vType.String()),
}
}
ct := "String"
if isArray {
ct = fmt.Sprintf("Array(%s)", ct)
}
col, err := jCol.upsertValue(name, ct)
if err != nil {
return err
}
col.origType = vType
//pre pad with empty - e.g. for new values in maps
for i := 0; i < numEmpty; i++ {
if isArray {
// empty array for nil of the right type
err = col.AppendRow([]string{})
} else {
// empty value of the type
err = col.AppendRow(fmt.Sprint(reflect.New(vType).Elem().Interface()))
}
if err != nil {
return err
}
}
if isArray {
iValues := reflect.ValueOf(values)
sValues := make([]string, iValues.Len(), iValues.Len())
for i := 0; i < iValues.Len(); i++ {
sValues[i] = fmt.Sprint(iValues.Index(i).Interface())
}
return col.AppendRow(sValues)
}
return col.AppendRow(fmt.Sprint(values))
}
func parsePrimitive(name string, kind reflect.Kind, values interface{}, isArray bool, jCol JSONParent, numEmpty int) error {
ct, ok := kindMappings[kind]
if !ok {
return &UnsupportedColumnTypeError{
t: Type(fmt.Sprintf("%s - %s", kind, reflect.TypeOf(values).String())),
}
}
var err error
if isArray {
ct = fmt.Sprintf("Array(%s)", ct)
// if we have a []interface{} we will need to cast to the target column type - this will be based on the first
// values types. Inconsistent slices will fail.
values, err = convertSlice(values)
if err != nil {
return err
}
}
col, err := jCol.upsertValue(name, ct)
if err != nil {
return err
}
//pre pad with empty - e.g. for new values in maps
for i := 0; i < numEmpty; i++ {
if isArray {
// empty array for nil of the right type
err = col.AppendRow(reflect.MakeSlice(reflect.TypeOf(values), 0, 0).Interface())
} else {
err = col.AppendRow(nil)
}
if err != nil {
return err
}
}
return col.AppendRow(values)
}
// converts a []interface{} of primitives to a typed slice
// maybe this can be done with reflection but likely slower. investigate.
// this uses the first value to determine the type - subsequent values must currently be of the same type - we might cast later
// but wider driver doesn't support e.g. int to int64
func convertSlice(values interface{}) (interface{}, error) {
rValues := reflect.ValueOf(values)
if rValues.Len() == 0 || rValues.Index(0).Kind() != reflect.Interface {
return values, nil
}
var fType reflect.Type
for i := 0; i < rValues.Len(); i++ {
elem := rValues.Index(i).Elem()
if elem.IsValid() {
fType = elem.Type()
break
}
}
if fType == nil {
return []interface{}{}, nil
}
typedSlice := reflect.MakeSlice(reflect.SliceOf(fType), 0, rValues.Len())
for i := 0; i < rValues.Len(); i++ {
value := rValues.Index(i)
if value.IsNil() {
typedSlice = reflect.Append(typedSlice, reflect.Zero(fType))
continue
}
if rValues.Index(i).Elem().Type() != fType {
return nil, &Error{
ColumnType: fmt.Sprint(fType),
Err: fmt.Errorf("inconsistent slices are not supported - expected %s got %s", fType, rValues.Index(i).Elem().Type()),
}
}
typedSlice = reflect.Append(typedSlice, rValues.Index(i).Elem())
}
return typedSlice.Interface(), nil
}
func (jCol *JSONList) createNewOffsets(num int) {
for i := 0; i < num; i++ {
//single depth so can take 1st
if len(jCol.offsets[0].values.data) == 0 {
// first entry in the column
jCol.offsets[0].values.data = []uint64{0}
} else {
// entry for this object to see offset from last - offsets are cumulative
jCol.offsets[0].values.data = append(jCol.offsets[0].values.data, jCol.offsets[0].values.data[len(jCol.offsets[0].values.data)-1])
}
}
}
func getFieldName(field reflect.StructField) (string, bool) {
name := field.Name
jsonTag := field.Tag.Get("json")
if jsonTag == "" {
return name, false
}
// not a standard but we allow - to omit fields
if jsonTag == "-" {
return name, true
}
return jsonTag, false
}
func parseSlice(name string, values interface{}, jCol JSONParent, preFill int) error {
fType := reflect.TypeOf(values).Elem()
sKind := fType.Kind()
rValues := reflect.ValueOf(values)
if sKind == reflect.Interface {
//use the first element to determine if it is a complex or primitive map - after this we need consistent dimensions
if rValues.Len() == 0 {
return nil
}
var value reflect.Value
for i := 0; i < rValues.Len(); i++ {
value = rValues.Index(i).Elem()
if value.IsValid() {
break
}
}
if !value.IsValid() {
return nil
}
fType = value.Type()
sKind = value.Kind()
}
if _, ok := typeMappings[fType.String()]; ok {
return parseType(name, fType, values, true, jCol, preFill)
} else if sKind == reflect.Struct || sKind == reflect.Map || sKind == reflect.Slice {
if rValues.Len() == 0 {
return nil
}
col, err := jCol.upsertList(name)
if err != nil {
return err
}
col.createNewOffsets(preFill + 1)
for i := 0; i < rValues.Len(); i++ {
// increment offset
col.offsets[0].values.data[len(col.offsets[0].values.data)-1] += 1
value := rValues.Index(i)
sKind = value.Kind()
if sKind == reflect.Interface {
sKind = value.Elem().Kind()
}
switch sKind {
case reflect.Struct:
col.isNested = true
if err = iterateStruct(value, col, 0); err != nil {
return err
}
case reflect.Map:
col.isNested = true
if err = iterateMap(value, col, 0); err != nil {
return err
}
case reflect.Slice:
if err = parseSlice("", value.Interface(), col, 0); err != nil {
return err
}
default:
// only happens if slice has a primitive mixed with complex types in a []interface{}
return &Error{
ColumnType: fmt.Sprint(sKind),
Err: fmt.Errorf("slices must be same dimension in column %s", col.Name()),
}
}
}
return nil
}
return parsePrimitive(name, sKind, values, true, jCol, preFill)
}
func parseStruct(name string, structVal reflect.Value, jCol JSONParent, preFill int) error {
col, err := jCol.upsertObject(name)
if err != nil {
return err
}
return iterateStruct(structVal, col, preFill)
}
func iterateStruct(structVal reflect.Value, col JSONParent, preFill int) error {
// structs generally have consistent field counts but we ignore nil values that are interface{} as we can't infer from
// these until they occur - so we might need to either backfill when to do occur or insert empty based on previous
if structVal.Kind() == reflect.Interface {
// can happen if passed from []interface{}
structVal = structVal.Elem()
}
currentColumns := col.columnNames()
columnLookup := make(map[string]struct{})
numRows := col.rows()
for _, name := range currentColumns {
columnLookup[name] = struct{}{}
}
addedColumns := make([]string, structVal.NumField(), structVal.NumField())
newColumn := false
for i := 0; i < structVal.NumField(); i++ {
fName, omit := getFieldName(structVal.Type().Field(i))
if omit {
continue
}
field := structVal.Field(i)
if !field.CanInterface() {
// can't interface - likely not exported so ignore the field
continue
}
kind := field.Kind()
value := field.Interface()
fType := field.Type()
//resolve underlying kind
if kind == reflect.Interface {
if value == nil {
// ignore nil fields
continue
}
kind = reflect.TypeOf(value).Kind()
field = reflect.ValueOf(value)
fType = field.Type()
}
if _, ok := columnLookup[fName]; !ok && len(currentColumns) > 0 {
// new column - need to handle missing
preFill = numRows
newColumn = true
}
if _, ok := typeMappings[fType.String()]; ok {
if err := parseType(fName, fType, value, false, col, preFill); err != nil {
return err
}
} else {
switch kind {
case reflect.Slice:
if reflect.ValueOf(value).Len() == 0 {
continue
}
if err := parseSlice(fName, value, col, preFill); err != nil {
return err
}
case reflect.Struct:
if err := parseStruct(fName, field, col, preFill); err != nil {
return err
}
case reflect.Map:
if err := parseMap(fName, field, col, preFill); err != nil {
return err
}
default:
if err := parsePrimitive(fName, kind, value, false, col, preFill); err != nil {
return err
}
}
}
addedColumns[i] = fName
if newColumn {
// reset as otherwise prefill overflow to other fields. But don't reset if this prefill has come from
// a higher level
preFill = 0
}
}
// handle missing
missingColumns := difference(currentColumns, addedColumns)
for _, name := range missingColumns {
if err := col.insertEmptyColumn(name); err != nil {
return err
}
}
return nil
}
func parseMap(name string, mapVal reflect.Value, jCol JSONParent, preFill int) error {
if mapVal.Type().Key().Kind() != reflect.String {
return &Error{
ColumnType: fmt.Sprint(mapVal.Type().Key().Kind()),
Err: fmt.Errorf("map keys must be string for column %s", name),
}
}
col, err := jCol.upsertObject(name)
if err != nil {
return err
}
return iterateMap(mapVal, col, preFill)
}
func iterateMap(mapVal reflect.Value, col JSONParent, preFill int) error {
// maps can have inconsistent numbers of elements - we must ensure they are consistent in the encoding
// two inconsistent options - 1. new - map has new columns 2. massing - map has missing columns
// for (1) we need to update previous, for (2) we need to ensure we add a null entry
if mapVal.Kind() == reflect.Interface {
// can happen if passed from []interface{}
mapVal = mapVal.Elem()
}
currentColumns := col.columnNames()
//gives us a fast lookup for large maps
columnLookup := make(map[string]struct{})
numRows := col.rows()
// true if we need nil values
for _, name := range currentColumns {
columnLookup[name] = struct{}{}
}
addedColumns := make([]string, len(mapVal.MapKeys()), len(mapVal.MapKeys()))
newColumn := false
for i, key := range mapVal.MapKeys() {
name := key.Interface().(string)
if _, ok := columnLookup[name]; !ok && len(currentColumns) > 0 {
// new column - need to handle
preFill = numRows
newColumn = true
}
field := mapVal.MapIndex(key)
kind := field.Kind()
fType := field.Type()
if kind == reflect.Interface {
if field.Interface() == nil {
// ignore nil fields
continue
}
kind = reflect.TypeOf(field.Interface()).Kind()
field = reflect.ValueOf(field.Interface())
fType = field.Type()
}
if _, ok := typeMappings[fType.String()]; ok {
if err := parseType(name, fType, field.Interface(), false, col, preFill); err != nil {
return err
}
} else {
switch kind {
case reflect.Struct:
if err := parseStruct(name, field, col, preFill); err != nil {
return err
}
case reflect.Slice:
if err := parseSlice(name, field.Interface(), col, preFill); err != nil {
return err
}
case reflect.Map:
if err := parseMap(name, field, col, preFill); err != nil {
return err
}
default:
if err := parsePrimitive(name, kind, field.Interface(), false, col, preFill); err != nil {
return err
}
}
}
addedColumns[i] = name
if newColumn {
// reset as otherwise prefill overflow to other fields. But don't reset if this prefill has come from
// a higher level
preFill = 0
}
}
// handle missing
missingColumns := difference(currentColumns, addedColumns)
for _, name := range missingColumns {
if err := col.insertEmptyColumn(name); err != nil {
return err
}
}
return nil
}
func appendStructOrMap(jCol *JSONObject, data interface{}) error {
vData := reflect.ValueOf(data)
kind := vData.Kind()
if kind == reflect.Struct {
return iterateStruct(vData, jCol, 0)
}
if kind == reflect.Map {
if reflect.TypeOf(data).Key().Kind() != reflect.String {
return &Error{
ColumnType: fmt.Sprint(reflect.TypeOf(data).Key().Kind()),
Err: fmt.Errorf("map keys must be string for column %s", jCol.Name()),
}
}
return iterateMap(vData, jCol, 0)
}
return &UnsupportedColumnTypeError{
t: Type(fmt.Sprint(kind)),
}
}
type JSONValue struct {
Interface
// represents the type e.g. uuid - these may have been mapped to a Column type support by JSON e.g. String
origType reflect.Type
}
func (jCol *JSONValue) appendEmptyValue() error {
switch jCol.Interface.(type) {
case *Array:
if jCol.Rows() > 0 {
return jCol.AppendRow(reflect.MakeSlice(reflect.TypeOf(jCol.Row(0, false)), 0, 0).Interface())
}
return &Error{
ColumnType: "unknown",
Err: fmt.Errorf("can't add empty value to column %s - no entries to infer type", jCol.Name()),
}
default:
// can't just append nil here as we need a custom nil value for the type
if jCol.origType != nil {
return jCol.AppendRow(fmt.Sprint(reflect.New(jCol.origType).Elem().Interface()))
}
return jCol.AppendRow(nil)
}
}
func (jCol *JSONValue) Type() Type {
return Type(fmt.Sprintf("%s %s", jCol.Name(), jCol.Interface.Type()))
}
type JSONList struct {
Array
name string
isNested bool // indicates if this a list of objects i.e. a Nested
}
func (jCol *JSONList) Name() string {
return jCol.name
}
func (jCol *JSONList) columnNames() []string {
return jCol.Array.values.(*JSONObject).columnNames()
}
func (jCol *JSONList) rows() int {
return jCol.values.(*JSONObject).Rows()
}
func createJSONList(name string) (jCol *JSONList) {
// lists are represented as Nested which are in turn encoded as Array(Tuple()). We thus pass a Array(JSONObject())
// as this encodes like a tuple
lCol := &JSONList{
name: name,
}
lCol.values = &JSONObject{}
// depth should always be one as nested arrays aren't possible
lCol.depth = 1
lCol.scanType = reflect.SliceOf(lCol.values.ScanType())
offsetScanTypes := []reflect.Type{lCol.scanType}
lCol.offsets = []*offset{{
scanType: offsetScanTypes[0],
}}
return lCol
}
func (jCol *JSONList) appendEmptyValue() error {
// only need to bump the offsets
jCol.createNewOffsets(1)
return nil
}
func (jCol *JSONList) insertEmptyColumn(name string) error {
return jCol.values.(*JSONObject).insertEmptyColumn(name)
}
func (jCol *JSONList) upsertValue(name string, ct string) (*JSONValue, error) {
// check if column exists and reuse if same type, error if same name and different type
cols := jCol.values.(*JSONObject).columns
for i := range cols {
sCol := cols[i]
if sCol.Name() == name {
vCol, ok := cols[i].(*JSONValue)
if !ok {
sType := cols[i].Type()
return nil, &Error{
ColumnType: fmt.Sprint(sType),
Err: fmt.Errorf("type mismatch in column %s - expected value, got %s", name, sType),
}
}
tType := vCol.Interface.Type()
if tType != Type(ct) {
return nil, &Error{
ColumnType: ct,
Err: fmt.Errorf("type mismatch in column %s - expected %s, got %s", name, tType, ct),
}
}
return vCol, nil
}
}
col, err := Type(ct).Column(name)
if err != nil {
return nil, err
}
vCol := &JSONValue{
Interface: col,
}
jCol.values.(*JSONObject).columns = append(cols, vCol)
return vCol, nil
}
func (jCol *JSONList) upsertList(name string) (*JSONList, error) {
// check if column exists and reuse if same type, error if same name and different type
cols := jCol.values.(*JSONObject).columns
for i := range cols {
sCol := cols[i]
if sCol.Name() == name {
sCol, ok := cols[i].(*JSONList)
if !ok {
return nil, &Error{
ColumnType: fmt.Sprint(cols[i].Type()),
Err: fmt.Errorf("type mismatch in column %s - expected list, got %s", name, cols[i].Type()),
}
}
return sCol, nil
}
}
lCol := createJSONList(name)
jCol.values.(*JSONObject).columns = append(cols, lCol)
return lCol, nil
}
func (jCol *JSONList) upsertObject(name string) (*JSONObject, error) {
// check if column exists and reuse if same type, error if same name and different type
cols := jCol.values.(*JSONObject).columns
for i := range cols {
sCol := cols[i]
if sCol.Name() == name {
sCol, ok := cols[i].(*JSONObject)
if !ok {
sType := cols[i].Type()
return nil, &Error{
ColumnType: fmt.Sprint(sType),
Err: fmt.Errorf("type mismatch in column %s, expected object got %s", name, sType),
}
}
return sCol, nil
}
}
// lists are represented as Nested which are in turn encoded as Array(Tuple()). We thus pass a Array(JSONObject())
// as this encodes like a tuple
oCol := &JSONObject{
name: name,
}
jCol.values.(*JSONObject).columns = append(cols, oCol)
return oCol, nil
}
func (jCol *JSONList) Type() Type {
cols := jCol.values.(*JSONObject).columns
subTypes := make([]string, len(cols))
for i, v := range cols {
subTypes[i] = string(v.Type())
}
// can be a list of lists or a nested
if jCol.isNested {
return Type(fmt.Sprintf("%s Nested(%s)", jCol.name, strings.Join(subTypes, ", ")))
}
return Type(fmt.Sprintf("%s Array(%s)", jCol.name, strings.Join(subTypes, ", ")))
}
type JSONObject struct {
columns []JSON
name string
root bool
encoding uint8
}
func (jCol *JSONObject) Name() string {
return jCol.name
}
func (jCol *JSONObject) columnNames() []string {
columns := make([]string, len(jCol.columns), len(jCol.columns))
for i := range jCol.columns {
columns[i] = jCol.columns[i].Name()
}
return columns
}
func (jCol *JSONObject) rows() int {
return jCol.Rows()
}
func (jCol *JSONObject) appendEmptyValue() error {
for i := range jCol.columns {
if err := jCol.columns[i].appendEmptyValue(); err != nil {
return err
}
}
return nil
}
func (jCol *JSONObject) insertEmptyColumn(name string) error {
for i := range jCol.columns {
if jCol.columns[i].Name() == name {
if err := jCol.columns[i].appendEmptyValue(); err != nil {
return err
}
return nil
}
}
return &Error{
ColumnType: "unknown",
Err: fmt.Errorf("column %s is missing - empty value cannot be appended", name),
}
}
func (jCol *JSONObject) upsertValue(name string, ct string) (*JSONValue, error) {
for i := range jCol.columns {
sCol := jCol.columns[i]
if sCol.Name() == name {
vCol, ok := jCol.columns[i].(*JSONValue)
if !ok {
sType := jCol.columns[i].Type()
return nil, &Error{
ColumnType: fmt.Sprint(sType),
Err: fmt.Errorf("type mismatch in column %s, expected value got %s", name, sType),
}
}
if vCol.Interface.Type() != Type(ct) {
return nil, &Error{
ColumnType: ct,
Err: fmt.Errorf("type mismatch in column %s, expected %s got %s", name, vCol.Interface.Type(), ct),
}
}
return vCol, nil
}
}
col, err := Type(ct).Column(name)
if err != nil {
return nil, err
}
vCol := &JSONValue{
Interface: col,
}
jCol.columns = append(jCol.columns, vCol)
return vCol, nil
}
func (jCol *JSONObject) upsertList(name string) (*JSONList, error) {
for i := range jCol.columns {
sCol := jCol.columns[i]
if sCol.Name() == name {
sCol, ok := jCol.columns[i].(*JSONList)
if !ok {
sType := jCol.columns[i].Type()
return nil, &Error{
ColumnType: fmt.Sprint(sType),
Err: fmt.Errorf("type mismatch in column %s, expected list got %s", name, sType),
}
}
return sCol, nil
}
}
lCol := createJSONList(name)
jCol.columns = append(jCol.columns, lCol)
return lCol, nil
}
func (jCol *JSONObject) upsertObject(name string) (*JSONObject, error) {
// check if it exists
for i := range jCol.columns {
sCol := jCol.columns[i]
if sCol.Name() == name {
sCol, ok := jCol.columns[i].(*JSONObject)
if !ok {
sType := jCol.columns[i].Type()
return nil, &Error{
ColumnType: fmt.Sprint(sType),
Err: fmt.Errorf("type mismatch in column %s, expected object got %s", name, sType),
}
}
return sCol, nil
}
}
// not present so create
oCol := &JSONObject{
name: name,
}
jCol.columns = append(jCol.columns, oCol)
return oCol, nil
}
func (jCol *JSONObject) Type() Type {
if jCol.root {
return "Object('json')"
}
return jCol.FullType()
}
func (jCol *JSONObject) FullType() Type {
subTypes := make([]string, len(jCol.columns))
for i, v := range jCol.columns {
subTypes[i] = string(v.Type())
}
if jCol.root {
return Type(fmt.Sprintf("Tuple(%s)", strings.Join(subTypes, ", ")))
}
return Type(fmt.Sprintf("%s Tuple(%s)", jCol.name, strings.Join(subTypes, ", ")))
}
func (jCol *JSONObject) ScanType() reflect.Type {
return scanTypeSlice
}
func (jCol *JSONObject) Rows() int {
if len(jCol.columns) != 0 {
return jCol.columns[0].Rows()
}
return 0
}
func (jCol *JSONObject) Row(i int, ptr bool) interface{} {
panic("Not implemented")
}
func (jCol *JSONObject) ScanRow(dest interface{}, row int) error {
panic("Not implemented")
}
func (jCol *JSONObject) Append(v interface{}) (nulls []uint8, err error) {
jSlice := reflect.ValueOf(v)
if jSlice.Kind() != reflect.Slice {
return nil, &ColumnConverterError{
Op: "Append",
To: string(jCol.Type()),
From: fmt.Sprintf("slice of structs/map or strings required - received %T", v),
}
}
for i := 0; i < jSlice.Len(); i++ {
if err := jCol.AppendRow(jSlice.Index(i).Interface()); err != nil {
return nil, err
}
}
return nil, nil
}
func (jCol *JSONObject) AppendRow(v interface{}) error {
if reflect.ValueOf(v).Kind() == reflect.Struct || reflect.ValueOf(v).Kind() == reflect.Map {
if jCol.columns != nil && jCol.encoding == 1 {
return &Error{
ColumnType: fmt.Sprint(jCol.Type()),
Err: fmt.Errorf("encoding of JSON columns cannot be mixed in a batch - %s cannot be added as previously String", reflect.ValueOf(v).Kind()),
}
}
err := appendStructOrMap(jCol, v)
return err
}
switch v := v.(type) {
case string:
if jCol.columns != nil && jCol.encoding == 0 {
return &Error{
ColumnType: fmt.Sprint(jCol.Type()),
Err: fmt.Errorf("encoding of JSON columns cannot be mixed in a batch - %s cannot be added as previously Struct/Map", reflect.ValueOf(v).Kind()),
}
}
jCol.encoding = 1
if jCol.columns == nil {
jCol.columns = append(jCol.columns, &JSONValue{Interface: &String{}})
}
jCol.columns[0].AppendRow(v)
default:
return &ColumnConverterError{
Op: "AppendRow",
To: "String",
From: fmt.Sprintf("json row must be struct, map or string - received %T", v),
}
}
return nil
}
func (jCol *JSONObject) Decode(decoder *binary.Decoder, rows int) error {
panic("Not implemented")
}
func (jCol *JSONObject) Encode(encoder *binary.Encoder) error {
if jCol.root && jCol.encoding == 0 {
if err := encoder.String(string(jCol.FullType())); err != nil {
return err
}
}
for _, c := range jCol.columns {
if err := c.Encode(encoder); err != nil {
return err
}
}
return nil
}
func (jCol *JSONObject) ReadStatePrefix(decoder *binary.Decoder) error {
_, err := decoder.UInt8()
return err
}
func (jCol *JSONObject) WriteStatePrefix(encoder *binary.Encoder) error {
return encoder.UInt8(jCol.encoding)
}
var (
_ Interface = (*JSONObject)(nil)
_ CustomSerialization = (*JSONObject)(nil)
)
+11 -4
View File
@@ -35,6 +35,7 @@ const (
keyUInt32 = 2
keyUInt64 = 3
)
const (
/// Need to read dictionary if it wasn't.
needGlobalDictionaryBit = 1 << 8
@@ -66,12 +67,17 @@ type LowCardinality struct {
keys []int
index map[interface{}]int
}
name string
}
func (col *LowCardinality) Name() string {
return col.name
}
func (col *LowCardinality) parse(t Type) (_ *LowCardinality, err error) {
col.chType = t
col.append.index = make(map[interface{}]int)
if col.index, err = Type(t.params()).Column(); err != nil {
if col.index, err = Type(t.params()).Column(col.name); err != nil {
return nil, err
}
if nullable, ok := col.index.(*Nullable); ok {
@@ -201,22 +207,23 @@ func (col *LowCardinality) Encode(encoder *binary.Encoder) error {
defer func() {
col.append.keys, col.append.index = nil, nil
}()
ixLen := uint64(len(col.append.index))
switch {
case len(col.append.index) < math.MaxUint8:
case ixLen < math.MaxUint8:
col.key = keyUInt8
for _, v := range col.append.keys {
if err := col.keys8.AppendRow(uint8(v)); err != nil {
return err
}
}
case len(col.append.index) < math.MaxUint16:
case ixLen < math.MaxUint16:
col.key = keyUInt16
for _, v := range col.append.keys {
if err := col.keys16.AppendRow(uint16(v)); err != nil {
return err
}
}
case len(col.append.index) < math.MaxUint32:
case ixLen < math.MaxUint32:
col.key = keyUInt32
for _, v := range col.append.keys {
if err := col.keys32.AppendRow(uint32(v)); err != nil {
+14 -9
View File
@@ -32,15 +32,20 @@ type Map struct {
chType Type
offsets Int64
scanType reflect.Type
name string
}
func (col *Map) Name() string {
return col.name
}
func (col *Map) parse(t Type) (_ Interface, err error) {
col.chType = t
if types := strings.SplitN(t.params(), ",", 2); len(types) == 2 {
if col.keys, err = Type(strings.TrimSpace(types[0])).Column(); err != nil {
if col.keys, err = Type(strings.TrimSpace(types[0])).Column(col.name); err != nil {
return nil, err
}
if col.values, err = Type(strings.TrimSpace(types[1])).Column(); err != nil {
if col.values, err = Type(strings.TrimSpace(types[1])).Column(col.name); err != nil {
return nil, err
}
col.scanType = reflect.MapOf(
@@ -63,7 +68,7 @@ func (col *Map) ScanType() reflect.Type {
}
func (col *Map) Rows() int {
return len(col.offsets)
return len(col.offsets.data)
}
func (col *Map) Row(i int, ptr bool) interface{} {
@@ -128,10 +133,10 @@ func (col *Map) AppendRow(v interface{}) error {
}
}
var prev int64
if n := len(col.offsets); n != 0 {
prev = col.offsets[n-1]
if n := len(col.offsets.data); n != 0 {
prev = col.offsets.data[n-1]
}
col.offsets = append(col.offsets, prev+size)
col.offsets.data = append(col.offsets.data, prev+size)
return nil
}
@@ -139,7 +144,7 @@ func (col *Map) Decode(decoder *binary.Decoder, rows int) error {
if err := col.offsets.Decode(decoder, rows); err != nil {
return err
}
size := int(col.offsets[len(col.offsets)-1])
size := int(col.offsets.data[len(col.offsets.data)-1])
if err := col.keys.Decode(decoder, size); err != nil {
return err
}
@@ -190,10 +195,10 @@ func (col *Map) row(n int) reflect.Value {
value = reflect.MakeMap(col.scanType)
)
if n != 0 {
prev = col.offsets[n-1]
prev = col.offsets.data[n-1]
}
var (
size = int(col.offsets[n] - prev)
size = int(col.offsets.data[n] - prev)
from = int(prev)
)
for next := 0; next < size; next++ {
+24 -6
View File
@@ -24,18 +24,29 @@ import (
type Nested struct {
Interface
name string
}
func asDDL(cols []namedCol) string {
sCols := make([]string, len(cols), len(cols))
for i := range cols {
sCols[i] = fmt.Sprintf("%s %s", cols[i].name, cols[i].colType)
}
return strings.Join(sCols, ", ")
}
func (col *Nested) parse(t Type) (_ Interface, err error) {
columns := fmt.Sprintf("Array(Tuple(%s))", strings.Join(nestedColumns(t.params()), ", "))
if col.Interface, err = (&Array{}).parse(Type(columns)); err != nil {
columns := fmt.Sprintf("Array(Tuple(%s))", asDDL(nestedColumns(t.params())))
if col.Interface, err = (&Array{name: col.name}).parse(Type(columns)); err != nil {
return nil, err
}
return col, nil
}
func nestedColumns(raw string) (columns []string) {
//Address Nested(City String, Devices Nested(Id String)), Friend Tuple(Id Int16), Id Int16, Name String
func nestedColumns(raw string) (columns []namedCol) {
var (
nBegin int
begin int
brackets int
)
@@ -51,14 +62,21 @@ func nestedColumns(raw string) (columns []string) {
}
case ',':
if brackets == 0 {
columns, begin = append(columns, raw[begin:i]), i+1
columns, begin = append(columns, namedCol{
name: strings.TrimSpace(raw[nBegin:begin]),
colType: Type(raw[begin:i]),
}), i+1
nBegin = i + 1
continue
}
}
}
for i, column := range columns {
if strings.HasPrefix(column, "Nested(") {
columns[i] = fmt.Sprintf("Array(Tuple(%s))", strings.Join(nestedColumns(Type(column).params()), ", "))
if strings.HasPrefix(string(column.colType), "Nested(") {
columns[i] = namedCol{
colType: Type(fmt.Sprintf("Array(Tuple(%s))", asDDL(nestedColumns(column.colType.params())))),
name: column.name,
}
}
}
return
+7 -1
View File
@@ -24,7 +24,13 @@ import (
"github.com/ClickHouse/clickhouse-go/v2/lib/binary"
)
type Nothing struct{}
type Nothing struct {
name string
}
func (n Nothing) Name() string {
return n.name
}
func (Nothing) Type() Type { return "Nothing" }
func (Nothing) ScanType() reflect.Type { return reflect.TypeOf(nil) }
+12 -7
View File
@@ -28,11 +28,16 @@ type Nullable struct {
nulls UInt8
enable bool
scanType reflect.Type
name string
}
func (col *Nullable) Name() string {
return col.name
}
func (col *Nullable) parse(t Type) (_ *Nullable, err error) {
col.enable = true
if col.base, err = Type(t.params()).Column(); err != nil {
if col.base, err = Type(t.params()).Column(col.name); err != nil {
return nil, err
}
switch base := col.base.ScanType(); {
@@ -62,12 +67,12 @@ func (col *Nullable) Rows() int {
if !col.enable {
return col.base.Rows()
}
return len(col.nulls)
return len(col.nulls.data)
}
func (col *Nullable) Row(i int, ptr bool) interface{} {
if col.enable {
if col.nulls[i] == 1 {
if col.nulls.data[i] == 1 {
return nil
}
}
@@ -76,7 +81,7 @@ func (col *Nullable) Row(i int, ptr bool) interface{} {
func (col *Nullable) ScanRow(dest interface{}, row int) error {
if col.enable {
if col.nulls[row] == 1 {
if col.nulls.data[row] == 1 {
return nil
}
}
@@ -88,15 +93,15 @@ func (col *Nullable) Append(v interface{}) ([]uint8, error) {
if err != nil {
return nil, err
}
col.nulls = append(col.nulls, nulls...)
col.nulls.data = append(col.nulls.data, nulls...)
return nulls, nil
}
func (col *Nullable) AppendRow(v interface{}) error {
if v == nil || (reflect.ValueOf(v).Kind() == reflect.Ptr && reflect.ValueOf(v).IsNil()) {
col.nulls = append(col.nulls, 1)
col.nulls.data = append(col.nulls.data, 1)
} else {
col.nulls = append(col.nulls, 0)
col.nulls.data = append(col.nulls.data, 0)
}
return col.base.AppendRow(v)
}
@@ -27,12 +27,17 @@ import (
type SimpleAggregateFunction struct {
base Interface
chType Type
name string
}
func (col *SimpleAggregateFunction) Name() string {
return col.name
}
func (col *SimpleAggregateFunction) parse(t Type) (_ Interface, err error) {
col.chType = t
base := strings.TrimSpace(strings.SplitN(t.params(), ",", 2)[1])
if col.base, err = Type(base).Column(); err == nil {
if col.base, err = Type(base).Column(col.name); err == nil {
return col, nil
}
return nil, &UnsupportedColumnTypeError{
@@ -0,0 +1,33 @@
// Licensed to ClickHouse, Inc. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. ClickHouse, Inc. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
package column
// difference returns the elements in `a` that aren't in `b`.
func difference(a, b []string) []string {
mb := make(map[string]struct{}, len(b))
for _, x := range b {
mb[x] = struct{}{}
}
var diff []string
for _, x := range a {
if _, found := mb[x]; !found {
diff = append(diff, x)
}
}
return diff
}
+27 -18
View File
@@ -18,13 +18,20 @@
package column
import (
"encoding"
"fmt"
"reflect"
"github.com/ClickHouse/clickhouse-go/v2/lib/binary"
"reflect"
)
type String []string
type String struct {
name string
data []string
}
func (col String) Name() string {
return col.name
}
func (String) Type() Type {
return "String"
@@ -35,25 +42,27 @@ func (String) ScanType() reflect.Type {
}
func (col *String) Rows() int {
return len(*col)
return len(col.data)
}
func (col *String) Row(i int, ptr bool) interface{} {
value := *col
if ptr {
return &value[i]
return &value.data[i]
}
return value[i]
return value.data[i]
}
func (col *String) ScanRow(dest interface{}, row int) error {
v := *col
switch d := dest.(type) {
case *string:
*d = v[row]
*d = v.data[row]
case **string:
*d = new(string)
**d = v[row]
**d = v.data[row]
case encoding.BinaryUnmarshaler:
return d.UnmarshalBinary(binary.Str2Bytes(v.data[row]))
default:
return &ColumnConverterError{
Op: "ScanRow",
@@ -67,15 +76,15 @@ func (col *String) ScanRow(dest interface{}, row int) error {
func (col *String) Append(v interface{}) (nulls []uint8, err error) {
switch v := v.(type) {
case []string:
*col, nulls = append(*col, v...), make([]uint8, len(v))
col.data, nulls = append(col.data, v...), make([]uint8, len(v))
case []*string:
nulls = make([]uint8, len(v))
for i, v := range v {
switch {
case v != nil:
*col = append(*col, *v)
col.data = append(col.data, *v)
default:
*col, nulls[i] = append(*col, ""), 1
col.data, nulls[i] = append(col.data, ""), 1
}
}
default:
@@ -91,16 +100,16 @@ func (col *String) Append(v interface{}) (nulls []uint8, err error) {
func (col *String) AppendRow(v interface{}) error {
switch v := v.(type) {
case string:
*col = append(*col, v)
col.data = append(col.data, v)
case *string:
switch {
case v != nil:
*col = append(*col, *v)
col.data = append(col.data, *v)
default:
*col = append(*col, "")
col.data = append(col.data, "")
}
case nil:
*col = append(*col, "")
col.data = append(col.data, "")
default:
return &ColumnConverterError{
Op: "AppendRow",
@@ -112,18 +121,18 @@ func (col *String) AppendRow(v interface{}) error {
}
func (col *String) Decode(decoder *binary.Decoder, rows int) error {
for i := 0; i < int(rows); i++ {
for i := 0; i < rows; i++ {
v, err := decoder.String()
if err != nil {
return err
}
*col = append(*col, v)
col.data = append(col.data, v)
}
return nil
}
func (col *String) Encode(encoder *binary.Encoder) error {
for _, v := range *col {
for _, v := range col.data {
if err := encoder.String(v); err != nil {
return err
}
+333 -6
View File
@@ -19,8 +19,12 @@ package column
import (
"fmt"
"github.com/google/uuid"
"github.com/shopspring/decimal"
"net"
"reflect"
"strings"
"time"
"github.com/ClickHouse/clickhouse-go/v2/lib/binary"
)
@@ -28,23 +32,38 @@ import (
type Tuple struct {
chType Type
columns []Interface
name string
}
func (col *Tuple) Name() string {
return col.name
}
type namedCol struct {
name string
colType Type
}
func (col *Tuple) parse(t Type) (_ Interface, err error) {
col.chType = t
var (
element []rune
elements []string
elements []namedCol
brackets int
appendElement = func() {
if len(element) != 0 {
name := strings.TrimSpace(string(element))
if parts := strings.SplitN(name, " ", 2); len(parts) == 2 {
cType := strings.TrimSpace(string(element))
name := ""
if parts := strings.SplitN(cType, " ", 2); len(parts) == 2 {
if !strings.Contains(parts[0], "(") {
name = parts[1]
name = parts[0]
cType = parts[1]
}
}
elements = append(elements, name)
elements = append(elements, namedCol{
name: name,
colType: Type(strings.TrimSpace(cType)),
})
}
}
)
@@ -65,7 +84,7 @@ func (col *Tuple) parse(t Type) (_ Interface, err error) {
}
appendElement()
for _, ct := range elements {
column, err := Type(strings.TrimSpace(ct)).Column()
column, err := ct.colType.Column(ct.name)
if err != nil {
return nil, err
}
@@ -102,6 +121,261 @@ func (col *Tuple) Row(i int, ptr bool) interface{} {
return tuple
}
func setJSONFieldValue(field reflect.Value, value reflect.Value) error {
switch field.Interface().(type) {
case time.Time:
if value.Kind() == reflect.String {
sValue := value.Interface().(string)
val, err := time.Parse("2006-01-02 15:04:05.999999999 -0700 MST", sValue)
if err != nil {
return &Error{
ColumnType: fmt.Sprint(field.Type()),
Err: fmt.Errorf("%s cannot be parsed into a time.Time as it isn't in the default format [2006-01-02 15:04:05.999999999 -0700 MST]", sValue),
}
}
field.Set(reflect.ValueOf(val))
return nil
}
case decimal.Decimal:
if value.Kind() == reflect.String {
sValue := value.Interface().(string)
var val decimal.Decimal
if sValue == "" {
field.Set(reflect.ValueOf(val))
return nil
}
val, err := decimal.NewFromString(sValue)
if err != nil {
return &Error{
ColumnType: fmt.Sprint(field.Type()),
Err: fmt.Errorf("value %s but cannot be parsed into a decimal.Decimal - %s", sValue, err),
}
}
field.Set(reflect.ValueOf(val))
return nil
}
case net.IP:
if value.Kind() == reflect.String {
sValue := value.Interface().(string)
field.Set(reflect.ValueOf(net.ParseIP(sValue)))
return nil
}
case uuid.UUID:
if value.Kind() == reflect.String {
sValue := value.Interface().(string)
uuid, err := uuid.Parse(sValue)
if err != nil {
return &Error{
ColumnType: fmt.Sprint(field.Type()),
Err: fmt.Errorf("value %s cannot be parsed into a uuid.UUID - %s", sValue, err),
}
}
field.Set(reflect.ValueOf(uuid))
return nil
}
}
// check if our target is a string
if field.Kind() == reflect.String {
field.Set(reflect.ValueOf(fmt.Sprint(value.Interface())))
return nil
}
if value.CanConvert(field.Type()) {
field.Set(value.Convert(field.Type()))
return nil
}
return &ColumnConverterError{
Op: "ScanRow",
To: fmt.Sprintf("%T", field.Interface()),
From: value.Type().String(),
}
}
func getStructFieldValue(field reflect.Value, name string) (reflect.Value, bool) {
tField := field.Type()
for i := 0; i < tField.NumField(); i++ {
if jsonTag := tField.Field(i).Tag.Get("json"); jsonTag == name {
return field.Field(i), true
}
}
sField := field.FieldByName(name)
return sField, sField.IsValid()
}
func (col *Tuple) scanJSONMap(json reflect.Value, row int) error {
if json.Type().Key().Kind() != reflect.String {
return &Error{
ColumnType: fmt.Sprint(json.Type().Key().Kind()),
Err: fmt.Errorf("column %s - map keys must be a string", col.Name()),
}
}
for _, c := range col.columns {
switch dCol := c.(type) {
case *Tuple:
switch json.Type().Elem().Kind() {
case reflect.Struct:
rStruct := reflect.New(json.Type().Elem()).Elem()
if err := dCol.scanJSONStruct(rStruct, row); err != nil {
return err
}
json.SetMapIndex(reflect.ValueOf(c.Name()), rStruct)
case reflect.Map:
// get a typed map
newMap := reflect.MakeMap(json.Type().Elem())
if err := dCol.scanJSONMap(newMap, row); err != nil {
return err
}
json.SetMapIndex(reflect.ValueOf(c.Name()), newMap)
case reflect.Interface:
// catches interface{} - Note this swallows custom interfaces to which maps couldn't conform
newMap := reflect.ValueOf(make(map[string]interface{}))
if err := dCol.scanJSONMap(newMap, row); err != nil {
return err
}
json.SetMapIndex(reflect.ValueOf(c.Name()), newMap)
default:
return &Error{
ColumnType: fmt.Sprint(json.Type().Elem().Kind()),
Err: fmt.Errorf("column %s - needs a map/struct or interface{}", col.Name()),
}
}
case *Nested:
aCol := dCol.Interface.(*Array)
subSlice, err := aCol.parseJSONSliceOfObjects(json.Type().Elem(), row)
if err != nil {
return err
}
// this wont work if json is a map[string][]interface{} and we try to set a typed slice
json.SetMapIndex(reflect.ValueOf(c.Name()), subSlice)
case *Array:
switch dCol.values.(type) {
case *Tuple:
// eqv. of nested
subSlice, err := dCol.parseJSONSliceOfObjects(json.Type().Elem(), row)
if err != nil {
return err
}
json.SetMapIndex(reflect.ValueOf(c.Name()), subSlice)
default:
// this will include nested Arrays which if primitive types can be nested deep
switch json.Type().Elem().Kind() {
case reflect.Slice:
subSlice, err := dCol.scanJSONSlice(json.Type().Elem(), row, 0)
if err != nil {
return err
}
json.SetMapIndex(reflect.ValueOf(c.Name()), subSlice)
case reflect.Interface:
// we assume interface{} - any other custom interfaces will fail
field := reflect.New(reflect.TypeOf(c.Row(0, false))).Elem()
value := reflect.ValueOf(c.Row(row, false))
if err := setJSONFieldValue(field, value); err != nil {
return err
}
json.SetMapIndex(reflect.ValueOf(c.Name()), field)
default:
return &Error{
ColumnType: fmt.Sprint(json.Type().Elem().Kind()),
Err: fmt.Errorf("column %s - needs a slice or interface{}", col.Name()),
}
}
}
default:
field := reflect.New(reflect.TypeOf(c.Row(0, false))).Elem()
value := reflect.ValueOf(c.Row(row, false))
if err := setJSONFieldValue(field, value); err != nil {
return err
}
json.SetMapIndex(reflect.ValueOf(c.Name()), field)
}
}
return nil
}
func (col *Tuple) scanJSONStruct(json reflect.Value, row int) error {
for _, c := range col.columns {
// the column may be serialized using a different name due to a struct "json" tag
sField, ok := getStructFieldValue(json, c.Name())
// test if map
if !ok {
continue
}
switch dCol := c.(type) {
case *Tuple:
switch sField.Kind() {
case reflect.Struct:
if err := dCol.scanJSONStruct(sField, row); err != nil {
return err
}
case reflect.Map:
newMap := reflect.MakeMap(sField.Type())
if err := dCol.scanJSONMap(newMap, row); err != nil {
return err
}
sField.Set(newMap)
case reflect.Interface:
// catches []interface{} -Note this swallows custom interfaces to which maps couldn't conform
newMap := reflect.ValueOf(make(map[string]interface{}))
if err := dCol.scanJSONMap(newMap, row); err != nil {
return err
}
sField.Set(newMap)
default:
return &Error{
ColumnType: fmt.Sprint(sField.Kind()),
Err: fmt.Errorf("column %s - needs a map/struct or interface{}", col.Name()),
}
}
case *Nested:
aCol := dCol.Interface.(*Array)
subSlice, err := aCol.parseJSONSliceOfObjects(sField.Type(), row)
if err != nil {
return err
}
sField.Set(subSlice)
case *Array:
switch dCol.values.(type) {
case *Tuple:
//eqv of nested
subSlice, err := dCol.parseJSONSliceOfObjects(sField.Type(), row)
if err != nil {
return err
}
sField.Set(subSlice)
default:
// slice of primitives
switch sField.Kind() {
case reflect.Slice:
subSlice, err := dCol.scanJSONSlice(sField.Type(), row, 0)
if err != nil {
return err
}
sField.Set(subSlice)
case reflect.Interface:
value := reflect.ValueOf(c.Row(row, false))
if err := setJSONFieldValue(sField, value); err != nil {
return err
}
default:
return &Error{
ColumnType: fmt.Sprint(json.Type().Elem().Kind()),
Err: fmt.Errorf("column %s - needs a slice or interface{}", col.Name()),
}
}
}
default:
value := reflect.ValueOf(c.Row(row, false))
if err := setJSONFieldValue(sField, value); err != nil {
return err
}
}
}
return nil
}
func (col *Tuple) ScanRow(dest interface{}, row int) error {
switch d := dest.(type) {
case *[]interface{}:
@@ -111,6 +385,31 @@ func (col *Tuple) ScanRow(dest interface{}, row int) error {
}
*d = tuple
default:
jType := reflect.Indirect(reflect.ValueOf(dest))
kind := jType.Kind()
if kind == reflect.Struct {
rStruct := reflect.New(jType.Type()).Elem()
err := col.scanJSONStruct(rStruct, row)
if err != nil {
return err
}
jType.Set(rStruct)
return nil
}
if kind == reflect.Map {
//check if pointer
mapVal := reflect.Indirect(reflect.ValueOf(dest))
if mapVal.IsNil() {
//if not initialized
newMap := reflect.MakeMap(mapVal.Type())
if err := col.scanJSONMap(newMap, row); err != nil {
return err
}
mapVal.Set(newMap)
return nil
}
return col.scanJSONMap(mapVal, row)
}
return &ColumnConverterError{
Op: "ScanRow",
To: fmt.Sprintf("%T", dest),
@@ -129,6 +428,13 @@ func (col *Tuple) Append(v interface{}) (nulls []uint8, err error) {
}
}
return nil, nil
case []*[]interface{}:
for _, v := range v {
if err := col.AppendRow(v); err != nil {
return nil, err
}
}
return nil, nil
}
return nil, &ColumnConverterError{
Op: "Append",
@@ -152,6 +458,27 @@ func (col *Tuple) AppendRow(v interface{}) error {
}
}
return nil
case *[]interface{}:
if v == nil {
return &ColumnConverterError{
Op: "AppendRow",
To: string(col.chType),
From: fmt.Sprintf("%T", v),
Hint: "invalid (nil) pointer value",
}
}
if len(*v) != len(col.columns) {
return &Error{
ColumnType: string(col.chType),
Err: fmt.Errorf("invalid size. expected %d got %d", len(col.columns), len(*v)),
}
}
for i, v := range *v {
if err := col.columns[i].AppendRow(v); err != nil {
return err
}
}
return nil
}
return &ColumnConverterError{
Op: "AppendRow",
+5
View File
@@ -29,6 +29,11 @@ const uuidSize = 16
type UUID struct {
data []byte
name string
}
func (col *UUID) Name() string {
return col.name
}
func (col *UUID) Type() Type {
+7 -7
View File
@@ -39,7 +39,7 @@ func (b *Block) Rows() int {
}
func (b *Block) AddColumn(name string, ct column.Type) error {
column, err := ct.Column()
column, err := ct.Column(name)
if err != nil {
return err
}
@@ -60,7 +60,7 @@ func (b *Block) Append(v ...interface{}) (err error) {
return &BlockError{
Op: "AppendRow",
Err: err,
ColumnName: b.names[i],
ColumnName: columns[i].Name(),
}
}
}
@@ -95,8 +95,8 @@ func (b *Block) Encode(encoder *binary.Encoder, revision uint64) error {
if err := encoder.Uvarint(uint64(rows)); err != nil {
return err
}
for i, c := range b.Columns {
if err := encoder.String(b.names[i]); err != nil {
for _, c := range b.Columns {
if err := encoder.String(c.Name()); err != nil {
return err
}
if err := encoder.String(string(c.Type())); err != nil {
@@ -107,7 +107,7 @@ func (b *Block) Encode(encoder *binary.Encoder, revision uint64) error {
return &BlockError{
Op: "Encode",
Err: err,
ColumnName: b.names[i],
ColumnName: c.Name(),
}
}
}
@@ -115,7 +115,7 @@ func (b *Block) Encode(encoder *binary.Encoder, revision uint64) error {
return &BlockError{
Op: "Encode",
Err: err,
ColumnName: b.names[i],
ColumnName: c.Name(),
}
}
}
@@ -156,7 +156,7 @@ func (b *Block) Decode(decoder *binary.Decoder, revision uint64) (err error) {
if columnType, err = decoder.String(); err != nil {
return err
}
c, err := column.Type(columnType).Column()
c, err := column.Type(columnType).Column(columnName)
if err != nil {
return err
}
+10
View File
@@ -18,6 +18,7 @@
package proto
import (
stdbin "encoding/binary"
"fmt"
"os"
@@ -65,6 +66,13 @@ func (q *Query) Encode(encoder *binary.Encoder, revision uint64) error {
return encoder.String(q.Body)
}
func swap64(b []byte) {
for i := 0; i < len(b); i += 8 {
u := stdbin.BigEndian.Uint64(b[i:])
stdbin.LittleEndian.PutUint64(b[i:], u)
}
}
func (q *Query) encodeClientInfo(encoder *binary.Encoder, revision uint64) error {
encoder.Byte(ClientQueryInitial)
encoder.String(q.InitialUser) // initial_user
@@ -97,10 +105,12 @@ func (q *Query) encodeClientInfo(encoder *binary.Encoder, revision uint64) error
encoder.Byte(1)
{
v := q.Span.TraceID()
swap64(v[:]) // https://github.com/ClickHouse/ClickHouse/issues/34369
encoder.Raw(v[:])
}
{
v := q.Span.SpanID()
swap64(v[:]) // https://github.com/ClickHouse/ClickHouse/issues/34369
encoder.Raw(v[:])
}
encoder.String(q.Span.TraceState().String())
+8 -8
View File
@@ -20,17 +20,15 @@ package clickhouse
import (
"fmt"
"reflect"
"sync"
)
type structMap struct {
cache map[reflect.Type]map[string][]int
cache sync.Map
}
func (m *structMap) Map(op string, columns []string, s interface{}, ptr bool) ([]interface{}, error) {
var (
v = reflect.ValueOf(s)
t = reflect.TypeOf(s)
)
v := reflect.ValueOf(s)
if v.Kind() != reflect.Ptr {
return nil, &OpError{
Op: op,
@@ -43,6 +41,7 @@ func (m *structMap) Map(op string, columns []string, s interface{}, ptr bool) ([
Err: fmt.Errorf("nil pointer passed to %s destination", op),
}
}
t := reflect.TypeOf(s)
if v = reflect.Indirect(v); t.Kind() == reflect.Ptr {
t = t.Elem()
}
@@ -52,17 +51,18 @@ func (m *structMap) Map(op string, columns []string, s interface{}, ptr bool) ([
Err: fmt.Errorf("%s expects a struct dest", op),
}
}
var (
index map[string][]int
values = make([]interface{}, 0, len(columns))
)
switch idx, found := m.cache[t]; {
switch idx, found := m.cache.Load(t); {
case found:
index = idx
index = idx.(map[string][]int)
default:
index = structIdx(t)
m.cache[t] = index
m.cache.Store(t, index)
}
for _, name := range columns {
idx, found := index[name]
-5
View File
@@ -1,5 +0,0 @@
module github.com/LeeEirc/terminalparser
go 1.15
require github.com/mattn/go-runewidth v0.0.9
-2
View File
@@ -1,2 +0,0 @@
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-5
View File
@@ -1,5 +0,0 @@
module github.com/StackExchange/wmi
go 1.13
require github.com/go-ole/go-ole v1.2.5
-4
View File
@@ -1,4 +0,0 @@
github.com/go-ole/go-ole v1.2.5 h1:t4MGB5xEDZvXI+0rMjjsfBsD7yAgp/s9ZDkL1JndXwY=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3 h1:7TYNF4UdlohbFwpNH04CoPMp1cHUZgO1Ebq5r2hIjfo=
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-17
View File
@@ -1,17 +0,0 @@
module github.com/anacrolix/dht
require (
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa
github.com/anacrolix/missinggo v0.0.0-20181129073415-3237bf955fed
github.com/anacrolix/sync v0.0.0-20180611022320-3c4cb11f5a01
github.com/anacrolix/tagflag v0.0.0-20180605133421-f477c8c2f14c
github.com/anacrolix/torrent v0.0.0-20180622074351-fefeef4ee9eb
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2
github.com/davecgh/go-spew v1.1.0
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712
github.com/pmezard/go-difflib v1.0.0
github.com/stretchr/testify v1.2.1
github.com/willf/bloom v0.0.0-20170505221640-54e3b963ee16
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2
)
-63
View File
@@ -1,63 +0,0 @@
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/anacrolix/dht v0.0.0-20180412060941-24cbf25b72a4/go.mod h1:hQfX2BrtuQsLQMYQwsypFAab/GvHg8qxwVi4OJdR1WI=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa h1:xCaATLKmn39QqLs3tUZYr6eKvezJV+FYvVOLTklxK6U=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/go-libutp v0.0.0-20180522111405-6baeb806518d/go.mod h1:beQSaSxwH2d9Eeu5ijrEnHei5Qhk+J6cDm1QkWFru4E=
github.com/anacrolix/log v0.0.0-20180412014343-2323884b361d/go.mod h1:sf/7c2aTldL6sRQj/4UKyjgVZBu2+M2z9wf7MmwPiew=
github.com/anacrolix/missinggo v0.0.0-20180522035225-b4a5853e62ff/go.mod h1:b0p+7cn+rWMIphK1gDH2hrDuwGOcbB6V4VXeSsEfHVk=
github.com/anacrolix/missinggo v0.0.0-20180621131740-7fc7cfea16ea h1:zgemcMeWIWXhwvxFSqVZzW695Q0erYNkfM1X3lZf/8w=
github.com/anacrolix/missinggo v0.0.0-20180621131740-7fc7cfea16ea/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
github.com/anacrolix/missinggo v0.0.0-20181127122118-423a489232d8 h1:+iN/E5Xqa050woSEdXnUBWwO+iW98v0/zNHFM5KN7Fc=
github.com/anacrolix/missinggo v0.0.0-20181127122118-423a489232d8/go.mod h1:IN+9GUe7OxKMIs/XeXEbT/rMUolmJzmlZiXHS7FwD/Y=
github.com/anacrolix/missinggo v0.0.0-20181129073415-3237bf955fed h1:pMzstxgUXooGmNxZnjFSsnjtFd7s81sNI7L2pzEuWWs=
github.com/anacrolix/missinggo v0.0.0-20181129073415-3237bf955fed/go.mod h1:IN+9GUe7OxKMIs/XeXEbT/rMUolmJzmlZiXHS7FwD/Y=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw=
github.com/anacrolix/sync v0.0.0-20171108081538-eee974e4f8c1/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/sync v0.0.0-20180611022320-3c4cb11f5a01 h1:14t4kCoWXaUXrHErRD0bLMNolOE50nyPA0gO8+J3hP8=
github.com/anacrolix/sync v0.0.0-20180611022320-3c4cb11f5a01/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v0.0.0-20180605133421-f477c8c2f14c h1:kBea2eTysvA8qHScuAufErjwV6/wwqoOe03h7W9d1h0=
github.com/anacrolix/tagflag v0.0.0-20180605133421-f477c8c2f14c/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/torrent v0.0.0-20180622074351-fefeef4ee9eb h1:XTz2SGqfyyk/fvDYPZe3VaZqAH4heDTMz5WQmBm6F5w=
github.com/anacrolix/torrent v0.0.0-20180622074351-fefeef4ee9eb/go.mod h1:3vcFVxgOASslNXHdivT8spyMRBanMCenHRpe0u5vpBs=
github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2 h1:1B/+1BcRhOMG1KH/YhNIU8OppSWk5d/NGyfRla88CuY=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e h1:Fw7ZmgiklsLh5EQWyHh1sumKSCG1+yjEctIpGKib87s=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712 h1:aaQcKT9WumO6JEJcRyTqFVq4XUZiUcKR2/GI31TOcz8=
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a h1:ZJu5NB1Bk5ms4vw0Xu4i+jD32SE9jQXyfnOvwhHqlT0=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd/go.mod h1:qkLSc0A5EXSP6B04TrN4oQoxqFI7A8XvoXSlJi8cwk8=
github.com/gosuri/uiprogress v0.0.0-20170224063937-d0567a9d84a1/go.mod h1:C1RTYn4Sc7iEyf6j8ft5dyoZ4212h8G1ol9QQluh5+0=
github.com/huandu/xstrings v1.0.0 h1:pO2K/gKgKaat5LdpAhxhluX2GPQMaI3W5FUz/I/UnWk=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/mattn/go-sqlite3 v1.7.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/stretchr/testify v1.2.1 h1:52QO5WkIUcHGIR7EnGagH88x1bUzqGXTC5/1bDTUQ7U=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/syncthing/syncthing v0.14.48-rc.4/go.mod h1:nw3siZwHPA6M8iSfjDCWQ402eqvEIasMQOE8nFOxy7M=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/willf/bitset v1.1.3 h1:ekJIKh6+YbUIVt9DfNbkR5d6aFcFTLDRyJNAACURBg8=
github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bloom v0.0.0-20170505221640-54e3b963ee16 h1:hDGatoumfYOxzIZGsSylJuxTzu9k86BJl8OQhm72anI=
github.com/willf/bloom v0.0.0-20170505221640-54e3b963ee16/go.mod h1:MmAltL9pDMNTrvUkxdg0k0q5I0suxmuwp3KbyrZLOZ8=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2 h1:+DCIGbF/swA92ohVg0//6X2IVY3KZs6p9mix0ziNYJM=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-16
View File
@@ -1,16 +0,0 @@
module github.com/anacrolix/go-libutp
require (
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb
github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2
github.com/davecgh/go-spew v1.1.0 // indirect
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e
github.com/huandu/xstrings v1.0.0
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/stretchr/testify v1.2.1
golang.org/x/net v0.0.0-20180524181706-dfa909b99c79
)
-36
View File
@@ -1,36 +0,0 @@
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa h1:xCaATLKmn39QqLs3tUZYr6eKvezJV+FYvVOLTklxK6U=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/missinggo v0.0.0-20180522035225-b4a5853e62ff h1:c2Hrwd+LaVrsLJQ5nV8dAP4z6iM0G6aewsbrj3x515s=
github.com/anacrolix/missinggo v0.0.0-20180522035225-b4a5853e62ff/go.mod h1:b0p+7cn+rWMIphK1gDH2hrDuwGOcbB6V4VXeSsEfHVk=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df h1:+se8qhX5ivmSCkP+gZXyFx2ETjk1pmnrYJ0Iyc+hZKY=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb h1:2Or5ccMoY4Kfao+WdL2w6tpY6ZEe+2VTVbIPd7A/Ajk=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw=
github.com/anacrolix/sync v0.0.0-20180725074606-fda11526ff08 h1:w0QQ3EPXGMOFLBRvBk7vCeNkfreNQ5xhTzUIDIEdNm0=
github.com/anacrolix/sync v0.0.0-20180725074606-fda11526ff08/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778 h1:XpCDEixzXOB8yaTW/4YBzKrJdMcFI0DzpPTYNv75wzk=
github.com/anacrolix/sync v0.0.0-20180808010631-44578de4e778/go.mod h1:s735Etp3joe/voe2sdaXLcqDdJSay1O0OPnM0ystjqk=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0 h1:xcd2GmlPWBsGNjdbwriHXvJJtagl1AnbjTPhJTksJDQ=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2 h1:1B/+1BcRhOMG1KH/YhNIU8OppSWk5d/NGyfRla88CuY=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e h1:Fw7ZmgiklsLh5EQWyHh1sumKSCG1+yjEctIpGKib87s=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/huandu/xstrings v1.0.0 h1:pO2K/gKgKaat5LdpAhxhluX2GPQMaI3W5FUz/I/UnWk=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/stretchr/testify v1.2.1 h1:52QO5WkIUcHGIR7EnGagH88x1bUzqGXTC5/1bDTUQ7U=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
golang.org/x/net v0.0.0-20180524181706-dfa909b99c79 h1:1FDlG4HI84rVePw1/0E/crL5tt2N+1blLJpY6UZ6krs=
golang.org/x/net v0.0.0-20180524181706-dfa909b99c79/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-1
View File
@@ -1 +0,0 @@
module github.com/anacrolix/log
-20
View File
@@ -1,20 +0,0 @@
module github.com/anacrolix/missinggo
require (
github.com/RoaringBitmap/roaring v0.4.7
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2
github.com/davecgh/go-spew v1.1.0 // indirect
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a
github.com/huandu/xstrings v1.0.0
github.com/philhofer/fwd v1.0.0
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46
github.com/stretchr/testify v1.2.1
github.com/tinylib/msgp v1.0.2
)
-32
View File
@@ -1,32 +0,0 @@
github.com/RoaringBitmap/roaring v0.4.7 h1:eGUudvFzvF7Kxh7JjYvXfI1f7l22/2duFby7r5+d4oc=
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa h1:xCaATLKmn39QqLs3tUZYr6eKvezJV+FYvVOLTklxK6U=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0 h1:xcd2GmlPWBsGNjdbwriHXvJJtagl1AnbjTPhJTksJDQ=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2 h1:1B/+1BcRhOMG1KH/YhNIU8OppSWk5d/NGyfRla88CuY=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e h1:Fw7ZmgiklsLh5EQWyHh1sumKSCG1+yjEctIpGKib87s=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd h1:r04MMPyLHj/QwZuMJ5+7tJcBr1AQjpiAK/rZWRrQT7o=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a h1:ZJu5NB1Bk5ms4vw0Xu4i+jD32SE9jQXyfnOvwhHqlT0=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/huandu/xstrings v1.0.0 h1:pO2K/gKgKaat5LdpAhxhluX2GPQMaI3W5FUz/I/UnWk=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/stretchr/testify v1.2.1 h1:52QO5WkIUcHGIR7EnGagH88x1bUzqGXTC5/1bDTUQ7U=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/tinylib/msgp v1.0.2 h1:DfdQrzQa7Yh2es9SuLkixqxuXS2SxsdYn0KbdrOGWD8=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
-8
View File
@@ -1,8 +0,0 @@
module github.com/anacrolix/mmsg
require (
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df
github.com/davecgh/go-spew v1.1.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/stretchr/testify v1.2.2
)
-24
View File
@@ -1,24 +0,0 @@
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df h1:+se8qhX5ivmSCkP+gZXyFx2ETjk1pmnrYJ0Iyc+hZKY=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2 h1:1B/+1BcRhOMG1KH/YhNIU8OppSWk5d/NGyfRla88CuY=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/huandu/xstrings v1.0.0 h1:pO2K/gKgKaat5LdpAhxhluX2GPQMaI3W5FUz/I/UnWk=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
-3
View File
@@ -1,3 +0,0 @@
module github.com/anacrolix/sync
require github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df
-17
View File
@@ -1,17 +0,0 @@
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df h1:+se8qhX5ivmSCkP+gZXyFx2ETjk1pmnrYJ0Iyc+hZKY=
github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/huandu/xstrings v1.0.0 h1:pO2K/gKgKaat5LdpAhxhluX2GPQMaI3W5FUz/I/UnWk=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
-40
View File
@@ -1,40 +0,0 @@
module github.com/anacrolix/torrent
require (
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669
github.com/anacrolix/dht v0.0.0-20181127122252-acaa69c368bb
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa
github.com/anacrolix/go-libutp v0.0.0-20180725071407-34b43d880940
github.com/anacrolix/log v0.0.0-20180412014343-2323884b361d
github.com/anacrolix/missinggo v0.0.0-20181127231911-72d14a94053a
github.com/anacrolix/sync v0.0.0-20180725074606-fda11526ff08
github.com/anacrolix/tagflag v0.0.0-20180605133421-f477c8c2f14c
github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572
github.com/boltdb/bolt v1.3.1
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2
github.com/davecgh/go-spew v1.1.0
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712
github.com/elgatito/upnp v0.0.0-20180711183757-2f244d205f9a
github.com/fsnotify/fsnotify v1.4.7
github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493 // indirect
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f // indirect
github.com/gosuri/uiprogress v0.0.0-20170224063937-d0567a9d84a1
github.com/jessevdk/go-flags v1.4.0
github.com/jtolds/gls v4.2.1+incompatible // indirect
github.com/mattn/go-isatty v0.0.3 // indirect
github.com/mattn/go-sqlite3 v1.7.0
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae // indirect
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 // indirect
github.com/pkg/errors v0.8.0
github.com/smartystreets/assertions v0.0.0-20180607162144-eb5b59917fa2 // indirect
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a // indirect
github.com/smartystreets/gunit v0.0.0-20180314194857-6f0d6275bdcd // indirect
github.com/stretchr/testify v1.2.1
github.com/willf/bitset v1.1.9 // indirect
github.com/willf/bloom v2.0.3+incompatible // indirect
golang.org/x/net v0.0.0-20180724234803-3673e40ba225
golang.org/x/sys v0.0.0-20180724212812-e072cadbbdc8 // indirect
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2
)
-114
View File
@@ -1,114 +0,0 @@
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669 h1:FNCRpXiquG1aoyqcIWVFmpTSKVcx2bQD38uZZeGtdlw=
bazil.org/fuse v0.0.0-20180421153158-65cc252bf669/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
github.com/RoaringBitmap/roaring v0.4.7 h1:eGUudvFzvF7Kxh7JjYvXfI1f7l22/2duFby7r5+d4oc=
github.com/RoaringBitmap/roaring v0.4.7/go.mod h1:8khRDP4HmeXns4xIj9oGrKSz7XTQiJx2zgh7AcNke4w=
github.com/anacrolix/dht v0.0.0-20180412060941-24cbf25b72a4 h1:0yHJvFiGQhJ1gSHJOR8xzmnx45orEt7uiIB6guf0+zc=
github.com/anacrolix/dht v0.0.0-20180412060941-24cbf25b72a4/go.mod h1:hQfX2BrtuQsLQMYQwsypFAab/GvHg8qxwVi4OJdR1WI=
github.com/anacrolix/dht v0.0.0-20181127122252-acaa69c368bb h1:XgF37lxo6RjJOKaW3X4Q0n7qAIonVruzv4dGyJcYj+M=
github.com/anacrolix/dht v0.0.0-20181127122252-acaa69c368bb/go.mod h1:Z/mP+H70xwnUv957UXVkTrzYRhKs0mGjS0lyqS331g4=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa h1:xCaATLKmn39QqLs3tUZYr6eKvezJV+FYvVOLTklxK6U=
github.com/anacrolix/envpprof v0.0.0-20180404065416-323002cec2fa/go.mod h1:KgHhUaQMc8cC0+cEflSgCFNFbKwi5h54gqtVn8yhP7c=
github.com/anacrolix/go-libutp v0.0.0-20180522111405-6baeb806518d/go.mod h1:beQSaSxwH2d9Eeu5ijrEnHei5Qhk+J6cDm1QkWFru4E=
github.com/anacrolix/go-libutp v0.0.0-20180725071407-34b43d880940 h1:DqXNdusAzE2LQlEFqjPe7SM1e+MIrfIxgoe0aUEoFBc=
github.com/anacrolix/go-libutp v0.0.0-20180725071407-34b43d880940/go.mod h1:szRMvnqPPC0VKbIRVoImO5gjJj8OZCYdixSrDEo1TzM=
github.com/anacrolix/log v0.0.0-20180412014343-2323884b361d h1:G8ITVMWuQL4adKRC3A6aBOo0YFJYcmpS3JFQd+rZrn0=
github.com/anacrolix/log v0.0.0-20180412014343-2323884b361d/go.mod h1:sf/7c2aTldL6sRQj/4UKyjgVZBu2+M2z9wf7MmwPiew=
github.com/anacrolix/missinggo v0.0.0-20180522035225-b4a5853e62ff/go.mod h1:b0p+7cn+rWMIphK1gDH2hrDuwGOcbB6V4VXeSsEfHVk=
github.com/anacrolix/missinggo v0.0.0-20180621131740-7fc7cfea16ea/go.mod h1:kwGiTUTZ0+p4vAz3VbAI5a30t2YbvemcmspjKwrAz5s=
github.com/anacrolix/missinggo v0.0.0-20181127122118-423a489232d8 h1:+iN/E5Xqa050woSEdXnUBWwO+iW98v0/zNHFM5KN7Fc=
github.com/anacrolix/missinggo v0.0.0-20181127122118-423a489232d8/go.mod h1:IN+9GUe7OxKMIs/XeXEbT/rMUolmJzmlZiXHS7FwD/Y=
github.com/anacrolix/missinggo v0.0.0-20181127231911-72d14a94053a h1:pX9q06ifav/vlEKLl42kM7izEAxe+EO6/wUIeLoV3wE=
github.com/anacrolix/missinggo v0.0.0-20181127231911-72d14a94053a/go.mod h1:IN+9GUe7OxKMIs/XeXEbT/rMUolmJzmlZiXHS7FwD/Y=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb h1:2Or5ccMoY4Kfao+WdL2w6tpY6ZEe+2VTVbIPd7A/Ajk=
github.com/anacrolix/mmsg v0.0.0-20180515031531-a4a3ba1fc8bb/go.mod h1:x2/ErsYUmT77kezS63+wzZp8E3byYB0gzirM/WMBLfw=
github.com/anacrolix/sync v0.0.0-20171108081538-eee974e4f8c1/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/sync v0.0.0-20180611022320-3c4cb11f5a01/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/sync v0.0.0-20180725074606-fda11526ff08 h1:w0QQ3EPXGMOFLBRvBk7vCeNkfreNQ5xhTzUIDIEdNm0=
github.com/anacrolix/sync v0.0.0-20180725074606-fda11526ff08/go.mod h1:+u91KiUuf0lyILI6x3n/XrW7iFROCZCG+TjgK8nW52w=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0 h1:xcd2GmlPWBsGNjdbwriHXvJJtagl1AnbjTPhJTksJDQ=
github.com/anacrolix/tagflag v0.0.0-20180109131632-2146c8d41bf0/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/tagflag v0.0.0-20180605133421-f477c8c2f14c h1:kBea2eTysvA8qHScuAufErjwV6/wwqoOe03h7W9d1h0=
github.com/anacrolix/tagflag v0.0.0-20180605133421-f477c8c2f14c/go.mod h1:1m2U/K6ZT+JZG0+bdMK6qauP49QT4wE5pmhJXOKKCHw=
github.com/anacrolix/torrent v0.0.0-20180622074351-fefeef4ee9eb/go.mod h1:3vcFVxgOASslNXHdivT8spyMRBanMCenHRpe0u5vpBs=
github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572 h1:kpt6TQTVi6gognY+svubHfxxpq0DLU9AfTQyZVc3UOc=
github.com/anacrolix/utp v0.0.0-20180219060659-9e0e1d1d0572/go.mod h1:MDwc+vsGEq7RMw6lr2GKOEqjWny5hO5OZXRVNaBJ2Dk=
github.com/boltdb/bolt v1.3.1 h1:JQmyP4ZBrce+ZQu0dY660FMfatumYDLun9hBCUVIkF4=
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2 h1:1B/+1BcRhOMG1KH/YhNIU8OppSWk5d/NGyfRla88CuY=
github.com/bradfitz/iter v0.0.0-20140124041915-454541ec3da2/go.mod h1:PyRFw1Lt2wKX4ZVSQ2mk+PeDa1rxyObEDlApuIsUKuo=
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815 h1:bWDMxwH3px2JBh6AyO7hdCn/PkvCZXii8TGj7sbtEbQ=
github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e h1:Fw7ZmgiklsLh5EQWyHh1sumKSCG1+yjEctIpGKib87s=
github.com/dustin/go-humanize v0.0.0-20180421182945-02af3965c54e/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk=
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712 h1:aaQcKT9WumO6JEJcRyTqFVq4XUZiUcKR2/GI31TOcz8=
github.com/edsrzf/mmap-go v0.0.0-20170320065105-0bce6a688712/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M=
github.com/elgatito/upnp v0.0.0-20180711183757-2f244d205f9a h1:2Zw3pxDRTs4nX1WCLAEm27UN0hvjZSge7EaUUQexRZw=
github.com/elgatito/upnp v0.0.0-20180711183757-2f244d205f9a/go.mod h1:afkYpY8JAIL4341N7Zj9xJ5yTovsg6BkWfBFlCzIoF4=
github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I=
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd h1:r04MMPyLHj/QwZuMJ5+7tJcBr1AQjpiAK/rZWRrQT7o=
github.com/glycerine/go-unsnap-stream v0.0.0-20180323001048-9f0cb55181dd/go.mod h1:/20jfyN9Y5QPEAprSgKAUr+glWDY39ZiUEAYOEv5dsE=
github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493 h1:OTanQnFt0bi5iLFSdbEVA/idR6Q2WhCm+deb7ir2CcM=
github.com/glycerine/goconvey v0.0.0-20180728074245-46e3a41ad493/go.mod h1:Ogl1Tioa0aV7gstGFO7KhffUsb9M4ydbEbbxpcEDc24=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db h1:woRePGFeVFfLKN/pOkfl+p/TAqKOfFu+7KPlMVpok/w=
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a h1:ZJu5NB1Bk5ms4vw0Xu4i+jD32SE9jQXyfnOvwhHqlT0=
github.com/google/btree v0.0.0-20180124185431-e89373fe6b4a/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f h1:FDM3EtwZLyhW48YRiyqjivNlNZjAObv4xt4NnJaU+NQ=
github.com/gopherjs/gopherjs v0.0.0-20180628210949-0892b62f0d9f/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd h1:1e+0Z+T4t1mKL5xxvxXh5FkjuiToQGKreCobLu7lR3Y=
github.com/gosuri/uilive v0.0.0-20170323041506-ac356e6e42cd/go.mod h1:qkLSc0A5EXSP6B04TrN4oQoxqFI7A8XvoXSlJi8cwk8=
github.com/gosuri/uiprogress v0.0.0-20170224063937-d0567a9d84a1 h1:4iPLwzjiWGBQnYdtKbg/JNlGlEEvklrrMdjypdA1LKQ=
github.com/gosuri/uiprogress v0.0.0-20170224063937-d0567a9d84a1/go.mod h1:C1RTYn4Sc7iEyf6j8ft5dyoZ4212h8G1ol9QQluh5+0=
github.com/huandu/xstrings v1.0.0 h1:pO2K/gKgKaat5LdpAhxhluX2GPQMaI3W5FUz/I/UnWk=
github.com/huandu/xstrings v1.0.0/go.mod h1:4qWG/gcEcfX4z/mBDHJ++3ReCw9ibxbsNJbcucJdbSo=
github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA=
github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI=
github.com/jtolds/gls v4.2.1+incompatible h1:fSuqC+Gmlu6l/ZYAoZzx2pyucC8Xza35fpRVWLVmUEE=
github.com/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-sqlite3 v1.7.0 h1:CiYZ8slwBLIMkDbDJCF+Zd2M8bZ1Gz02TMsm1V33Lk0=
github.com/mattn/go-sqlite3 v1.7.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae h1:VeRdUYdCw49yizlSbMEn2SZ+gT+3IUKx8BqxyQdz+BY=
github.com/mschoch/smat v0.0.0-20160514031455-90eadee771ae/go.mod h1:qAyveg+e4CE+eKJXWVjKXM4ck2QobLqTDytGJbLLhJg=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7 h1:lDH9UUVJtmYCjyT0CI4q8xvlXPxeZ0gYCVvWbmPlp88=
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
github.com/philhofer/fwd v1.0.0 h1:UbZqGr5Y38ApvM/V/jEljVxwocdweyH+vmYvRPBnbqQ=
github.com/philhofer/fwd v1.0.0/go.mod h1:gk3iGcWd9+svBvR0sR+KPcfE+RNWozjowpeBVG3ZVNU=
github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8=
github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8=
github.com/smartystreets/assertions v0.0.0-20180607162144-eb5b59917fa2 h1:hjkfjJKpNSPqJZJKSrHbQgBz+eEui8ivYlorRc9DR64=
github.com/smartystreets/assertions v0.0.0-20180607162144-eb5b59917fa2/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a h1:JSvGDIbmil4Ui/dDdFBExb7/cmkNjyX5F97oglmvCDo=
github.com/smartystreets/goconvey v0.0.0-20180222194500-ef6db91d284a/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
github.com/smartystreets/gunit v0.0.0-20180314194857-6f0d6275bdcd h1:p5kvxG4NHogJX1brTLtvUSGdW0/aBvIyqDSW7tmnsmQ=
github.com/smartystreets/gunit v0.0.0-20180314194857-6f0d6275bdcd/go.mod h1:XUKj4gbqj2QvJk/OdLWzyZ3FYli0f+MdpngyryX0gcw=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72 h1:qLC7fQah7D6K1B0ujays3HV9gkFtllcxhzImRR7ArPQ=
github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA=
github.com/stretchr/testify v1.2.1 h1:52QO5WkIUcHGIR7EnGagH88x1bUzqGXTC5/1bDTUQ7U=
github.com/stretchr/testify v1.2.1/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/syncthing/syncthing v0.14.48-rc.4/go.mod h1:nw3siZwHPA6M8iSfjDCWQ402eqvEIasMQOE8nFOxy7M=
github.com/tinylib/msgp v1.0.2 h1:DfdQrzQa7Yh2es9SuLkixqxuXS2SxsdYn0KbdrOGWD8=
github.com/tinylib/msgp v1.0.2/go.mod h1:+d+yLhGm8mzTaHzB+wgMYrodPfmZrzkirds8fDWklFE=
github.com/willf/bitset v1.1.3 h1:ekJIKh6+YbUIVt9DfNbkR5d6aFcFTLDRyJNAACURBg8=
github.com/willf/bitset v1.1.3/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bitset v1.1.9 h1:GBtFynGY9ZWZmEC9sWuu41/7VBXPFCOAbCbqTflOg9c=
github.com/willf/bitset v1.1.9/go.mod h1:RjeCKbqT1RxIR/KWY6phxZiaY1IyutSBfGjNPySAYV4=
github.com/willf/bloom v0.0.0-20170505221640-54e3b963ee16 h1:hDGatoumfYOxzIZGsSylJuxTzu9k86BJl8OQhm72anI=
github.com/willf/bloom v0.0.0-20170505221640-54e3b963ee16/go.mod h1:MmAltL9pDMNTrvUkxdg0k0q5I0suxmuwp3KbyrZLOZ8=
github.com/willf/bloom v2.0.3+incompatible h1:QDacWdqcAUI1MPOwIQZRy9kOR7yxfyEmxX8Wdm2/JPA=
github.com/willf/bloom v2.0.3+incompatible/go.mod h1:MmAltL9pDMNTrvUkxdg0k0q5I0suxmuwp3KbyrZLOZ8=
golang.org/x/net v0.0.0-20180524181706-dfa909b99c79/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225 h1:kNX+jCowfMYzvlSvJu5pQWEmyWFrBXJ3PBy10xKMXK8=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/sys v0.0.0-20180724212812-e072cadbbdc8 h1:7T3bTJEttnfJdEY+NY/VYT7IXRaul8potWiyw/n7LB8=
golang.org/x/sys v0.0.0-20180724212812-e072cadbbdc8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2 h1:+DCIGbF/swA92ohVg0//6X2IVY3KZs6p9mix0ziNYJM=
golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
-3
View File
@@ -1,3 +0,0 @@
module github.com/benbjohnson/clock
go 1.13
-1
View File
@@ -1 +0,0 @@
module github.com/boombuler/barcode
-10
View File
@@ -1,10 +0,0 @@
module github.com/c-bata/go-prompt
require (
github.com/mattn/go-colorable v0.0.9
github.com/mattn/go-isatty v0.0.3 // indirect
github.com/mattn/go-runewidth v0.0.3
github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a
github.com/pkg/term v1.0.0
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299
)
-16
View File
@@ -1,16 +0,0 @@
github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4=
github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
github.com/mattn/go-isatty v0.0.3 h1:ns/ykhmWi7G9O+8a448SecJU3nSMBXJfqQkl0upE1jI=
github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
github.com/mattn/go-runewidth v0.0.3 h1:a+kO+98RDGEfo6asOGMmpodZq4FNtnGP54yps8BzLR4=
github.com/mattn/go-runewidth v0.0.3/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a h1:8TGB3DFRNl06DB1Q6zBX+I7FDoCUZY2fmMS9WGUIIpw=
github.com/mattn/go-tty v0.0.0-20180219170247-931426f7535a/go.mod h1:XPvLUNfbS4fJH25nqRHfWLMa1ONC8Amw+mIA639KxkE=
github.com/pkg/term v0.0.0-20180423043932-cda20d4ac917 h1:BinR73QvQveJdQ8uYZK/8MOjLADpZbI2qs/2+5rnhzQ=
github.com/pkg/term v0.0.0-20180423043932-cda20d4ac917/go.mod h1:eCbImbZ95eXtAUIbLAuAVnBnwf83mjf6QIVH8SHYwqQ=
github.com/pkg/term v1.0.0 h1:raTSNJjic7X4n89hhPyLOsgRYczmr3MyezRierWCTa8=
github.com/pkg/term v1.0.0/go.mod h1:6rk0zrj6TXf8MR5fdVFsZMeGM2lxe3tUFLNBRlwX+dk=
golang.org/x/sys v0.0.0-20180620133508-ad87a3a340fa h1:MUO6aP6ViFfqImh/3zU3O6QX3W2hFRzkkuCIQuUCOsM=
golang.org/x/sys v0.0.0-20180620133508-ad87a3a340fa/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299 h1:DYfZAGf2WMFjMxbgTjaC+2HC7NkNAQs+6Q8b9WEB/F4=
golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-3
View File
@@ -1,3 +0,0 @@
module github.com/cespare/xxhash/v2
go 1.11
View File
-13
View File
@@ -1,13 +0,0 @@
module github.com/cheggaaa/pb/v3
require (
github.com/VividCortex/ewma v1.1.1
github.com/fatih/color v1.10.0
github.com/mattn/go-colorable v0.1.8
github.com/mattn/go-isatty v0.0.12
github.com/mattn/go-runewidth v0.0.12
github.com/rivo/uniseg v0.2.0 // indirect
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 // indirect
)
go 1.12
-17
View File
@@ -1,17 +0,0 @@
github.com/VividCortex/ewma v1.1.1 h1:MnEK4VOv6n0RSY4vtRe3h11qjxL3+t0B8yOL8iMXdcM=
github.com/VividCortex/ewma v1.1.1/go.mod h1:2Tkkvm3sRDVXaiyucHiACn4cqf7DpdyLvmxzcbUokwA=
github.com/fatih/color v1.10.0 h1:s36xzo75JdqLaaWoiEHk767eHiwo0598uUxyfiPkDsg=
github.com/fatih/color v1.10.0/go.mod h1:ELkj/draVOlAH/xkhN6mQ50Qd0MPOk5AAr3maGEBuJM=
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
github.com/mattn/go-runewidth v0.0.12 h1:Y41i/hVW3Pgwr8gV+J23B9YEY0zxjptBuCWEaxmAOow=
github.com/mattn/go-runewidth v0.0.12/go.mod h1:RAqKPSqVFrSLVXbA8x7dzmKdmGzieGRCM46jaSJTDAk=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57 h1:F5Gozwx4I1xtr/sr/8CFbb57iKi3297KFs0QDbGN60A=
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-4
View File
@@ -1,4 +0,0 @@
module github.com/creack/pty
go 1.13
-1
View File
@@ -1 +0,0 @@
module github.com/dimchansky/utfbom
-8
View File
@@ -1,8 +0,0 @@
module github.com/fatih/color
go 1.13
require (
github.com/mattn/go-colorable v0.1.8
github.com/mattn/go-isatty v0.0.12
)
-7
View File
@@ -1,7 +0,0 @@
github.com/mattn/go-colorable v0.1.8 h1:c1ghPdyEDarC70ftn0y+A/Ee++9zz8ljHG1b13eJ0s8=
github.com/mattn/go-colorable v0.1.8/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-5
View File
@@ -1,5 +0,0 @@
module github.com/fsnotify/fsnotify
go 1.13
require golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9
-2
View File
@@ -1,2 +0,0 @@
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9 h1:L2auWcuQIvxz9xSEqzESnV/QN/gNRXNApHi3fYwl2w0=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-5
View File
@@ -1,5 +0,0 @@
module github.com/gin-contrib/sse
go 1.12
require github.com/stretchr/testify v1.3.0
-7
View File
@@ -1,7 +0,0 @@
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=

Some files were not shown because too many files have changed in this diff Show More