mirror of
https://github.com/dolthub/dolt.git
synced 2026-01-06 16:19:49 -06:00
Merge branch 'master' into tim/cpp-mysql-client-tests
This commit is contained in:
@@ -1,11 +1,3 @@
|
||||
FROM golang:1.15.0-buster as builder
|
||||
WORKDIR /root/building/go
|
||||
COPY ./go/ .
|
||||
|
||||
# install dolt from source
|
||||
ENV GOFLAGS="-mod=readonly"
|
||||
RUN go build -o dolt ./cmd/dolt
|
||||
|
||||
FROM ubuntu:18.04
|
||||
|
||||
ENV DEBIAN_FRONTEND=noninteractive
|
||||
@@ -14,6 +6,7 @@ RUN apt install -y software-properties-common
|
||||
|
||||
# install python, libmysqlclient-dev, java, bats
|
||||
RUN add-apt-repository ppa:deadsnakes/ppa -y
|
||||
RUN apt update -y
|
||||
RUN apt install -y \
|
||||
python3.8 \
|
||||
python3-pip \
|
||||
@@ -30,7 +23,30 @@ RUN apt install -y \
|
||||
cpanminus \
|
||||
cmake \
|
||||
g++ \
|
||||
libmysqlcppconn-dev
|
||||
libmysqlcppconn-dev \
|
||||
git
|
||||
|
||||
# install go
|
||||
WORKDIR /root
|
||||
ENV GO_VERSION=1.15.1
|
||||
RUN curl -O "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz"
|
||||
RUN sha256sum "go${GO_VERSION}.linux-amd64.tar.gz"
|
||||
RUN tar -xvf "go${GO_VERSION}.linux-amd64.tar.gz" -C /usr/local
|
||||
RUN chown -R root:root /usr/local/go
|
||||
RUN mkdir -p $HOME/go/{bin,src}
|
||||
ENV GOPATH=$HOME/go
|
||||
ENV PATH=$PATH:$GOPATH/bin
|
||||
ENV PATH=$PATH:$GOPATH/bin:/usr/local/go/bin
|
||||
RUN go version
|
||||
|
||||
# go get the MySQL dependency
|
||||
RUN go get -u github.com/go-sql-driver/mysql
|
||||
|
||||
# install dolt from source
|
||||
WORKDIR /root/building
|
||||
COPY ./go/ .
|
||||
ENV GOFLAGS="-mod=readonly"
|
||||
RUN go build -o /usr/local/bin/dolt ./cmd/dolt
|
||||
|
||||
# install dotnet
|
||||
RUN wget https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb
|
||||
@@ -52,8 +68,7 @@ RUN update-ca-certificates -f
|
||||
|
||||
# Setup JAVA_HOME -- useful for docker commandline
|
||||
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
|
||||
|
||||
COPY --from=builder /root/building/go/dolt /usr/local/bin/dolt
|
||||
|
||||
COPY ./mysql-client-tests /mysql-client-tests
|
||||
COPY ./mysql-client-tests-entrypoint.sh /mysql-client-tests/entrypoint.sh
|
||||
|
||||
|
||||
@@ -411,3 +411,22 @@ SQL
|
||||
[ $status -eq 0 ]
|
||||
[ $output -eq $CORRECT_DIFF ]
|
||||
}
|
||||
|
||||
@test "diff with invalid ref does not panic" {
|
||||
dolt add .
|
||||
dolt commit -m table
|
||||
dolt checkout -b test-branch
|
||||
dolt sql -q "insert into test values (0, 0, 0, 0, 0, 0)"
|
||||
dolt add test
|
||||
dolt commit -m "added row"
|
||||
FIRST_COMMIT=`dolt log | grep commit | cut -d " " -f 2 | tail -1`
|
||||
run dolt diff $FIRST_COMMIT test-branch
|
||||
[ $status -eq 0 ]
|
||||
[[ ! $output =~ "panic" ]]
|
||||
run dolt diff master@$FIRST_COMMIT test-branch
|
||||
[ $status -eq 1 ]
|
||||
[[ ! $output =~ "panic" ]]
|
||||
run dolt diff ref.with.period test-branch
|
||||
[ $status -eq 1 ]
|
||||
[[ ! $output =~ "panic" ]]
|
||||
}
|
||||
|
||||
@@ -601,6 +601,7 @@ func dumbDownSchema(in schema.Schema) (schema.Schema, error) {
|
||||
err := allCols.Iter(func(tag uint64, col schema.Column) (stop bool, err error) {
|
||||
col.Name = strconv.FormatUint(tag, 10)
|
||||
col.Constraints = nil
|
||||
col.Default = ""
|
||||
dumbCols = append(dumbCols, col)
|
||||
|
||||
return false, nil
|
||||
@@ -813,7 +814,7 @@ func createSplitter(fromSch schema.Schema, toSch schema.Schema, joiner *rowconv.
|
||||
|
||||
unionSch, err = untyped.UntypedSchemaUnion(dumbNewSch, dumbOldSch)
|
||||
if err != nil {
|
||||
return nil, nil, errhand.BuildDError("Failed to merge schemas").Build()
|
||||
return nil, nil, errhand.BuildDError("Failed to merge schemas").AddCause(err).Build()
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
@@ -383,7 +383,7 @@ func newBatchedDatabase(name string, dEnv *env.DoltEnv) dsqle.Database {
|
||||
return dsqle.NewBatchedDatabase(name, dEnv.DoltDB, dEnv.RepoState, dEnv.RepoStateWriter())
|
||||
}
|
||||
|
||||
func execQuery(sqlCtx *sql.Context, readOnly bool, mrEnv env.MultiRepoEnv, roots map[string]*doltdb.RootValue, query string, format resultFormat) (map[string]*doltdb.RootValue, errhand.VerboseError) {
|
||||
func execQuery(sqlCtx *sql.Context, readOnly bool, mrEnv env.MultiRepoEnv, roots map[string]*doltdb.RootValue, query string, format resultFormat) (newRoot map[string]*doltdb.RootValue, verr errhand.VerboseError) {
|
||||
dbs := CollectDBs(mrEnv, newDatabase)
|
||||
se, err := newSqlEngine(sqlCtx, readOnly, mrEnv, roots, format, dbs...)
|
||||
if err != nil {
|
||||
@@ -397,7 +397,12 @@ func execQuery(sqlCtx *sql.Context, readOnly bool, mrEnv env.MultiRepoEnv, roots
|
||||
}
|
||||
|
||||
if rowIter != nil {
|
||||
defer rowIter.Close()
|
||||
defer func() {
|
||||
err := rowIter.Close()
|
||||
if verr == nil {
|
||||
verr = errhand.VerboseErrorFromError(err)
|
||||
}
|
||||
}()
|
||||
err = se.prettyPrintResults(sqlCtx, sqlSch, rowIter)
|
||||
if err != nil {
|
||||
return nil, errhand.VerboseErrorFromError(err)
|
||||
@@ -667,8 +672,11 @@ func runShell(ctx *sql.Context, se *sqlEngine, mrEnv env.MultiRepoEnv) error {
|
||||
verr := formatQueryError("", err)
|
||||
shell.Println(verr.Verbose())
|
||||
} else if rowIter != nil {
|
||||
defer rowIter.Close()
|
||||
err = se.prettyPrintResults(ctx, sqlSch, rowIter)
|
||||
closeErr := rowIter.Close()
|
||||
if err == nil {
|
||||
err = closeErr
|
||||
}
|
||||
if err != nil {
|
||||
shell.Println(color.RedString(err.Error()))
|
||||
}
|
||||
@@ -828,7 +836,10 @@ func processQuery(ctx *sql.Context, query string, se *sqlEngine) (sql.Schema, sq
|
||||
sch, rowIter, err := se.query(ctx, query)
|
||||
|
||||
if rowIter != nil {
|
||||
_ = rowIter.Close()
|
||||
err = rowIter.Close()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
@@ -933,7 +944,7 @@ func processBatchQuery(ctx *sql.Context, query string, se *sqlEngine) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func processNonInsertBatchQuery(ctx *sql.Context, se *sqlEngine, query string, sqlStatement sqlparser.Statement) error {
|
||||
func processNonInsertBatchQuery(ctx *sql.Context, se *sqlEngine, query string, sqlStatement sqlparser.Statement) (returnErr error) {
|
||||
// We need to commit whatever batch edits we've accumulated so far before executing the query
|
||||
err := flushBatchedEdits(ctx, se)
|
||||
if err != nil {
|
||||
@@ -946,7 +957,12 @@ func processNonInsertBatchQuery(ctx *sql.Context, se *sqlEngine, query string, s
|
||||
}
|
||||
|
||||
if rowIter != nil {
|
||||
defer rowIter.Close()
|
||||
defer func() {
|
||||
err := rowIter.Close()
|
||||
if returnErr == nil {
|
||||
returnErr = err
|
||||
}
|
||||
}()
|
||||
err = mergeResultIntoStats(sqlStatement, rowIter, batchEditStats)
|
||||
if err != nil {
|
||||
return fmt.Errorf("error executing statement: %v", err.Error())
|
||||
@@ -971,14 +987,19 @@ func processNonInsertBatchQuery(ctx *sql.Context, se *sqlEngine, query string, s
|
||||
return flushBatchedEdits(ctx, se)
|
||||
}
|
||||
|
||||
func processBatchInsert(ctx *sql.Context, se *sqlEngine, query string, sqlStatement sqlparser.Statement) error {
|
||||
func processBatchInsert(ctx *sql.Context, se *sqlEngine, query string, sqlStatement sqlparser.Statement) (returnErr error) {
|
||||
_, rowIter, err := se.query(ctx, query)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error inserting rows: %v", err.Error())
|
||||
}
|
||||
|
||||
if rowIter != nil {
|
||||
defer rowIter.Close()
|
||||
defer func() {
|
||||
err := rowIter.Close()
|
||||
if returnErr == nil {
|
||||
returnErr = err
|
||||
}
|
||||
}()
|
||||
err = mergeResultIntoStats(sqlStatement, rowIter, batchEditStats)
|
||||
if err != nil {
|
||||
return fmt.Errorf("Error inserting rows: %v", err.Error())
|
||||
@@ -1285,10 +1306,13 @@ func (se *sqlEngine) prettyPrintResults(ctx context.Context, sqlSch sql.Schema,
|
||||
return nil
|
||||
}
|
||||
|
||||
func printOKResult(ctx context.Context, iter sql.RowIter) error {
|
||||
func printOKResult(ctx context.Context, iter sql.RowIter) (returnErr error) {
|
||||
row, err := iter.Next()
|
||||
defer iter.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = iter.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -1419,7 +1443,7 @@ func (se *sqlEngine) ddl(ctx *sql.Context, ddl *sqlparser.DDL, query string) (sq
|
||||
case sqlparser.CreateStr, sqlparser.DropStr, sqlparser.AlterStr, sqlparser.RenameStr:
|
||||
_, ri, err := se.query(ctx, query)
|
||||
if err == nil {
|
||||
ri.Close()
|
||||
err = ri.Close()
|
||||
}
|
||||
return nil, nil, err
|
||||
default:
|
||||
|
||||
@@ -46,11 +46,11 @@ require (
|
||||
github.com/kch42/buzhash v0.0.0-20160816060738-9bdec3dec7c6
|
||||
github.com/lestrrat-go/strftime v1.0.3 // indirect
|
||||
github.com/liquidata-inc/dolt/go/gen/proto/dolt/services/eventsapi v0.0.0-20200730200742-c031ec8cba06
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200904201710-c0c3f00f86ce
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200911214625-e81d5c813cb5
|
||||
github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0
|
||||
github.com/liquidata-inc/mmap-go v1.0.3
|
||||
github.com/liquidata-inc/sqllogictest/go v0.0.0-20200320151923-b11801f10e15
|
||||
github.com/liquidata-inc/vitess v0.0.0-20200828190113-f278600fb87c
|
||||
github.com/liquidata-inc/vitess v0.0.0-20200911213404-87f76781a7c7
|
||||
github.com/mattn/go-colorable v0.1.6 // indirect
|
||||
github.com/mattn/go-isatty v0.0.12
|
||||
github.com/mattn/go-runewidth v0.0.9
|
||||
|
||||
85
go/go.sum
85
go/go.sum
@@ -43,7 +43,6 @@ github.com/CAFxX/gcnotifier v0.0.0-20190112062741-224a280d589d/go.mod h1:Rn2zM2M
|
||||
github.com/DATA-DOG/go-sqlmock v1.4.1 h1:ThlnYciV1iM/V0OSF/dtkqWb6xo5qITT1TJBG1MRDJM=
|
||||
github.com/DATA-DOG/go-sqlmock v1.4.1/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM=
|
||||
github.com/DataDog/datadog-go v0.0.0-20180822151419-281ae9f2d895/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
github.com/DataDog/datadog-go v2.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
github.com/DataDog/datadog-go v3.4.0+incompatible h1:LZ0OTmlvhCBT0VYUvhGu8Lrc7WqNCj6Zw9HnMi0V6mA=
|
||||
github.com/DataDog/datadog-go v3.4.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ=
|
||||
@@ -78,7 +77,6 @@ github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb
|
||||
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
|
||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
|
||||
github.com/armon/go-metrics v0.0.0-20190430140413-ec5e00d3c878/go.mod h1:3AMJUQhVx52RsWOnlkpikZr01T/yAVN2gn0861vByNg=
|
||||
github.com/armon/go-metrics v0.3.2 h1:EyUnxyP2yaGpLgMiuyyz8sHnByqeTJUfGs72pdH0i4A=
|
||||
github.com/armon/go-metrics v0.3.2/go.mod h1:4O98XIr/9W0sxpJ8UaYkvjk10Iff7SnFrb4QAOwNTFc=
|
||||
github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
|
||||
@@ -89,7 +87,6 @@ github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:o
|
||||
github.com/attic-labs/kingpin v2.2.7-0.20180312050558-442efcfac769+incompatible h1:wd5mq8xSfwCYd1JpQ309s+3tTlP/gifcG2awOA3x5Vk=
|
||||
github.com/attic-labs/kingpin v2.2.7-0.20180312050558-442efcfac769+incompatible/go.mod h1:Cp18FeDCvsK+cD2QAGkqerGjrgSXLiJWnjHeY2mneBc=
|
||||
github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU=
|
||||
github.com/aws/aws-sdk-go v0.0.0-20180223184012-ebef4262e06a/go.mod h1:ZRmQr0FajVIyZ4ZzBYKG5P3ZqPz9IHG41ZoMu1ADI3k=
|
||||
github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo=
|
||||
github.com/aws/aws-sdk-go v1.32.6 h1:HoswAabUWgnrUF7X/9dr4WRgrr8DyscxXvTDm7Qw/5c=
|
||||
github.com/aws/aws-sdk-go v1.32.6/go.mod h1:5zCpMtNQVjRREroY7sYe8lOMRSxkhG6MZveU8YkpAk0=
|
||||
@@ -121,21 +118,17 @@ github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp
|
||||
github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE=
|
||||
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/cockroachdb/cmux v0.0.0-20170110192607-30d10be49292/go.mod h1:qRiX68mZX1lGBkTWyp3CLcenw9I94W2dLeRvMzcn9N4=
|
||||
github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8=
|
||||
github.com/codahale/blake2 v0.0.0-20150924215134-8d10d0420cbf h1:5ZeQB3mThuz5C2MSER6T5GdtXTF9CMMk42F9BOyRsEQ=
|
||||
github.com/codahale/blake2 v0.0.0-20150924215134-8d10d0420cbf/go.mod h1:BO2rLUAZMrpgh6GBVKi0Gjdqw2MgCtJrtmUdDeZRKjY=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd h1:qMd81Ts1T2OTKmB4acZcyKaMtRnY5Y44NuXGX2GFJ1w=
|
||||
github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI=
|
||||
github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk=
|
||||
github.com/coreos/etcd v0.0.0-20170626015032-703663d1f6ed/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk=
|
||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
@@ -163,7 +156,6 @@ github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymF
|
||||
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/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239 h1:Ghm4eQYC0nEPnSJdVkTrXpu9KtoVCSo1hg7mtI7G9KU=
|
||||
github.com/fastly/go-utils v0.0.0-20180712184237-d95a45783239/go.mod h1:Gdwt2ce0yfBxPvZrHkprdPPTTS3N5rwmLE8T22KBXlw=
|
||||
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
|
||||
@@ -174,12 +166,10 @@ github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:r
|
||||
github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4=
|
||||
github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/ghodss/yaml v0.0.0-20161207003320-04f313413ffd/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
|
||||
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/go-ini/ini v1.12.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8=
|
||||
github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as=
|
||||
github.com/go-kit/kit v0.10.0 h1:dXFJfIHVvUcpSgDOV+Ne6t7jXri8Tfv2uOLHUZ2XNuo=
|
||||
@@ -260,7 +250,6 @@ github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvq
|
||||
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/golang/snappy v0.0.0-20170215233205-553a64147049/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
github.com/golang/snappy v0.0.1 h1:Qgr9rKW7uDUkrbSmQeiDsGa8SjGyCOGtuasMWwvp2P4=
|
||||
github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
|
||||
@@ -292,7 +281,6 @@ github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+
|
||||
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/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181103185306-d547d1d9531e/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
|
||||
github.com/gorilla/handlers v1.3.0/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
|
||||
github.com/gorilla/handlers v1.4.2 h1:0QniY0USkHQ1RGCLfKxeNHK9bkDHGRYGNDFBCS+YARg=
|
||||
@@ -302,17 +290,13 @@ github.com/gorilla/mux v1.7.0/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2z
|
||||
github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs=
|
||||
github.com/gorilla/mux v1.7.4 h1:VuZ8uybHlWmqV03+zRzdwKL4tUnIp1MAQtp1mIFE1bc=
|
||||
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/gorilla/websocket v0.0.0-20160912153041-2d1e4548da23/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs=
|
||||
github.com/grpc-ecosystem/go-grpc-middleware v1.1.0/go.mod h1:f5nM7jw/oeRSadq3xCzHAvxcr8HZnzsqU6ILg/0NiiE=
|
||||
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk=
|
||||
github.com/grpc-ecosystem/grpc-gateway v0.0.0-20161128002007-199c40a060d1/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY=
|
||||
github.com/hashicorp/consul v1.4.0/go.mod h1:mFrjN1mfidgJfYP1xrJCF+AfRhr6Eaqhb2+sfyn/OOI=
|
||||
github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE=
|
||||
github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8=
|
||||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
|
||||
@@ -322,13 +306,11 @@ github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtng
|
||||
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-immutable-radix v1.1.0 h1:vN9wG1D6KG6YHRTWr8512cxGOVgTMEfgEdSj/hr8MPc=
|
||||
github.com/hashicorp/go-immutable-radix v1.1.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
|
||||
github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=
|
||||
github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||
github.com/hashicorp/go-msgpack v0.5.5 h1:i9R9JSrqIz0QVLz3sz+i3YJdT7TTSLcfLLzJi9aZTuI=
|
||||
github.com/hashicorp/go-msgpack v0.5.5/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
|
||||
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
|
||||
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
|
||||
github.com/hashicorp/go-retryablehttp v0.5.3/go.mod h1:9B5zBasrRhHXnJnui7y6sL7es7NDiJgTc6Er0maI1Xs=
|
||||
github.com/hashicorp/go-rootcerts v0.0.0-20160503143440-6bb64b370b90/go.mod h1:o4zcYY1e0GEZI6eSEr+43QDYmuGglw1qSO6qdHUHCgg=
|
||||
github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU=
|
||||
github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
|
||||
github.com/hashicorp/go-sockaddr v1.0.2 h1:ztczhD1jLxIRjVejw8gFomI1BQZOe2WoVOu0SyteCQc=
|
||||
@@ -349,10 +331,8 @@ github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T
|
||||
github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
|
||||
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
|
||||
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/memberlist v0.1.4/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/memberlist v0.1.6 h1:ouPxvwKYaNZe+eTcHxYP0EblPduVLvIPycul+vv8his=
|
||||
github.com/hashicorp/memberlist v0.1.6/go.mod h1:5VDNHjqFMgEcclnwmkCnC99IPwxBmIsxwY8qn+Nl0H4=
|
||||
github.com/hashicorp/serf v0.0.0-20161207011743-d3a67ab21bc8/go.mod h1:h/Ru6tmZazX7WO/GDmwdpS975F019L4t5ng5IgwbNrE=
|
||||
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg=
|
||||
@@ -364,7 +344,6 @@ github.com/jedib0t/go-pretty v4.3.1-0.20191104025401-85fe5d6a7c4d+incompatible h
|
||||
github.com/jedib0t/go-pretty v4.3.1-0.20191104025401-85fe5d6a7c4d+incompatible/go.mod h1:XemHduiw8R651AF9Pt4FwCTKeG3oo7hrHJAoznj9nag=
|
||||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869 h1:IPJ3dvxmJ4uczJe5YQdrYB16oTJlGSC/OyZDqUk9xX4=
|
||||
github.com/jehiah/go-strftime v0.0.0-20171201141054-1d33003b3869/go.mod h1:cJ6Cj7dQo+O6GJNiMx+Pa94qKj+TG8ONdKHgMNIyyag=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k=
|
||||
github.com/jmespath/go-jmespath v0.3.0 h1:OS12ieG61fsCg5+qLJ+SsW9NicxNkg3b25OyT2yCeUc=
|
||||
github.com/jmespath/go-jmespath v0.3.0/go.mod h1:9QtRXoHjLGCJ5IBSaohpXITPlowMeeYCZ7fLUTSywik=
|
||||
@@ -381,7 +360,6 @@ github.com/json-iterator/go v1.1.9/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/u
|
||||
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/jtolds/gls v4.2.1+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b h1:FQ7+9fxhyp82ks9vAuyPzG0/vVbWwMwLJ+P6yJI5FN8=
|
||||
github.com/juju/fslock v0.0.0-20160525022230-4d5c94c67b4b/go.mod h1:HMcgvsgd0Fjj4XXDkbjdmlbI505rUPBs6WBMYg2pXks=
|
||||
@@ -395,11 +373,7 @@ github.com/kch42/buzhash v0.0.0-20160816060738-9bdec3dec7c6/go.mod h1:UtDV9qK925
|
||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||
github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00=
|
||||
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
|
||||
github.com/klauspost/compress v0.0.0-20180801095237-b50017755d44/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
|
||||
github.com/klauspost/cpuid v1.2.0/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
|
||||
github.com/klauspost/crc32 v1.2.0/go.mod h1:+ZoRqAPRLkC4NPOvfYeR5KNOrY6TD+/sAC3HXPZgDYg=
|
||||
github.com/klauspost/pgzip v1.2.0/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3 h1:CE8S1cTafDpPvMhIxNJKvHsGVBgn1xWYf1NbHQhywc8=
|
||||
@@ -410,7 +384,6 @@ 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/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
|
||||
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
|
||||
github.com/krishicks/yaml-patch v0.0.10/go.mod h1:Sm5TchwZS6sm7RJoyg87tzxm2ZcKzdRE4Q7TjNhPrME=
|
||||
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc h1:RKf14vYWi2ttpEmkA4aQ3j4u9dStX2t4M8UM6qqNsG8=
|
||||
github.com/lestrrat-go/envload v0.0.0-20180220234015-a3eb8ddeffcc/go.mod h1:kopuH9ugFRkIXf3YoqHKyrJ9YfUFsckUU9S7B+XP+is=
|
||||
github.com/lestrrat-go/strftime v1.0.1 h1:o7qz5pmLzPDLyGW4lG6JvTKPUfTFXwe+vOamIYWtnVU=
|
||||
@@ -422,28 +395,16 @@ github.com/lib/pq v1.3.0 h1:/qkRGz8zljWiDcFvgpwUpwIAPu3r07TDvs3Rws+o/pU=
|
||||
github.com/lib/pq v1.3.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
||||
github.com/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM=
|
||||
github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200820215800-6e65638249cd h1:nMET3TWaidBmzpRjD2OtB3HY4vT+7NEZUl1q3rqrWcw=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200820215800-6e65638249cd/go.mod h1:DOvPP9xyN0JcJl6kE25qQaTFT0bKaIu+PWXAbCf6Cg4=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200901124247-091af3a98c80 h1:/7fOb3fY2FQUkL7fSzurHiDMJ3GId4i5ptUGYy7LL2M=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200901124247-091af3a98c80/go.mod h1:DOvPP9xyN0JcJl6kE25qQaTFT0bKaIu+PWXAbCf6Cg4=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200902102301-0bb12ac1dc8f h1:VSqnNQ7mx/O3kYwpUVHoisqSzGEBKnIv1jgS4bR/nWk=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200902102301-0bb12ac1dc8f/go.mod h1:b/E6DSZ08KW/dCBHd4H+ML1kzZgSW/TjBWmLYPUAoaw=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200903120600-937abdf3b337 h1:bUaTLwpYwTB6mqcvUF4uEyvWxKEmBp31b7sGJN+iPjc=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200903120600-937abdf3b337/go.mod h1:b/E6DSZ08KW/dCBHd4H+ML1kzZgSW/TjBWmLYPUAoaw=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200903234230-d19d168affe7 h1:aOgkCwTbukYjcgvLIuPfHOXvTJvuYyiZURgmkkyoRoc=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200903234230-d19d168affe7/go.mod h1:b/E6DSZ08KW/dCBHd4H+ML1kzZgSW/TjBWmLYPUAoaw=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200904201710-c0c3f00f86ce h1:xlda69iiogM+0XIYfs+sM/pWgbkUgcig0tHQVgui2n0=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200904201710-c0c3f00f86ce/go.mod h1:b/E6DSZ08KW/dCBHd4H+ML1kzZgSW/TjBWmLYPUAoaw=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200911214625-e81d5c813cb5 h1:iqHHM9uv2NjAoSVc5KQTcFzsV4wb0uwbCIL6ULVM13c=
|
||||
github.com/liquidata-inc/go-mysql-server v0.6.1-0.20200911214625-e81d5c813cb5/go.mod h1:T6gBgEkMsA2WUGPD/J25wuVyX+4Gd2k9mPBta9YDoxY=
|
||||
github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0 h1:phMgajKClMUiIr+hF2LGt8KRuUa2Vd2GI1sNgHgSXoU=
|
||||
github.com/liquidata-inc/ishell v0.0.0-20190514193646-693241f1f2a0/go.mod h1:YC1rI9k5gx8D02ljlbxDfZe80s/iq8bGvaaQsvR+qxs=
|
||||
github.com/liquidata-inc/mmap-go v1.0.3 h1:2LndAeAtup9rpvUmu4wZSYCsjCQ0Zpc+NqE+6+PnT7g=
|
||||
github.com/liquidata-inc/mmap-go v1.0.3/go.mod h1:w0doE7jfkuDEZyxb/zD3VWnRaQBYx1uDTS816kH8HoY=
|
||||
github.com/liquidata-inc/sqllogictest/go v0.0.0-20200320151923-b11801f10e15 h1:H3RwcYfzkdW4kFh7znTUopcX3XZqnFXm6pcmxSy0mNo=
|
||||
github.com/liquidata-inc/sqllogictest/go v0.0.0-20200320151923-b11801f10e15/go.mod h1:kKRVtyuomkqz15YFRpS0OT8kpsU8y/F3jyiZtvALdKU=
|
||||
github.com/liquidata-inc/vitess v0.0.0-20200810233321-367ca83596b2 h1:1j3VcjylQSVHZXR5PncoYSmZoIhNMThqkTOtqAgatlU=
|
||||
github.com/liquidata-inc/vitess v0.0.0-20200810233321-367ca83596b2/go.mod h1:E8nYT1vcL2NROtFwUN02CiA6cz276CFuB0Q1Zja5CAo=
|
||||
github.com/liquidata-inc/vitess v0.0.0-20200828190113-f278600fb87c h1:b04Et1PkwHuuex4zIly5Iji7xXVkKldzBjMazAJRGV4=
|
||||
github.com/liquidata-inc/vitess v0.0.0-20200828190113-f278600fb87c/go.mod h1:E8nYT1vcL2NROtFwUN02CiA6cz276CFuB0Q1Zja5CAo=
|
||||
github.com/liquidata-inc/vitess v0.0.0-20200911213404-87f76781a7c7 h1:CGiw+RfbIXsE+BPA8d7WpyvOVJUyw1OzDNxxTMa8qtI=
|
||||
github.com/liquidata-inc/vitess v0.0.0-20200911213404-87f76781a7c7/go.mod h1:8PM478sNETVVNWL2tVW+Uy4LIH31/x/tphLIRPh/hF4=
|
||||
github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ=
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE=
|
||||
@@ -461,7 +422,6 @@ github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hd
|
||||
github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
|
||||
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.1/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||
github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU=
|
||||
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=
|
||||
@@ -475,7 +435,6 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyex
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/miekg/dns v1.1.27 h1:aEH/kqUzUxGJ/UHcEKdJY+ugH6WEzsEBBSPa8zuy1aM=
|
||||
github.com/miekg/dns v1.1.27/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
|
||||
github.com/minio/minio-go v0.0.0-20190131015406-c8a261de75c1/go.mod h1:vuvdOZLJuf5HmJAJrKV64MmozrSsk+or0PB5dzdfspg=
|
||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||
github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
|
||||
@@ -507,17 +466,13 @@ github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLA
|
||||
github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs=
|
||||
github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA=
|
||||
github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U=
|
||||
github.com/olekukonko/tablewriter v0.0.0-20160115111002-cca8bbc07984/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
|
||||
github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo=
|
||||
github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 h1:Yl0tPBa8QPjGmesFh1D0rDy+q1Twx6FyU7VWHi8wZbI=
|
||||
github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852/go.mod h1:eqOVx5Vwu4gd2mmMZvVZsgIqNSaW3xxRThUJ0k/TPk4=
|
||||
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/ginkgo v1.10.3/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
|
||||
github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY=
|
||||
github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY=
|
||||
github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk=
|
||||
github.com/opentracing-contrib/go-grpc v0.0.0-20180928155321-4b5a12d3ff02/go.mod h1:JNdpVEzCpXBgIiv4ds+TzhN1hrtxq6ClLrTlT9OQRSc=
|
||||
github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis=
|
||||
github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74=
|
||||
github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||
@@ -532,7 +487,6 @@ github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIw
|
||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0MwY=
|
||||
github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/pborman/uuid v0.0.0-20160824210600-b984ec7fa9ff/go.mod h1:VyrYX9gd7irzKovcSS6BIIEwPRkP2Wm2m9ufcdFSJ34=
|
||||
github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k=
|
||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||
github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo=
|
||||
@@ -555,11 +509,9 @@ github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZb
|
||||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
|
||||
github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
|
||||
github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw=
|
||||
github.com/prometheus/client_golang v0.9.2/go.mod h1:OsXs2jCmiKlQ1lTBmv21f2mNfw4xf/QclQDMrYNZzcM=
|
||||
github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs=
|
||||
github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso=
|
||||
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
|
||||
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
|
||||
github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og=
|
||||
github.com/prometheus/client_golang v1.4.0/go.mod h1:e9GMxYsXl05ICDXkRhurwBS4Q3OK1iX/F2sw+iXX5zU=
|
||||
github.com/prometheus/client_golang v1.4.1 h1:FFSuS004yOQEtDdTq+TAOLP5xUq63KqAFYyOi8zA+Y8=
|
||||
@@ -572,21 +524,16 @@ github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6T
|
||||
github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M=
|
||||
github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||
github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
|
||||
github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
|
||||
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
|
||||
github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA=
|
||||
github.com/prometheus/common v0.9.1 h1:KOMtN28tlbam3/7ZKEYKHhKoJZYYj3gMH4uc62x7X7U=
|
||||
github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||
github.com/prometheus/procfs v0.0.5/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||
github.com/prometheus/procfs v0.0.8 h1:+fpWZdT24pJBiqJdAwYBjPSk+5YmQzYNPYzQsdzLkt8=
|
||||
github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
@@ -606,7 +553,6 @@ github.com/ryanuber/columnize v2.1.0+incompatible/go.mod h1:sm1tb6uqfes/u+d4ooFo
|
||||
github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E=
|
||||
github.com/sanity-io/litter v1.2.0 h1:DGJO0bxH/+C2EukzOSBmAlxmkhVMGqzvcx/rvySYw9M=
|
||||
github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4=
|
||||
github.com/satori/go.uuid v0.0.0-20160713180306-0aa62d5ddceb/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
|
||||
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
|
||||
@@ -630,8 +576,6 @@ github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrf
|
||||
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 h1:JIAuq3EEf9cgbU6AtGPK4CTG3Zf6CKMNqf0MHTggAUA=
|
||||
github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966/go.mod h1:sUM3LWHvSMaG192sy56D9F7CNvL7jUJVXoqM1QKLnog=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/assertions v0.0.0-20190116191733-b6c0e53d7304/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/goconvey v0.0.0-20181108003508-044398e4856c/go.mod h1:XDJAKZRPZ1CvBcN2aX5YOUTYGHki24fSF0Iv48Ibg0s=
|
||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
github.com/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY=
|
||||
@@ -668,7 +612,6 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P
|
||||
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
|
||||
github.com/stretchr/testify v1.6.1 h1:hDPOHmpOpP40lSULcqw7IrRb/u7w6RpDC9399XyoNd0=
|
||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/tchap/go-patricia v0.0.0-20160729071656-dd168db6051b/go.mod h1:bmLyhP68RS6kStMGxByiQ23RP/odRBOTVjwp2cDyi6I=
|
||||
github.com/tealeg/xlsx v1.0.5 h1:+f8oFmvY8Gw1iUXzPk+kz+4GpbDZPK1FhPiQRd+ypgE=
|
||||
github.com/tealeg/xlsx v1.0.5/go.mod h1:btRS8dz54TDnvKNosuAqxrM1QgN1udgk9O34bDCnORM=
|
||||
github.com/tebeka/strftime v0.1.4 h1:e0FKSyxthD1Xk4cIixFPoyfD33u2SbjNngOaaC3ePoU=
|
||||
@@ -687,9 +630,7 @@ github.com/uber/jaeger-lib v2.0.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6
|
||||
github.com/uber/jaeger-lib v2.2.0+incompatible h1:MxZXOiR2JuoANZ3J6DE/U0kSFv/eJ/GfSYVCjK7dyaw=
|
||||
github.com/uber/jaeger-lib v2.2.0+incompatible/go.mod h1:ComeNDZlWwrWnDv8aPp0Ba6+uUTzImX/AauajbLI56U=
|
||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw=
|
||||
github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0=
|
||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY=
|
||||
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
|
||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/xdg/scram v0.0.0-20180814205039-7eeb5667e42c/go.mod h1:lB8K/P019DLNhemzwFU4jHLhdvlE6uDZjXFejJXr49I=
|
||||
@@ -698,7 +639,6 @@ github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q
|
||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/z-division/go-zookeeper v0.0.0-20190128072838-6d7457066b9b/go.mod h1:JNALoWa+nCXR8SmgLluHcBNVJgyejzpKPZk9pX2yXXE=
|
||||
go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
go.etcd.io/bbolt v1.3.3 h1:MUGmc65QhB3pIlaQ5bB4LwqSj6GIonVJXpZiaKNyaKk=
|
||||
go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU=
|
||||
@@ -732,7 +672,6 @@ go.uber.org/zap v1.15.0/go.mod h1:Mb2vm2krFEG5DV0W9qcHBYFtp/Wku1cvYaqPsS/WYfc=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190128193316-c7b33c32a30b/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190422162423-af44ce270edf/go.mod h1:WFFai1msRO1wXaEeE5yQxYXgSfI8pQAWXbQop6sCtWE=
|
||||
golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
@@ -740,7 +679,6 @@ golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8U
|
||||
golang.org/x/crypto v0.0.0-20190530122614-20be4c3c3ed5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
golang.org/x/crypto v0.0.0-20190829043050-9756ffdc2472/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 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
@@ -811,8 +749,6 @@ golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/
|
||||
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-20200602114024-627f9648deb9/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
|
||||
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-20200904194848-62affa334b73 h1:MXfv8rhZWmFeqX3GNZRsd6vOLoaCHjYEX3qkRo3YBUA=
|
||||
golang.org/x/net v0.0.0-20200904194848-62affa334b73/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
@@ -840,7 +776,6 @@ golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5h
|
||||
golang.org/x/sys v0.0.0-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181221143128-b4a75ba826a6/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190124100055-b90733256f2e/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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -855,7 +790,6 @@ golang.org/x/sys v0.0.0-20190531175056-4c3a928424d2/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
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-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190926180325-855e68c8590b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
@@ -878,8 +812,6 @@ golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7w
|
||||
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200620081246-981b61492c35/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae h1:Ih9Yo4hSPImZOpfGuA4bR/ORKTAbhZo2AbWNRCnevdo=
|
||||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a h1:i47hUS795cOydZI4AwJQCKXOr4BvxzvikwDoDtHhP2Y=
|
||||
golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
@@ -1004,8 +936,6 @@ google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEY
|
||||
google.golang.org/genproto v0.0.0-20200608115520-7c474a2e3482/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
|
||||
google.golang.org/genproto v0.0.0-20200622133129-d0ee0c36e670/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200715011427-11fb19a81f2c h1:6DWnZZ6EY/59QRRQttZKiktVL23UuQYs7uy75MhhLRM=
|
||||
google.golang.org/genproto v0.0.0-20200715011427-11fb19a81f2c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d h1:92D1fum1bJLKSdr11OJ+54YeCMCGYIygTA7R/YZxH5M=
|
||||
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
|
||||
@@ -1024,8 +954,6 @@ google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8
|
||||
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/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
|
||||
google.golang.org/grpc v1.30.0 h1:M5a8xTlYTxwMn5ZFkwhRabsygDY5G8TYLyQDBxJNAxE=
|
||||
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/grpc v1.31.1 h1:SfXqXS5hkufcdZ/mHtYCh53P2b+92WQq/DZcKLgsFRs=
|
||||
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
@@ -1040,7 +968,6 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj
|
||||
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/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=
|
||||
gopkg.in/asn1-ber.v1 v1.0.0-20150924051756-4e86f4367175/go.mod h1:cuepJuh7vyXfUyUwEgHQXw849cJrilpS5NeIjOWESAw=
|
||||
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/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
@@ -1050,8 +977,6 @@ gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qS
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
||||
gopkg.in/ini.v1 v1.41.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
gopkg.in/ldap.v2 v2.5.0/go.mod h1:oI0cpe/D7HRtBQl8aTg+ZmzFUAvu4lsv3eLXMLGFxWk=
|
||||
gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
||||
gopkg.in/square/go-jose.v2 v2.5.1 h1:7odma5RETjNHWJnR32wx8t+Io4djHE1PqxCFx3iiZ2w=
|
||||
gopkg.in/square/go-jose.v2 v2.5.1/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
|
||||
|
||||
@@ -199,7 +199,7 @@ func GetCommitAncestor(ctx context.Context, cm1, cm2 *Commit) (*Commit, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
ref, err := getCommitAncestorRef(ctx, ref1, ref2, cm1.vrw)
|
||||
ref, err := getCommitAncestorRef(ctx, ref1, ref2, cm1.vrw, cm2.vrw)
|
||||
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@@ -220,8 +220,8 @@ func GetCommitAncestor(ctx context.Context, cm1, cm2 *Commit) (*Commit, error) {
|
||||
return NewCommit(cm1.vrw, ancestorSt), nil
|
||||
}
|
||||
|
||||
func getCommitAncestorRef(ctx context.Context, ref1, ref2 types.Ref, vrw types.ValueReadWriter) (types.Ref, error) {
|
||||
ancestorRef, ok, err := datas.FindCommonAncestor(ctx, ref1, ref2, vrw)
|
||||
func getCommitAncestorRef(ctx context.Context, ref1, ref2 types.Ref, vrw1, vrw2 types.ValueReadWriter) (types.Ref, error) {
|
||||
ancestorRef, ok, err := datas.FindCommonAncestor(ctx, ref1, ref2, vrw1, vrw2)
|
||||
|
||||
if err != nil {
|
||||
return types.Ref{}, err
|
||||
|
||||
@@ -187,6 +187,10 @@ func (ddb *DoltDB) WriteEmptyRepoWithCommitTime(ctx context.Context, name, email
|
||||
}
|
||||
|
||||
func getCommitStForRefStr(ctx context.Context, db datas.Database, ref string) (types.Struct, error) {
|
||||
if !datas.DatasetFullRe.MatchString(ref) {
|
||||
return types.EmptyStruct(db.Format()), fmt.Errorf("invalid ref format: %s", ref)
|
||||
}
|
||||
|
||||
ds, err := db.GetDataset(ctx, ref)
|
||||
|
||||
if err != nil {
|
||||
|
||||
@@ -18,6 +18,7 @@ import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"strings"
|
||||
"sync"
|
||||
|
||||
"github.com/liquidata-inc/dolt/go/libraries/doltcore/table"
|
||||
@@ -31,7 +32,7 @@ import (
|
||||
"github.com/liquidata-inc/dolt/go/store/types"
|
||||
)
|
||||
|
||||
var ErrDuplicatePrimaryKeyFmt = "duplicate primary key given: (%v)"
|
||||
var ErrDuplicatePrimaryKeyFmt = "duplicate primary key given: %v"
|
||||
|
||||
// TableEditor supports making multiple row edits (inserts, updates, deletes) to a table. It does error checking for key
|
||||
// collision etc. in the Close() method, as well as during Insert / Update.
|
||||
@@ -173,7 +174,10 @@ func (te *TableEditor) GetIndexedRows(ctx context.Context, key types.Tuple, inde
|
||||
return nil, err
|
||||
}
|
||||
if fieldsVal == nil {
|
||||
keyStr, _ := types.EncodedValue(ctx, key)
|
||||
keyStr, err := formatKey(ctx, key)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return nil, fmt.Errorf("index key `%s` does not have a corresponding entry in table", keyStr)
|
||||
}
|
||||
|
||||
@@ -244,11 +248,11 @@ func (te *TableEditor) InsertRow(ctx context.Context, dRow row.Row) error {
|
||||
// If we've already inserted this key as part of this insert operation, that's an error. Inserting a row that
|
||||
// already exists in the table will be handled in Close().
|
||||
if _, ok := te.tea.addedKeys[keyHash]; ok {
|
||||
value, err := types.EncodedValue(ctx, key)
|
||||
keyStr, err := formatKey(ctx, key)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf(ErrDuplicatePrimaryKeyFmt, value)
|
||||
return fmt.Errorf(ErrDuplicatePrimaryKeyFmt, keyStr)
|
||||
}
|
||||
te.tea.insertedKeys[keyHash] = key
|
||||
te.tea.addedKeys[keyHash] = key
|
||||
@@ -397,11 +401,11 @@ func (te *TableEditor) flushEditAccumulator(ctx context.Context, teaInterface in
|
||||
return errhand.BuildDError("failed to read table").AddCause(err).Build()
|
||||
}
|
||||
if rowExists {
|
||||
value, err := types.EncodedValue(ctx, addedKey)
|
||||
keyStr, err := formatKey(ctx, addedKey)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
return fmt.Errorf(ErrDuplicatePrimaryKeyFmt, value)
|
||||
return fmt.Errorf(ErrDuplicatePrimaryKeyFmt, keyStr)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -440,6 +444,36 @@ func (te *TableEditor) flushEditAccumulator(ctx context.Context, teaInterface in
|
||||
return nil
|
||||
}
|
||||
|
||||
// formatKey returns a comma-separated string representation of the key given.
|
||||
func formatKey(ctx context.Context, key types.Value) (string, error) {
|
||||
tuple, ok := key.(types.Tuple)
|
||||
if !ok {
|
||||
return "", fmt.Errorf("Expected types.Tuple but got %T", key)
|
||||
}
|
||||
|
||||
var vals []string
|
||||
iter, err := tuple.Iterator()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
for iter.HasMore() {
|
||||
i, val, err := iter.Next()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
if i%2 == 1 {
|
||||
str, err := types.EncodedValue(ctx, val)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
vals = append(vals, str)
|
||||
}
|
||||
}
|
||||
|
||||
return fmt.Sprintf("(%s)", strings.Join(vals, ",")), nil
|
||||
}
|
||||
|
||||
func (te *TableEditor) getIndexIterator(ctx context.Context, key types.Tuple, indexName string) (table.TableReadCloser, error) {
|
||||
var indexEd *IndexEditor
|
||||
for _, ie := range te.indexEds {
|
||||
|
||||
@@ -295,3 +295,83 @@ func TestTableEditorWriteAfterFlush(t *testing.T) {
|
||||
require.NoError(t, err)
|
||||
assert.True(t, sameTableData.Equals(newTableData))
|
||||
}
|
||||
|
||||
func TestTableEditorDuplicateKeyHandling(t *testing.T) {
|
||||
format := types.Format_7_18
|
||||
db, err := dbfactory.MemFactory{}.CreateDB(context.Background(), format, nil, nil)
|
||||
require.NoError(t, err)
|
||||
colColl, err := schema.NewColCollection(
|
||||
schema.NewColumn("pk", 0, types.IntKind, true),
|
||||
schema.NewColumn("v1", 1, types.IntKind, false),
|
||||
schema.NewColumn("v2", 2, types.IntKind, false))
|
||||
require.NoError(t, err)
|
||||
tableSch := schema.SchemaFromCols(colColl)
|
||||
tableSchVal, err := encoding.MarshalSchemaAsNomsValue(context.Background(), db, tableSch)
|
||||
require.NoError(t, err)
|
||||
emptyMap, err := types.NewMap(context.Background(), db)
|
||||
require.NoError(t, err)
|
||||
table, err := NewTable(context.Background(), db, tableSchVal, emptyMap, nil)
|
||||
require.NoError(t, err)
|
||||
|
||||
tableEditor, err := NewTableEditor(context.Background(), table, tableSch)
|
||||
require.NoError(t, err)
|
||||
|
||||
for i := 0; i < 3; i++ {
|
||||
dRow, err := row.New(format, tableSch, row.TaggedValues{
|
||||
0: types.Int(i),
|
||||
1: types.Int(i),
|
||||
2: types.Int(i),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, tableEditor.InsertRow(context.Background(), dRow))
|
||||
}
|
||||
|
||||
_, err = tableEditor.Table()
|
||||
require.NoError(t, err)
|
||||
|
||||
for i := 0; i < 3; i++ {
|
||||
dRow, err := row.New(format, tableSch, row.TaggedValues{
|
||||
0: types.Int(i),
|
||||
1: types.Int(i),
|
||||
2: types.Int(i),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, tableEditor.InsertRow(context.Background(), dRow))
|
||||
}
|
||||
|
||||
_, err = tableEditor.Table()
|
||||
require.Error(t, err)
|
||||
_, err = tableEditor.Table()
|
||||
require.NoError(t, err)
|
||||
|
||||
for i := 3; i < 10; i++ {
|
||||
dRow, err := row.New(format, tableSch, row.TaggedValues{
|
||||
0: types.Int(i),
|
||||
1: types.Int(i),
|
||||
2: types.Int(i),
|
||||
})
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, tableEditor.InsertRow(context.Background(), dRow))
|
||||
}
|
||||
|
||||
newTable, err := tableEditor.Table()
|
||||
require.NoError(t, err)
|
||||
newTableData, err := newTable.GetRowData(context.Background())
|
||||
require.NoError(t, err)
|
||||
if assert.Equal(t, uint64(10), newTableData.Len()) {
|
||||
iterIndex := 0
|
||||
_ = newTableData.IterAll(context.Background(), func(key, value types.Value) error {
|
||||
dReadRow, err := row.FromNoms(tableSch, key.(types.Tuple), value.(types.Tuple))
|
||||
require.NoError(t, err)
|
||||
dReadVals, err := row.GetTaggedVals(dReadRow)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, row.TaggedValues{
|
||||
0: types.Int(iterIndex),
|
||||
1: types.Int(iterIndex),
|
||||
2: types.Int(iterIndex),
|
||||
}, dReadVals)
|
||||
iterIndex++
|
||||
return nil
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ package testcommands
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"io"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
@@ -125,8 +126,22 @@ func (q Query) Exec(t *testing.T, dEnv *env.DoltEnv) error {
|
||||
engine, sqlCtx, err := dsqle.NewTestEngine(context.Background(), sqlDb, root)
|
||||
require.NoError(t, err)
|
||||
|
||||
_, _, err = engine.Query(sqlCtx, q.Query)
|
||||
_, iter, err := engine.Query(sqlCtx, q.Query)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
for {
|
||||
_, err := iter.Next()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
err = iter.Close()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
@@ -23,6 +23,7 @@ import (
|
||||
)
|
||||
|
||||
type c struct {
|
||||
ddb *doltdb.DoltDB
|
||||
commit *doltdb.Commit
|
||||
hash hash.Hash
|
||||
height uint64
|
||||
@@ -34,8 +35,6 @@ type q struct {
|
||||
pending []*c
|
||||
numVisiblePending int
|
||||
loaded map[hash.Hash]*c
|
||||
|
||||
ddb *doltdb.DoltDB
|
||||
}
|
||||
|
||||
func (q *q) NumVisiblePending() int {
|
||||
@@ -51,8 +50,8 @@ func (q *q) PopPending() *c {
|
||||
return c
|
||||
}
|
||||
|
||||
func (q *q) AddPendingIfUnseen(ctx context.Context, id hash.Hash) error {
|
||||
c, err := q.Get(ctx, id)
|
||||
func (q *q) AddPendingIfUnseen(ctx context.Context, ddb *doltdb.DoltDB, id hash.Hash) error {
|
||||
c, err := q.Get(ctx, ddb, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -90,8 +89,8 @@ func (q *q) AddPendingIfUnseen(ctx context.Context, id hash.Hash) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (q *q) SetInvisible(ctx context.Context, id hash.Hash) error {
|
||||
c, err := q.Get(ctx, id)
|
||||
func (q *q) SetInvisible(ctx context.Context, ddb *doltdb.DoltDB, id hash.Hash) error {
|
||||
c, err := q.Get(ctx, ddb, id)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
@@ -104,24 +103,24 @@ func (q *q) SetInvisible(ctx context.Context, id hash.Hash) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (q *q) load(ctx context.Context, h hash.Hash) (*doltdb.Commit, error) {
|
||||
func load(ctx context.Context, ddb *doltdb.DoltDB, h hash.Hash) (*doltdb.Commit, error) {
|
||||
cs, err := doltdb.NewCommitSpec(h.String())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
c, err := q.ddb.Resolve(ctx, cs, nil)
|
||||
c, err := ddb.Resolve(ctx, cs, nil)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func (q *q) Get(ctx context.Context, id hash.Hash) (*c, error) {
|
||||
func (q *q) Get(ctx context.Context, ddb *doltdb.DoltDB, id hash.Hash) (*c, error) {
|
||||
if l, ok := q.loaded[id]; ok {
|
||||
return l, nil
|
||||
}
|
||||
|
||||
l, err := q.load(ctx, id)
|
||||
l, err := load(ctx, ddb, id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -130,13 +129,13 @@ func (q *q) Get(ctx context.Context, id hash.Hash) (*c, error) {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
c := &c{commit: l, height: h, hash: id}
|
||||
c := &c{ddb: ddb, commit: l, height: h, hash: id}
|
||||
q.loaded[id] = c
|
||||
return c, nil
|
||||
}
|
||||
|
||||
func newQueue(ddb *doltdb.DoltDB) *q {
|
||||
return &q{ddb: ddb, loaded: make(map[hash.Hash]*c)}
|
||||
func newQueue() *q {
|
||||
return &q{loaded: make(map[hash.Hash]*c)}
|
||||
}
|
||||
|
||||
// GetDotDotRevisions returns the commits reachable from commit at hash
|
||||
@@ -148,16 +147,16 @@ func newQueue(ddb *doltdb.DoltDB) *q {
|
||||
// ties are broken by timestamp; newer commits appear first.
|
||||
//
|
||||
// Roughly mimics `git log master..feature`.
|
||||
func GetDotDotRevisions(ctx context.Context, ddb *doltdb.DoltDB, includedHead hash.Hash, excludedHead hash.Hash, num int) ([]*doltdb.Commit, error) {
|
||||
func GetDotDotRevisions(ctx context.Context, includedDB *doltdb.DoltDB, includedHead hash.Hash, excludedDB *doltdb.DoltDB, excludedHead hash.Hash, num int) ([]*doltdb.Commit, error) {
|
||||
commitList := make([]*doltdb.Commit, 0, num)
|
||||
q := newQueue(ddb)
|
||||
if err := q.SetInvisible(ctx, excludedHead); err != nil {
|
||||
q := newQueue()
|
||||
if err := q.SetInvisible(ctx, excludedDB, excludedHead); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := q.AddPendingIfUnseen(ctx, excludedHead); err != nil {
|
||||
if err := q.AddPendingIfUnseen(ctx, excludedDB, excludedHead); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if err := q.AddPendingIfUnseen(ctx, includedHead); err != nil {
|
||||
if err := q.AddPendingIfUnseen(ctx, includedDB, includedHead); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for q.NumVisiblePending() > 0 {
|
||||
@@ -168,11 +167,11 @@ func GetDotDotRevisions(ctx context.Context, ddb *doltdb.DoltDB, includedHead ha
|
||||
}
|
||||
for _, parentID := range parents {
|
||||
if nextC.invisible {
|
||||
if err := q.SetInvisible(ctx, parentID); err != nil {
|
||||
if err := q.SetInvisible(ctx, nextC.ddb, parentID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if err := q.AddPendingIfUnseen(ctx, parentID); err != nil {
|
||||
if err := q.AddPendingIfUnseen(ctx, nextC.ddb, parentID); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
@@ -231,7 +230,7 @@ func (i *commiterator) Next(ctx context.Context) (hash.Hash, *doltdb.Commit, err
|
||||
}
|
||||
|
||||
for _, parentID := range parents {
|
||||
if err := i.q.AddPendingIfUnseen(ctx, parentID); err != nil {
|
||||
if err := i.q.AddPendingIfUnseen(ctx, nextC.ddb, parentID); err != nil {
|
||||
return hash.Hash{}, nil, err
|
||||
}
|
||||
}
|
||||
@@ -244,8 +243,8 @@ func (i *commiterator) Next(ctx context.Context) (hash.Hash, *doltdb.Commit, err
|
||||
|
||||
// Reset implements doltdb.CommitItr
|
||||
func (i *commiterator) Reset(ctx context.Context) error {
|
||||
i.q = newQueue(i.ddb)
|
||||
if err := i.q.AddPendingIfUnseen(ctx, i.startCommitHash); err != nil {
|
||||
i.q = newQueue()
|
||||
if err := i.q.AddPendingIfUnseen(ctx, i.ddb, i.startCommitHash); err != nil {
|
||||
return err
|
||||
}
|
||||
return nil
|
||||
|
||||
@@ -25,6 +25,7 @@ import (
|
||||
"github.com/liquidata-inc/dolt/go/libraries/doltcore/env"
|
||||
"github.com/liquidata-inc/dolt/go/libraries/doltcore/ref"
|
||||
"github.com/liquidata-inc/dolt/go/libraries/utils/filesys"
|
||||
"github.com/liquidata-inc/dolt/go/store/datas"
|
||||
"github.com/liquidata-inc/dolt/go/store/hash"
|
||||
"github.com/liquidata-inc/dolt/go/store/types"
|
||||
)
|
||||
@@ -105,34 +106,97 @@ func TestGetDotDotRevisions(t *testing.T) {
|
||||
masterHash := mustGetHash(t, masterCommits[6])
|
||||
featurePreMergeHash := mustGetHash(t, featureCommits[3])
|
||||
|
||||
res, err := GetDotDotRevisions(context.Background(), env.DoltDB, featureHash, masterHash, 100)
|
||||
res, err := GetDotDotRevisions(context.Background(), env.DoltDB, featureHash, env.DoltDB, masterHash, 100)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 7)
|
||||
assert.Equal(t, featureCommits[7], res[0])
|
||||
assert.Equal(t, featureCommits[6], res[1])
|
||||
assert.Equal(t, featureCommits[5], res[2])
|
||||
assert.Equal(t, featureCommits[4], res[3])
|
||||
assert.Equal(t, featureCommits[3], res[4])
|
||||
assert.Equal(t, featureCommits[2], res[5])
|
||||
assert.Equal(t, featureCommits[1], res[6])
|
||||
assertEqualHashes(t, featureCommits[7], res[0])
|
||||
assertEqualHashes(t, featureCommits[6], res[1])
|
||||
assertEqualHashes(t, featureCommits[5], res[2])
|
||||
assertEqualHashes(t, featureCommits[4], res[3])
|
||||
assertEqualHashes(t, featureCommits[3], res[4])
|
||||
assertEqualHashes(t, featureCommits[2], res[5])
|
||||
assertEqualHashes(t, featureCommits[1], res[6])
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, masterHash, featureHash, 100)
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, masterHash, env.DoltDB, featureHash, 100)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 0)
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, featureHash, masterHash, 3)
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, featureHash, env.DoltDB, masterHash, 3)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 3)
|
||||
assert.Equal(t, featureCommits[7], res[0])
|
||||
assert.Equal(t, featureCommits[6], res[1])
|
||||
assert.Equal(t, featureCommits[5], res[2])
|
||||
assertEqualHashes(t, featureCommits[7], res[0])
|
||||
assertEqualHashes(t, featureCommits[6], res[1])
|
||||
assertEqualHashes(t, featureCommits[5], res[2])
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, featurePreMergeHash, masterHash, 3)
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, featurePreMergeHash, env.DoltDB, masterHash, 3)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 3)
|
||||
assert.Equal(t, featureCommits[3], res[0])
|
||||
assert.Equal(t, featureCommits[2], res[1])
|
||||
assert.Equal(t, featureCommits[1], res[2])
|
||||
assertEqualHashes(t, featureCommits[3], res[0])
|
||||
assertEqualHashes(t, featureCommits[2], res[1])
|
||||
assertEqualHashes(t, featureCommits[1], res[2])
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, featurePreMergeHash, env.DoltDB, masterHash, 3)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 3)
|
||||
assertEqualHashes(t, featureCommits[3], res[0])
|
||||
assertEqualHashes(t, featureCommits[2], res[1])
|
||||
assertEqualHashes(t, featureCommits[1], res[2])
|
||||
|
||||
// Create a similar branch to "feature" on a forked repository and GetDotDotRevisions using that as well.
|
||||
forkEnv := mustForkDB(t, env.DoltDB, "feature", featureCommits[4])
|
||||
|
||||
// Create 3 commits on feature branch.
|
||||
for i := 5; i < 8; i++ {
|
||||
featureCommits[i] = mustCreateCommit(t, forkEnv.DoltDB, "feature", rvh, featureCommits[i-1])
|
||||
}
|
||||
|
||||
featureHash = mustGetHash(t, featureCommits[7])
|
||||
masterHash = mustGetHash(t, masterCommits[6])
|
||||
featurePreMergeHash = mustGetHash(t, featureCommits[3])
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, featureHash, env.DoltDB, masterHash, 100)
|
||||
require.Error(t, err)
|
||||
res, err = GetDotDotRevisions(context.Background(), forkEnv.DoltDB, featureHash, env.DoltDB, masterHash, 100)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 7)
|
||||
assertEqualHashes(t, featureCommits[7], res[0])
|
||||
assertEqualHashes(t, featureCommits[6], res[1])
|
||||
assertEqualHashes(t, featureCommits[5], res[2])
|
||||
assertEqualHashes(t, featureCommits[4], res[3])
|
||||
assertEqualHashes(t, featureCommits[3], res[4])
|
||||
assertEqualHashes(t, featureCommits[2], res[5])
|
||||
assertEqualHashes(t, featureCommits[1], res[6])
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, masterHash, env.DoltDB, featureHash, 100)
|
||||
require.Error(t, err)
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, masterHash, forkEnv.DoltDB, featureHash, 100)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 0)
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), forkEnv.DoltDB, featureHash, env.DoltDB, masterHash, 3)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 3)
|
||||
assertEqualHashes(t, featureCommits[7], res[0])
|
||||
assertEqualHashes(t, featureCommits[6], res[1])
|
||||
assertEqualHashes(t, featureCommits[5], res[2])
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), env.DoltDB, featurePreMergeHash, env.DoltDB, masterHash, 3)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 3)
|
||||
assertEqualHashes(t, featureCommits[3], res[0])
|
||||
assertEqualHashes(t, featureCommits[2], res[1])
|
||||
assertEqualHashes(t, featureCommits[1], res[2])
|
||||
|
||||
res, err = GetDotDotRevisions(context.Background(), forkEnv.DoltDB, featurePreMergeHash, env.DoltDB, masterHash, 3)
|
||||
require.NoError(t, err)
|
||||
assert.Len(t, res, 3)
|
||||
assertEqualHashes(t, featureCommits[3], res[0])
|
||||
assertEqualHashes(t, featureCommits[2], res[1])
|
||||
assertEqualHashes(t, featureCommits[1], res[2])
|
||||
}
|
||||
|
||||
func assertEqualHashes(t *testing.T, lc, rc *doltdb.Commit) {
|
||||
assert.Equal(t, mustGetHash(t, lc), mustGetHash(t, rc))
|
||||
}
|
||||
|
||||
func mustCreateCommit(t *testing.T, ddb *doltdb.DoltDB, bn string, rvh hash.Hash, parents ...*doltdb.Commit) *doltdb.Commit {
|
||||
@@ -150,6 +214,29 @@ func mustCreateCommit(t *testing.T, ddb *doltdb.DoltDB, bn string, rvh hash.Hash
|
||||
return commit
|
||||
}
|
||||
|
||||
func mustForkDB(t *testing.T, fromDB *doltdb.DoltDB, bn string, cm *doltdb.Commit) *env.DoltEnv {
|
||||
stref, err := cm.GetStRef()
|
||||
require.NoError(t, err)
|
||||
forkEnv := createUninitializedEnv()
|
||||
err = forkEnv.InitRepo(context.Background(), types.Format_LD_1, "Bill Billerson", "bill@billerson.com")
|
||||
require.NoError(t, err)
|
||||
p1 := make(chan datas.PullProgress)
|
||||
p2 := make(chan datas.PullerEvent)
|
||||
go func() {
|
||||
for range p1 {
|
||||
}
|
||||
}()
|
||||
go func() {
|
||||
for range p2 {
|
||||
}
|
||||
}()
|
||||
err = forkEnv.DoltDB.PullChunks(context.Background(), "", fromDB, stref, p1, p2)
|
||||
require.NoError(t, err)
|
||||
err = forkEnv.DoltDB.SetHead(context.Background(), ref.NewBranchRef(bn), stref)
|
||||
require.NoError(t, err)
|
||||
return forkEnv
|
||||
}
|
||||
|
||||
func mustGetHash(t *testing.T, c *doltdb.Commit) hash.Hash {
|
||||
h, err := c.HashOf()
|
||||
require.NoError(t, err)
|
||||
|
||||
@@ -131,6 +131,7 @@ func (c Column) Equals(other Column) bool {
|
||||
c.Kind == other.Kind &&
|
||||
c.IsPartOfPK == other.IsPartOfPK &&
|
||||
c.TypeInfo.Equals(other.TypeInfo) &&
|
||||
c.Default == other.Default &&
|
||||
ColConstraintsAreEqual(c.Constraints, other.Constraints)
|
||||
}
|
||||
|
||||
|
||||
@@ -75,8 +75,22 @@ func executeModify(ctx context.Context, dEnv *env.DoltEnv, root *doltdb.RootValu
|
||||
return nil, err
|
||||
}
|
||||
|
||||
_, _, err = engine.Query(sqlCtx, query)
|
||||
_, iter, err := engine.Query(sqlCtx, query)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
for {
|
||||
_, err := iter.Next()
|
||||
if err == io.EOF {
|
||||
break
|
||||
}
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
err = iter.Close()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
@@ -59,7 +59,8 @@ func (d *DoltHarness) SkipQueryTest(query string) bool {
|
||||
strings.Contains(lowerQuery, "show full columns") || // we set extra comment info
|
||||
lowerQuery == "show variables" || // we set extra variables
|
||||
strings.Contains(lowerQuery, "show create table") || // we set extra comment info
|
||||
strings.Contains(lowerQuery, "show indexes from") // we create / expose extra indexes (for foreign keys)
|
||||
strings.Contains(lowerQuery, "show indexes from") || // we create / expose extra indexes (for foreign keys)
|
||||
strings.Contains(lowerQuery, "on duplicate key update") // not working yet
|
||||
}
|
||||
|
||||
func (d *DoltHarness) Parallelism() int {
|
||||
|
||||
@@ -210,11 +210,13 @@ func drainIterator(iter sql.RowIter) error {
|
||||
for {
|
||||
_, err := iter.Next()
|
||||
if err == io.EOF {
|
||||
return nil
|
||||
break
|
||||
} else if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return iter.Close()
|
||||
}
|
||||
|
||||
// This shouldn't be necessary -- the fact that an iterator can return an error but not clean up after itself in all
|
||||
|
||||
@@ -200,9 +200,10 @@ func TestSqlBatchInsertErrors(t *testing.T) {
|
||||
assert.NoError(t, drainIter(rowIter))
|
||||
|
||||
// This generates an error at insert time because of the bad type for the uuid column
|
||||
_, _, err = engine.Query(sqlCtx, `insert into people values
|
||||
_, rowIter, err = engine.Query(sqlCtx, `insert into people values
|
||||
(2, "Milhouse", "VanHouten", false, 1, 5.1, true, 677)`)
|
||||
assert.Error(t, err)
|
||||
assert.NoError(t, err)
|
||||
assert.Error(t, drainIter(rowIter))
|
||||
|
||||
// Error from the first statement appears here
|
||||
assert.Error(t, db.Flush(sqlCtx))
|
||||
|
||||
@@ -95,8 +95,9 @@ func (te *sqlTableEditor) Close(ctx *sql.Context) error {
|
||||
func (te *sqlTableEditor) flush(ctx *sql.Context) error {
|
||||
newRoot, err := te.tableEditor.Flush(ctx)
|
||||
if err != nil {
|
||||
return errhand.BuildDError("failed to write table back to database").AddCause(err).Build()
|
||||
return err
|
||||
}
|
||||
|
||||
newTable, ok, err := newRoot.GetTable(ctx, te.t.name)
|
||||
if err != nil {
|
||||
return errhand.BuildDError("failed to load updated table").AddCause(err).Build()
|
||||
|
||||
@@ -152,13 +152,13 @@ func ExecuteSelect(dEnv *env.DoltEnv, ddb *doltdb.DoltDB, root *doltdb.RootValue
|
||||
}
|
||||
|
||||
func drainIter(iter sql.RowIter) error {
|
||||
var returnedErr error
|
||||
for {
|
||||
_, err := iter.Next()
|
||||
if err == io.EOF {
|
||||
return returnedErr
|
||||
break
|
||||
} else if err != nil {
|
||||
returnedErr = err
|
||||
return err
|
||||
}
|
||||
}
|
||||
return iter.Close()
|
||||
}
|
||||
|
||||
@@ -71,7 +71,7 @@ func (aq *ActionExecutor) Execute(val interface{}) {
|
||||
aq.syncCond.L.Lock()
|
||||
defer aq.syncCond.L.Unlock()
|
||||
|
||||
if aq.err != nil { // if we've errored before, then no point in running anything again
|
||||
if aq.err != nil { // If we've errored before, then no point in running anything again until we return the error.
|
||||
return
|
||||
}
|
||||
|
||||
@@ -90,7 +90,11 @@ func (aq *ActionExecutor) Execute(val interface{}) {
|
||||
// WaitForEmpty waits until the queue is empty, and then returns any errors that any actions may have encountered.
|
||||
func (aq *ActionExecutor) WaitForEmpty() error {
|
||||
aq.finished.Wait()
|
||||
return aq.err
|
||||
aq.syncCond.L.Lock()
|
||||
defer aq.syncCond.L.Unlock()
|
||||
err := aq.err
|
||||
aq.err = nil
|
||||
return err
|
||||
}
|
||||
|
||||
// work runs until the list is empty. If any error occurs from any action, then we do not call any further actions,
|
||||
|
||||
@@ -130,8 +130,8 @@ func TestActionExecutorError(t *testing.T) {
|
||||
}
|
||||
err := actionExecutor.WaitForEmpty()
|
||||
assert.Error(t, err)
|
||||
sameErr := actionExecutor.WaitForEmpty()
|
||||
assert.Equal(t, err, sameErr)
|
||||
err = actionExecutor.WaitForEmpty()
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -192,7 +192,7 @@ func getMergeCandidates(ctx context.Context, db datas.Database, leftDS, rightDS
|
||||
}
|
||||
|
||||
func getCommonAncestor(ctx context.Context, r1, r2 types.Ref, vr types.ValueReader) (a types.Struct, found bool) {
|
||||
aRef, found, err := datas.FindCommonAncestor(ctx, r1, r2, vr)
|
||||
aRef, found, err := datas.FindCommonAncestor(ctx, r1, r2, vr, vr)
|
||||
d.PanicIfError(err)
|
||||
if !found {
|
||||
return
|
||||
|
||||
@@ -23,6 +23,7 @@ package datas
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
"github.com/liquidata-inc/dolt/go/store/d"
|
||||
@@ -76,8 +77,9 @@ func NewCommit(ctx context.Context, value types.Value, parentsList types.List, m
|
||||
|
||||
// FindCommonAncestor returns the most recent common ancestor of c1 and c2, if
|
||||
// one exists, setting ok to true. If there is no common ancestor, ok is set
|
||||
// to false.
|
||||
func FindCommonAncestor(ctx context.Context, c1, c2 types.Ref, vr types.ValueReader) (a types.Ref, ok bool, err error) {
|
||||
// to false. Refs of |c1| are dereferenced through |vr1|, while refs of |c2|
|
||||
// are dereference through |vr2|.
|
||||
func FindCommonAncestor(ctx context.Context, c1, c2 types.Ref, vr1, vr2 types.ValueReader) (a types.Ref, ok bool, err error) {
|
||||
t1, err := types.TypeOf(c1)
|
||||
|
||||
if err != nil {
|
||||
@@ -107,12 +109,24 @@ func FindCommonAncestor(ctx context.Context, c1, c2 types.Ref, vr types.ValueRea
|
||||
if common, ok := findCommonRef(c1Parents, c2Parents); ok {
|
||||
return common, true, nil
|
||||
}
|
||||
parentsToQueue(ctx, c1Parents, c1Q, vr)
|
||||
parentsToQueue(ctx, c2Parents, c2Q, vr)
|
||||
err = parentsToQueue(ctx, c1Parents, c1Q, vr1)
|
||||
if err != nil {
|
||||
return types.Ref{}, false, err
|
||||
}
|
||||
err = parentsToQueue(ctx, c2Parents, c2Q, vr2)
|
||||
if err != nil {
|
||||
return types.Ref{}, false, err
|
||||
}
|
||||
} else if c1Ht > c2Ht {
|
||||
parentsToQueue(ctx, c1Q.PopRefsOfHeight(c1Ht), c1Q, vr)
|
||||
err = parentsToQueue(ctx, c1Q.PopRefsOfHeight(c1Ht), c1Q, vr1)
|
||||
if err != nil {
|
||||
return types.Ref{}, false, err
|
||||
}
|
||||
} else {
|
||||
parentsToQueue(ctx, c2Q.PopRefsOfHeight(c2Ht), c2Q, vr)
|
||||
err = parentsToQueue(ctx, c2Q.PopRefsOfHeight(c2Ht), c2Q, vr2)
|
||||
if err != nil {
|
||||
return types.Ref{}, false, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,24 +142,39 @@ func parentsToQueue(ctx context.Context, refs types.RefSlice, q *types.RefByHeig
|
||||
seen[r.TargetHash()] = true
|
||||
|
||||
v, err := r.TargetValue(ctx, vr)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if v == nil {
|
||||
return fmt.Errorf("target not found: %v", r.TargetHash())
|
||||
}
|
||||
|
||||
c := v.(types.Struct)
|
||||
ps, ok, err := c.MaybeGet(ParentsField)
|
||||
|
||||
c, ok := v.(types.Struct)
|
||||
if !ok {
|
||||
return fmt.Errorf("target ref is not struct: %v", v)
|
||||
}
|
||||
ps, ok, err := c.MaybeGet(ParentsListField)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
if ok {
|
||||
p := ps.(types.Set)
|
||||
err = p.IterAll(ctx, func(v types.Value) error {
|
||||
p := ps.(types.List)
|
||||
err = p.IterAll(ctx, func(v types.Value, _ uint64) error {
|
||||
q.PushBack(v.(types.Ref))
|
||||
return nil
|
||||
})
|
||||
} else {
|
||||
ps, ok, err := c.MaybeGet(ParentsField)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if ok {
|
||||
p := ps.(types.Set)
|
||||
err = p.IterAll(ctx, func(v types.Value) error {
|
||||
q.PushBack(v.(types.Ref))
|
||||
return nil
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -243,12 +243,9 @@ func toRefList(vrw types.ValueReadWriter, commits ...types.Struct) (types.List,
|
||||
|
||||
func TestFindCommonAncestor(t *testing.T) {
|
||||
assert := assert.New(t)
|
||||
storage := &chunks.TestStorage{}
|
||||
db := NewDatabase(storage.NewView())
|
||||
defer db.Close()
|
||||
|
||||
// Add a commit and return it
|
||||
addCommit := func(datasetID string, val string, parents ...types.Struct) types.Struct {
|
||||
addCommit := func(db Database, datasetID string, val string, parents ...types.Struct) types.Struct {
|
||||
ds, err := db.GetDataset(context.Background(), datasetID)
|
||||
assert.NoError(err)
|
||||
ds, err = db.Commit(context.Background(), ds, types.String(val), CommitOptions{ParentsList: mustList(toRefList(db, parents...))})
|
||||
@@ -257,12 +254,12 @@ func TestFindCommonAncestor(t *testing.T) {
|
||||
}
|
||||
|
||||
// Assert that c is the common ancestor of a and b
|
||||
assertCommonAncestor := func(expected, a, b types.Struct) {
|
||||
found, ok, err := FindCommonAncestor(context.Background(), mustRef(types.NewRef(a, types.Format_7_18)), mustRef(types.NewRef(b, types.Format_7_18)), db)
|
||||
assertCommonAncestor := func(expected, a, b types.Struct, ldb, rdb Database) {
|
||||
found, ok, err := FindCommonAncestor(context.Background(), mustRef(types.NewRef(a, types.Format_7_18)), mustRef(types.NewRef(b, types.Format_7_18)), ldb, rdb)
|
||||
assert.NoError(err)
|
||||
|
||||
if assert.True(ok) {
|
||||
tv, err := found.TargetValue(context.Background(), db)
|
||||
tv, err := found.TargetValue(context.Background(), ldb)
|
||||
assert.NoError(err)
|
||||
ancestor := tv.(types.Struct)
|
||||
expV, _, _ := expected.MaybeGet(ValueField)
|
||||
@@ -280,6 +277,9 @@ func TestFindCommonAncestor(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
storage := &chunks.TestStorage{}
|
||||
db := NewDatabase(storage.NewView())
|
||||
|
||||
// Build commit DAG
|
||||
//
|
||||
// ds-a: a1<-a2<-a3<-a4<-a5<-a6
|
||||
@@ -296,28 +296,28 @@ func TestFindCommonAncestor(t *testing.T) {
|
||||
// ds-d: d1<-d2
|
||||
//
|
||||
a, b, c, d := "ds-a", "ds-b", "ds-c", "ds-d"
|
||||
a1 := addCommit(a, "a1")
|
||||
d1 := addCommit(d, "d1")
|
||||
a2 := addCommit(a, "a2", a1)
|
||||
c2 := addCommit(c, "c2", a1)
|
||||
d2 := addCommit(d, "d2", d1)
|
||||
a3 := addCommit(a, "a3", a2)
|
||||
b3 := addCommit(b, "b3", a2)
|
||||
c3 := addCommit(c, "c3", c2, d2)
|
||||
a4 := addCommit(a, "a4", a3)
|
||||
b4 := addCommit(b, "b4", b3)
|
||||
a5 := addCommit(a, "a5", a4)
|
||||
b5 := addCommit(b, "b5", b4, a3)
|
||||
a6 := addCommit(a, "a6", a5, b5)
|
||||
a1 := addCommit(db, a, "a1")
|
||||
d1 := addCommit(db, d, "d1")
|
||||
a2 := addCommit(db, a, "a2", a1)
|
||||
c2 := addCommit(db, c, "c2", a1)
|
||||
d2 := addCommit(db, d, "d2", d1)
|
||||
a3 := addCommit(db, a, "a3", a2)
|
||||
b3 := addCommit(db, b, "b3", a2)
|
||||
c3 := addCommit(db, c, "c3", c2, d2)
|
||||
a4 := addCommit(db, a, "a4", a3)
|
||||
b4 := addCommit(db, b, "b4", b3)
|
||||
a5 := addCommit(db, a, "a5", a4)
|
||||
b5 := addCommit(db, b, "b5", b4, a3)
|
||||
a6 := addCommit(db, a, "a6", a5, b5)
|
||||
|
||||
assertCommonAncestor(a1, a1, a1) // All self
|
||||
assertCommonAncestor(a1, a1, a2) // One side self
|
||||
assertCommonAncestor(a2, a3, b3) // Common parent
|
||||
assertCommonAncestor(a2, a4, b4) // Common grandparent
|
||||
assertCommonAncestor(a1, a6, c3) // Traversing multiple parents on both sides
|
||||
assertCommonAncestor(a1, a1, a1, db, db) // All self
|
||||
assertCommonAncestor(a1, a1, a2, db, db) // One side self
|
||||
assertCommonAncestor(a2, a3, b3, db, db) // Common parent
|
||||
assertCommonAncestor(a2, a4, b4, db, db) // Common grandparent
|
||||
assertCommonAncestor(a1, a6, c3, db, db) // Traversing multiple parents on both sides
|
||||
|
||||
// No common ancestor
|
||||
found, ok, err := FindCommonAncestor(context.Background(), mustRef(types.NewRef(d2, types.Format_7_18)), mustRef(types.NewRef(a6, types.Format_7_18)), db)
|
||||
found, ok, err := FindCommonAncestor(context.Background(), mustRef(types.NewRef(d2, types.Format_7_18)), mustRef(types.NewRef(a6, types.Format_7_18)), db, db)
|
||||
assert.NoError(err)
|
||||
|
||||
if !assert.False(ok) {
|
||||
@@ -334,6 +334,68 @@ func TestFindCommonAncestor(t *testing.T) {
|
||||
fV,
|
||||
)
|
||||
}
|
||||
|
||||
assert.NoError(db.Close())
|
||||
|
||||
storage = &chunks.TestStorage{}
|
||||
db = NewDatabase(storage.NewView())
|
||||
defer db.Close()
|
||||
|
||||
rstorage := &chunks.TestStorage{}
|
||||
rdb := NewDatabase(rstorage.NewView())
|
||||
defer rdb.Close()
|
||||
|
||||
// Rerun the tests when using two difference Databases for left and
|
||||
// right commits. Both databases have all the previous commits.
|
||||
a, b, c, d = "ds-a", "ds-b", "ds-c", "ds-d"
|
||||
a1 = addCommit(db, a, "a1")
|
||||
d1 = addCommit(db, d, "d1")
|
||||
a2 = addCommit(db, a, "a2", a1)
|
||||
c2 = addCommit(db, c, "c2", a1)
|
||||
d2 = addCommit(db, d, "d2", d1)
|
||||
a3 = addCommit(db, a, "a3", a2)
|
||||
b3 = addCommit(db, b, "b3", a2)
|
||||
c3 = addCommit(db, c, "c3", c2, d2)
|
||||
a4 = addCommit(db, a, "a4", a3)
|
||||
b4 = addCommit(db, b, "b4", b3)
|
||||
a5 = addCommit(db, a, "a5", a4)
|
||||
b5 = addCommit(db, b, "b5", b4, a3)
|
||||
a6 = addCommit(db, a, "a6", a5, b5)
|
||||
|
||||
addCommit(rdb, a, "a1")
|
||||
addCommit(rdb, d, "d1")
|
||||
addCommit(rdb, a, "a2", a1)
|
||||
addCommit(rdb, c, "c2", a1)
|
||||
addCommit(rdb, d, "d2", d1)
|
||||
addCommit(rdb, a, "a3", a2)
|
||||
addCommit(rdb, b, "b3", a2)
|
||||
addCommit(rdb, c, "c3", c2, d2)
|
||||
addCommit(rdb, a, "a4", a3)
|
||||
addCommit(rdb, b, "b4", b3)
|
||||
addCommit(rdb, a, "a5", a4)
|
||||
addCommit(rdb, b, "b5", b4, a3)
|
||||
addCommit(rdb, a, "a6", a5, b5)
|
||||
|
||||
// Additionally, |db| has a6<-a7<-a8<-a9.
|
||||
// |rdb| has a6<-ra7<-ra8<-ra9.
|
||||
a7 := addCommit(db, a, "a7", a6)
|
||||
a8 := addCommit(db, a, "a8", a7)
|
||||
a9 := addCommit(db, a, "a9", a8)
|
||||
|
||||
ra7 := addCommit(rdb, a, "ra7", a6)
|
||||
ra8 := addCommit(rdb, a, "ra8", ra7)
|
||||
ra9 := addCommit(rdb, a, "ra9", ra8)
|
||||
|
||||
assertCommonAncestor(a1, a1, a1, db, rdb) // All self
|
||||
assertCommonAncestor(a1, a1, a2, db, rdb) // One side self
|
||||
assertCommonAncestor(a2, a3, b3, db, rdb) // Common parent
|
||||
assertCommonAncestor(a2, a4, b4, db, rdb) // Common grandparent
|
||||
assertCommonAncestor(a1, a6, c3, db, rdb) // Traversing multiple parents on both sides
|
||||
|
||||
assertCommonAncestor(a6, a9, ra9, db, rdb) // Common third parent
|
||||
|
||||
_, _, err = FindCommonAncestor(context.Background(), mustRef(types.NewRef(a9, types.Format_7_18)), mustRef(types.NewRef(ra9, types.Format_7_18)), rdb, db)
|
||||
assert.Error(err)
|
||||
}
|
||||
|
||||
func TestNewCommitRegressionTest(t *testing.T) {
|
||||
|
||||
@@ -361,7 +361,7 @@ func (db *database) doCommit(ctx context.Context, datasetID string, commit types
|
||||
return err
|
||||
}
|
||||
|
||||
ancestorRef, found, err := FindCommonAncestor(ctx, commitRef, currentHeadRef, db)
|
||||
ancestorRef, found, err := FindCommonAncestor(ctx, commitRef, currentHeadRef, db, db)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
|
||||
52
mysql-client-tests/go/go-sql-driver-mysql-test.go
Normal file
52
mysql-client-tests/go/go-sql-driver-mysql-test.go
Normal file
@@ -0,0 +1,52 @@
|
||||
package main
|
||||
|
||||
import "os"
|
||||
import "fmt"
|
||||
|
||||
import "database/sql"
|
||||
import _ "github.com/go-sql-driver/mysql"
|
||||
|
||||
var queries [5]string = [5]string{
|
||||
"create table test (pk int, value int, primary key(pk))",
|
||||
"describe test",
|
||||
"select * from test",
|
||||
"insert into test (pk, value) values (0,0)",
|
||||
"select * from test"}
|
||||
|
||||
func main() {
|
||||
var user = os.Args[1]
|
||||
var port = os.Args[2]
|
||||
var db = os.Args[3]
|
||||
|
||||
var dsn = user + "@tcp(127.0.0.1:" + port + ")/" + db
|
||||
fmt.Println(dsn)
|
||||
|
||||
database, err := sql.Open("mysql", dsn)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
defer database.Close()
|
||||
|
||||
// Ping opens a connection
|
||||
err = database.Ping()
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
for _, query := range queries {
|
||||
rows, err := database.Query(query)
|
||||
if err != nil {
|
||||
fmt.Println("QUERY: " + query)
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Ignoring result as only way to get results is rows.Next()
|
||||
// Requires custom typoing of the results.
|
||||
|
||||
rows.Close()
|
||||
}
|
||||
|
||||
os.Exit(0)
|
||||
}
|
||||
@@ -27,6 +27,10 @@ teardown() {
|
||||
rm -rf $REPO_NAME
|
||||
}
|
||||
|
||||
@test "go go-sql-drive/mysql test" {
|
||||
go run $BATS_TEST_DIRNAME/go/go-sql-driver-mysql-test.go $USER $PORT $REPO_NAME
|
||||
}
|
||||
|
||||
@test "python mysql.connector client" {
|
||||
python3 $BATS_TEST_DIRNAME/python/mysql.connector-test.py $USER $PORT $REPO_NAME
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user