mirror of
https://github.com/yunionio/cloudpods.git
synced 2026-08-29 03:51:54 +08:00
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:
@@ -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
@@ -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)))
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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=
|
||||
|
||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1,3 +0,0 @@
|
||||
module github.com/Azure/go-autorest/logger
|
||||
|
||||
go 1.12
|
||||
-3
@@ -1,3 +0,0 @@
|
||||
module github.com/Azure/go-autorest/tracing
|
||||
|
||||
go 1.12
|
||||
+7
-8
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -68,6 +68,7 @@ func (e *UnsupportedColumnTypeError) Error() string {
|
||||
}
|
||||
|
||||
type Interface interface {
|
||||
Name() string
|
||||
Type() Type
|
||||
Rows() int
|
||||
Row(i int, ptr bool) interface{}
|
||||
|
||||
+254
-170
File diff suppressed because it is too large
Load Diff
+20
-20
@@ -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
|
||||
}
|
||||
|
||||
+70
-70
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
|
||||
+5
@@ -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) {
|
||||
|
||||
+6
-1
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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)
|
||||
}
|
||||
|
||||
Generated
Vendored
+6
-1
@@ -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{
|
||||
|
||||
+33
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1,5 +0,0 @@
|
||||
module github.com/LeeEirc/terminalparser
|
||||
|
||||
go 1.15
|
||||
|
||||
require github.com/mattn/go-runewidth v0.0.9
|
||||
-2
@@ -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
@@ -1,5 +0,0 @@
|
||||
module github.com/StackExchange/wmi
|
||||
|
||||
go 1.13
|
||||
|
||||
require github.com/go-ole/go-ole v1.2.5
|
||||
-4
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1 +0,0 @@
|
||||
module github.com/anacrolix/log
|
||||
-20
@@ -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
@@ -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
@@ -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
@@ -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
@@ -1,3 +0,0 @@
|
||||
module github.com/anacrolix/sync
|
||||
|
||||
require github.com/anacrolix/missinggo v0.0.0-20180725070939-60ef2fbf63df
|
||||
-17
@@ -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
@@ -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
@@ -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
@@ -1,3 +0,0 @@
|
||||
module github.com/benbjohnson/clock
|
||||
|
||||
go 1.13
|
||||
-1
@@ -1 +0,0 @@
|
||||
module github.com/boombuler/barcode
|
||||
-10
@@ -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
@@ -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
@@ -1,3 +0,0 @@
|
||||
module github.com/cespare/xxhash/v2
|
||||
|
||||
go 1.11
|
||||
-13
@@ -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
@@ -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
@@ -1,4 +0,0 @@
|
||||
module github.com/creack/pty
|
||||
|
||||
go 1.13
|
||||
|
||||
-1
@@ -1 +0,0 @@
|
||||
module github.com/dimchansky/utfbom
|
||||
-8
@@ -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
@@ -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
@@ -1,5 +0,0 @@
|
||||
module github.com/fsnotify/fsnotify
|
||||
|
||||
go 1.13
|
||||
|
||||
require golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9
|
||||
-2
@@ -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
@@ -1,5 +0,0 @@
|
||||
module github.com/gin-contrib/sse
|
||||
|
||||
go 1.12
|
||||
|
||||
require github.com/stretchr/testify v1.3.0
|
||||
-7
@@ -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
Reference in New Issue
Block a user