From ad43897ac1ba7721776e3b020bcc14e01125b5d1 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Thu, 10 Sep 2020 20:03:07 -0700 Subject: [PATCH 01/26] Update executeModify to close iterators Signed-off-by: Zach Musgrave --- go/libraries/doltcore/sqle/common_test.go | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/go/libraries/doltcore/sqle/common_test.go b/go/libraries/doltcore/sqle/common_test.go index 56b9857c03..cb5fb9744c 100644 --- a/go/libraries/doltcore/sqle/common_test.go +++ b/go/libraries/doltcore/sqle/common_test.go @@ -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 } From 8a42477249859ed81f1fc6d35c75b0f993769ec0 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Thu, 10 Sep 2020 20:23:19 -0700 Subject: [PATCH 02/26] Drain and close the iterator in test command Signed-off-by: Zach Musgrave --- .../doltcore/dtestutils/testcommands/command.go | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/go/libraries/doltcore/dtestutils/testcommands/command.go b/go/libraries/doltcore/dtestutils/testcommands/command.go index 0e08f0240f..a78c87abf7 100644 --- a/go/libraries/doltcore/dtestutils/testcommands/command.go +++ b/go/libraries/doltcore/dtestutils/testcommands/command.go @@ -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 } From 0db1fd9f9c7cc5c16c0da5bccb8a49394c73470a Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Thu, 10 Sep 2020 20:28:22 -0700 Subject: [PATCH 03/26] Drain the row iter on the dolt harness Signed-off-by: Zach Musgrave --- go/libraries/doltcore/sqle/logictest/dolt/doltharness.go | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/go/libraries/doltcore/sqle/logictest/dolt/doltharness.go b/go/libraries/doltcore/sqle/logictest/dolt/doltharness.go index a28070bf33..743eebbe54 100644 --- a/go/libraries/doltcore/sqle/logictest/dolt/doltharness.go +++ b/go/libraries/doltcore/sqle/logictest/dolt/doltharness.go @@ -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 From 9db0d26f839840a9109527c635dd6ffe5d57e535 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Fri, 11 Sep 2020 12:05:46 -0700 Subject: [PATCH 04/26] Fixed final errors to use latest go-mysql-server. This exposed several bugs in type coercion in update operations. Signed-off-by: Zach Musgrave --- go/cmd/dolt/commands/sql.go | 9 +++- .../doltcore/sqle/enginetest/dolt_harness.go | 7 +++- go/libraries/doltcore/sqle/sqlbatch_test.go | 4 +- go/libraries/doltcore/sqle/sqlupdate_test.go | 42 ++++++++++--------- go/libraries/doltcore/sqle/testutil.go | 6 +-- 5 files changed, 40 insertions(+), 28 deletions(-) diff --git a/go/cmd/dolt/commands/sql.go b/go/cmd/dolt/commands/sql.go index c5da74ab88..9c15c178cb 100644 --- a/go/cmd/dolt/commands/sql.go +++ b/go/cmd/dolt/commands/sql.go @@ -1285,9 +1285,14 @@ 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() + defer func() { + err := iter.Close() + if returnErr == nil { + returnErr = err + } + }() if err != nil { return err diff --git a/go/libraries/doltcore/sqle/enginetest/dolt_harness.go b/go/libraries/doltcore/sqle/enginetest/dolt_harness.go index 93756126d1..c73bd5875b 100755 --- a/go/libraries/doltcore/sqle/enginetest/dolt_harness.go +++ b/go/libraries/doltcore/sqle/enginetest/dolt_harness.go @@ -59,9 +59,14 @@ 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 + strings.Contains(lowerQuery, `update mytable set i = ("one", "two")`) || + strings.Contains(lowerQuery, `update mytable set i = "one"`) || + strings.Contains(lowerQuery, `update floattable set f64 = "one"`) } + func (d *DoltHarness) Parallelism() int { // always test with some parallelism parallelism := runtime.NumCPU() diff --git a/go/libraries/doltcore/sqle/sqlbatch_test.go b/go/libraries/doltcore/sqle/sqlbatch_test.go index 7d13f26506..13706b16f4 100644 --- a/go/libraries/doltcore/sqle/sqlbatch_test.go +++ b/go/libraries/doltcore/sqle/sqlbatch_test.go @@ -200,9 +200,9 @@ 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.Error(t, drainIter(rowIter)) // Error from the first statement appears here assert.Error(t, db.Flush(sqlCtx)) diff --git a/go/libraries/doltcore/sqle/sqlupdate_test.go b/go/libraries/doltcore/sqle/sqlupdate_test.go index 75376068d4..04588af1fe 100644 --- a/go/libraries/doltcore/sqle/sqlupdate_test.go +++ b/go/libraries/doltcore/sqle/sqlupdate_test.go @@ -315,31 +315,33 @@ var BasicUpdateTests = []UpdateTest{ UpdateQuery: `update people set first_name = null where id = 0`, ExpectedErr: "Constraint failed for column 'first_name': Not null", }, - { - Name: "type mismatch list -> string", - UpdateQuery: `update people set first_name = ("one", "two") where id = 0`, - ExpectedErr: "Type mismatch", - }, + // TODO: fix + // { + // Name: "type mismatch list -> string", + // UpdateQuery: `update people set first_name = ("one", "two") where id = 0`, + // ExpectedErr: "Type mismatch", + // }, { Name: "type mismatch int -> uuid", UpdateQuery: `update people set uuid = 0 where id = 0`, ExpectedErr: "Type mismatch", }, - { - Name: "type mismatch string -> int", - UpdateQuery: `update people set age = "pretty old" where id = 0`, - ExpectedErr: "Type mismatch", - }, - { - Name: "type mismatch string -> float", - UpdateQuery: `update people set rating = "great" where id = 0`, - ExpectedErr: "Type mismatch", - }, - { - Name: "type mismatch string -> uint", - UpdateQuery: `update people set num_episodes = "all of them" where id = 0`, - ExpectedErr: "Type mismatch", - }, + // TODO: fix + // { + // Name: "type mismatch string -> int", + // UpdateQuery: `update people set age = "pretty old" where id = 0`, + // ExpectedErr: "Type mismatch", + // }, + // { + // Name: "type mismatch string -> float", + // UpdateQuery: `update people set rating = "great" where id = 0`, + // ExpectedErr: "Type mismatch", + // }, + // { + // Name: "type mismatch string -> uint", + // UpdateQuery: `update people set num_episodes = "all of them" where id = 0`, + // ExpectedErr: "Type mismatch", + // }, { Name: "type mismatch string -> uuid", UpdateQuery: `update people set uuid = "not a uuid string" where id = 0`, diff --git a/go/libraries/doltcore/sqle/testutil.go b/go/libraries/doltcore/sqle/testutil.go index 89f08f55dc..c52a03d930 100644 --- a/go/libraries/doltcore/sqle/testutil.go +++ b/go/libraries/doltcore/sqle/testutil.go @@ -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() } From 100a84c69ace072ee4ccaa8283bcc57ce7a7cd8c Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Fri, 11 Sep 2020 14:28:57 -0700 Subject: [PATCH 05/26] Unskipping tests after fixing bug Signed-off-by: Zach Musgrave --- .../doltcore/sqle/enginetest/dolt_harness.go | 5 +-- go/libraries/doltcore/sqle/sqlupdate_test.go | 42 +++++++++---------- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/go/libraries/doltcore/sqle/enginetest/dolt_harness.go b/go/libraries/doltcore/sqle/enginetest/dolt_harness.go index c73bd5875b..72a228c708 100755 --- a/go/libraries/doltcore/sqle/enginetest/dolt_harness.go +++ b/go/libraries/doltcore/sqle/enginetest/dolt_harness.go @@ -60,10 +60,7 @@ func (d *DoltHarness) SkipQueryTest(query string) bool { 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, "on duplicate key update") || // not working yet - strings.Contains(lowerQuery, `update mytable set i = ("one", "two")`) || - strings.Contains(lowerQuery, `update mytable set i = "one"`) || - strings.Contains(lowerQuery, `update floattable set f64 = "one"`) + strings.Contains(lowerQuery, "on duplicate key update") // not working yet } diff --git a/go/libraries/doltcore/sqle/sqlupdate_test.go b/go/libraries/doltcore/sqle/sqlupdate_test.go index 04588af1fe..75376068d4 100644 --- a/go/libraries/doltcore/sqle/sqlupdate_test.go +++ b/go/libraries/doltcore/sqle/sqlupdate_test.go @@ -315,33 +315,31 @@ var BasicUpdateTests = []UpdateTest{ UpdateQuery: `update people set first_name = null where id = 0`, ExpectedErr: "Constraint failed for column 'first_name': Not null", }, - // TODO: fix - // { - // Name: "type mismatch list -> string", - // UpdateQuery: `update people set first_name = ("one", "two") where id = 0`, - // ExpectedErr: "Type mismatch", - // }, + { + Name: "type mismatch list -> string", + UpdateQuery: `update people set first_name = ("one", "two") where id = 0`, + ExpectedErr: "Type mismatch", + }, { Name: "type mismatch int -> uuid", UpdateQuery: `update people set uuid = 0 where id = 0`, ExpectedErr: "Type mismatch", }, - // TODO: fix - // { - // Name: "type mismatch string -> int", - // UpdateQuery: `update people set age = "pretty old" where id = 0`, - // ExpectedErr: "Type mismatch", - // }, - // { - // Name: "type mismatch string -> float", - // UpdateQuery: `update people set rating = "great" where id = 0`, - // ExpectedErr: "Type mismatch", - // }, - // { - // Name: "type mismatch string -> uint", - // UpdateQuery: `update people set num_episodes = "all of them" where id = 0`, - // ExpectedErr: "Type mismatch", - // }, + { + Name: "type mismatch string -> int", + UpdateQuery: `update people set age = "pretty old" where id = 0`, + ExpectedErr: "Type mismatch", + }, + { + Name: "type mismatch string -> float", + UpdateQuery: `update people set rating = "great" where id = 0`, + ExpectedErr: "Type mismatch", + }, + { + Name: "type mismatch string -> uint", + UpdateQuery: `update people set num_episodes = "all of them" where id = 0`, + ExpectedErr: "Type mismatch", + }, { Name: "type mismatch string -> uuid", UpdateQuery: `update people set uuid = "not a uuid string" where id = 0`, From 49a9c6a5d389df6ccaa664c6de1a297e73548be7 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Fri, 11 Sep 2020 14:51:30 -0700 Subject: [PATCH 06/26] Updated to latest vitess / go-mysql-server Signed-off-by: Zach Musgrave --- go/go.mod | 4 +-- go/go.sum | 85 ++++--------------------------------------------------- 2 files changed, 7 insertions(+), 82 deletions(-) diff --git a/go/go.mod b/go/go.mod index 02d9edc3e9..4f8bed6217 100644 --- a/go/go.mod +++ b/go/go.mod @@ -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 diff --git a/go/go.sum b/go/go.sum index e6a420aeea..3803378c54 100644 --- a/go/go.sum +++ b/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= From 47aa939c4470cffee43f10aab77c2ba4538b59a8 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Fri, 11 Sep 2020 16:14:38 -0700 Subject: [PATCH 07/26] Fixed many more places where we weren't handling query errors appropriately. Signed-off-by: Zach Musgrave --- go/cmd/dolt/commands/sql.go | 40 +++++++++++++++++++++++++------------ 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/go/cmd/dolt/commands/sql.go b/go/cmd/dolt/commands/sql.go index 9c15c178cb..55bc5fc4f6 100644 --- a/go/cmd/dolt/commands/sql.go +++ b/go/cmd/dolt/commands/sql.go @@ -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 { @@ -971,14 +982,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()) @@ -1287,13 +1303,11 @@ func (se *sqlEngine) prettyPrintResults(ctx context.Context, sqlSch sql.Schema, func printOKResult(ctx context.Context, iter sql.RowIter) (returnErr error) { row, err := iter.Next() - defer func() { - err := iter.Close() - if returnErr == nil { - returnErr = err - } - }() + if err != nil { + return err + } + err = iter.Close() if err != nil { return err } @@ -1424,7 +1438,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: From 2bd381288df61444fcfd8e6cc9245c2fda9df224 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Fri, 11 Sep 2020 16:17:14 -0700 Subject: [PATCH 08/26] One more place we weren't checking the err value on Close() Signed-off-by: Zach Musgrave --- go/cmd/dolt/commands/sql.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/go/cmd/dolt/commands/sql.go b/go/cmd/dolt/commands/sql.go index 55bc5fc4f6..4fd512cd35 100644 --- a/go/cmd/dolt/commands/sql.go +++ b/go/cmd/dolt/commands/sql.go @@ -944,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 { @@ -957,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()) From 69a6288fc223edb841a2b24b7b0f0c393eafe0b9 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Fri, 11 Sep 2020 17:41:04 -0700 Subject: [PATCH 09/26] Better error formatting for duplicate key errors (don't include tags) Signed-off-by: Zach Musgrave --- go/libraries/doltcore/doltdb/table_editor.go | 46 +++++++++++++++++--- go/libraries/doltcore/sqle/table_editor.go | 3 +- 2 files changed, 42 insertions(+), 7 deletions(-) diff --git a/go/libraries/doltcore/doltdb/table_editor.go b/go/libraries/doltcore/doltdb/table_editor.go index 35875298ff..fcf081dcce 100644 --- a/go/libraries/doltcore/doltdb/table_editor.go +++ b/go/libraries/doltcore/doltdb/table_editor.go @@ -31,7 +31,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 +173,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, te.nbf, 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 +247,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, te.nbf, 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 +400,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, te.nbf, addedKey) if err != nil { return err } - return fmt.Errorf(ErrDuplicatePrimaryKeyFmt, value) + return fmt.Errorf(ErrDuplicatePrimaryKeyFmt, keyStr) } } } @@ -440,6 +443,37 @@ func (te *TableEditor) flushEditAccumulator(ctx context.Context, teaInterface in return nil } +// formatKey returns a comma-separated string represnetation of the key given. +func formatKey(ctx context.Context, nbf *types.NomsBinFormat, key types.Value) (string, error) { + tuple, ok := key.(types.Tuple) + if !ok { + return "", fmt.Errorf("Expected types.Tuple but got %T", key) + } + + var vals []types.Value + 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 { + vals = append(vals, val) + } + } + + valsOnlyTuple, err := types.NewTuple(nbf, vals...) + if err != nil { + return "", err + } + + return types.EncodedValue(ctx, valsOnlyTuple) +} + func (te *TableEditor) getIndexIterator(ctx context.Context, key types.Tuple, indexName string) (table.TableReadCloser, error) { var indexEd *IndexEditor for _, ie := range te.indexEds { diff --git a/go/libraries/doltcore/sqle/table_editor.go b/go/libraries/doltcore/sqle/table_editor.go index 1630c5ddc8..b55b6f4fcb 100644 --- a/go/libraries/doltcore/sqle/table_editor.go +++ b/go/libraries/doltcore/sqle/table_editor.go @@ -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() From 31a9cf7e018eede9a3f450eb372e821ef6cbee47 Mon Sep 17 00:00:00 2001 From: Daylon Wilkins Date: Fri, 11 Sep 2020 14:51:44 -0700 Subject: [PATCH 10/26] Fixed bug with diffing column defaults --- go/cmd/dolt/commands/diff.go | 3 ++- go/libraries/doltcore/schema/column.go | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/go/cmd/dolt/commands/diff.go b/go/cmd/dolt/commands/diff.go index 5436fc28da..c7ffef793a 100644 --- a/go/cmd/dolt/commands/diff.go +++ b/go/cmd/dolt/commands/diff.go @@ -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 { diff --git a/go/libraries/doltcore/schema/column.go b/go/libraries/doltcore/schema/column.go index 76f79b5338..1c6001d1aa 100644 --- a/go/libraries/doltcore/schema/column.go +++ b/go/libraries/doltcore/schema/column.go @@ -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) } From 6bc14c11604d7b27064132ba3ba91b4bc3330f9d Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Sat, 12 Sep 2020 15:11:35 -0700 Subject: [PATCH 11/26] Formatting Signed-off-by: Zach Musgrave --- go/libraries/doltcore/doltdb/table_editor.go | 4 ++-- go/libraries/doltcore/sqle/enginetest/dolt_harness.go | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/go/libraries/doltcore/doltdb/table_editor.go b/go/libraries/doltcore/doltdb/table_editor.go index fcf081dcce..c212bcc30a 100644 --- a/go/libraries/doltcore/doltdb/table_editor.go +++ b/go/libraries/doltcore/doltdb/table_editor.go @@ -173,7 +173,7 @@ func (te *TableEditor) GetIndexedRows(ctx context.Context, key types.Tuple, inde return nil, err } if fieldsVal == nil { - keyStr, err := formatKey(ctx, te.nbf, key) + keyStr, err := formatKey(ctx, te.nbf, key) if err != nil { return nil, err } @@ -461,7 +461,7 @@ func formatKey(ctx context.Context, nbf *types.NomsBinFormat, key types.Value) ( if err != nil { return "", err } - if i % 2 == 1 { + if i%2 == 1 { vals = append(vals, val) } } diff --git a/go/libraries/doltcore/sqle/enginetest/dolt_harness.go b/go/libraries/doltcore/sqle/enginetest/dolt_harness.go index 72a228c708..d9f72b889c 100755 --- a/go/libraries/doltcore/sqle/enginetest/dolt_harness.go +++ b/go/libraries/doltcore/sqle/enginetest/dolt_harness.go @@ -63,7 +63,6 @@ func (d *DoltHarness) SkipQueryTest(query string) bool { strings.Contains(lowerQuery, "on duplicate key update") // not working yet } - func (d *DoltHarness) Parallelism() int { // always test with some parallelism parallelism := runtime.NumCPU() From 3b8c8f36498c281dd5b7acdeea2f09473be40a92 Mon Sep 17 00:00:00 2001 From: Zach Musgrave Date: Sun, 13 Sep 2020 13:55:59 -0700 Subject: [PATCH 12/26] PR feedback, and more efficient way of formatting key value strings Signed-off-by: Zach Musgrave --- go/libraries/doltcore/doltdb/table_editor.go | 26 ++++++++++---------- go/libraries/doltcore/sqle/sqlbatch_test.go | 1 + 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/go/libraries/doltcore/doltdb/table_editor.go b/go/libraries/doltcore/doltdb/table_editor.go index c212bcc30a..fce9c504e4 100644 --- a/go/libraries/doltcore/doltdb/table_editor.go +++ b/go/libraries/doltcore/doltdb/table_editor.go @@ -18,6 +18,7 @@ import ( "context" "fmt" "io" + "strings" "sync" "github.com/liquidata-inc/dolt/go/libraries/doltcore/table" @@ -173,7 +174,7 @@ func (te *TableEditor) GetIndexedRows(ctx context.Context, key types.Tuple, inde return nil, err } if fieldsVal == nil { - keyStr, err := formatKey(ctx, te.nbf, key) + keyStr, err := formatKey(ctx, key) if err != nil { return nil, err } @@ -247,7 +248,7 @@ 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 { - keyStr, err := formatKey(ctx, te.nbf, key) + keyStr, err := formatKey(ctx, key) if err != nil { return err } @@ -400,7 +401,7 @@ func (te *TableEditor) flushEditAccumulator(ctx context.Context, teaInterface in return errhand.BuildDError("failed to read table").AddCause(err).Build() } if rowExists { - keyStr, err := formatKey(ctx, te.nbf, addedKey) + keyStr, err := formatKey(ctx, addedKey) if err != nil { return err } @@ -443,14 +444,14 @@ func (te *TableEditor) flushEditAccumulator(ctx context.Context, teaInterface in return nil } -// formatKey returns a comma-separated string represnetation of the key given. -func formatKey(ctx context.Context, nbf *types.NomsBinFormat, key types.Value) (string, error) { +// 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 []types.Value + var vals []string iter, err := tuple.Iterator() if err != nil { return "", err @@ -462,16 +463,15 @@ func formatKey(ctx context.Context, nbf *types.NomsBinFormat, key types.Value) ( return "", err } if i%2 == 1 { - vals = append(vals, val) + str, err := types.EncodedValue(ctx, val) + if err != nil { + return "", err + } + vals = append(vals, str) } } - valsOnlyTuple, err := types.NewTuple(nbf, vals...) - if err != nil { - return "", err - } - - return types.EncodedValue(ctx, valsOnlyTuple) + return fmt.Sprintf("(%s)", strings.Join(vals, ",")), nil } func (te *TableEditor) getIndexIterator(ctx context.Context, key types.Tuple, indexName string) (table.TableReadCloser, error) { diff --git a/go/libraries/doltcore/sqle/sqlbatch_test.go b/go/libraries/doltcore/sqle/sqlbatch_test.go index 13706b16f4..85c63fc13f 100644 --- a/go/libraries/doltcore/sqle/sqlbatch_test.go +++ b/go/libraries/doltcore/sqle/sqlbatch_test.go @@ -202,6 +202,7 @@ func TestSqlBatchInsertErrors(t *testing.T) { // This generates an error at insert time because of the bad type for the uuid column _, rowIter, err = engine.Query(sqlCtx, `insert into people values (2, "Milhouse", "VanHouten", false, 1, 5.1, true, 677)`) + assert.NoError(t, err) assert.Error(t, drainIter(rowIter)) // Error from the first statement appears here From 4da33e536babaef0f490b57506b3187f04e04904 Mon Sep 17 00:00:00 2001 From: Timothy Sehn Date: Mon, 14 Sep 2020 09:47:35 -0700 Subject: [PATCH 13/26] Added skip bats test for ref spec panic on diff --- bats/diff.bats | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bats/diff.bats b/bats/diff.bats index 995f01ee04..da11053493 100644 --- a/bats/diff.bats +++ b/bats/diff.bats @@ -411,3 +411,15 @@ SQL [ $status -eq 0 ] [ $output -eq $CORRECT_DIFF ] } + +@test "diff with branch@commit spec 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` + skip "The blow panics." + dolt diff master@$FIRST_COMMIT test-branch +} From c79c6f22bb58bdf3560757d7750dddbf06dec1e5 Mon Sep 17 00:00:00 2001 From: Timothy Sehn Date: Mon, 14 Sep 2020 09:53:22 -0700 Subject: [PATCH 14/26] Fixed typo in skip --- bats/diff.bats | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bats/diff.bats b/bats/diff.bats index da11053493..91200f1f0f 100644 --- a/bats/diff.bats +++ b/bats/diff.bats @@ -420,6 +420,6 @@ SQL dolt add test dolt commit -m "added row" FIRST_COMMIT=`dolt log | grep commit | cut -d " " -f 2 | tail -1` - skip "The blow panics." + skip "The below panics." dolt diff master@$FIRST_COMMIT test-branch } From a09a95e8d990dc8b1068430300b899dcbea3c793 Mon Sep 17 00:00:00 2001 From: Timothy Sehn Date: Mon, 14 Sep 2020 10:00:30 -0700 Subject: [PATCH 15/26] Added the non branch version of the diff that does not panic --- bats/diff.bats | 1 + 1 file changed, 1 insertion(+) diff --git a/bats/diff.bats b/bats/diff.bats index 91200f1f0f..350a76045f 100644 --- a/bats/diff.bats +++ b/bats/diff.bats @@ -420,6 +420,7 @@ SQL dolt add test dolt commit -m "added row" FIRST_COMMIT=`dolt log | grep commit | cut -d " " -f 2 | tail -1` + dolt diff $FIRST_COMMIT test-branch skip "The below panics." dolt diff master@$FIRST_COMMIT test-branch } From 7b852f47e6798724e9b2df08f6b40ea47ab8c0c8 Mon Sep 17 00:00:00 2001 From: Daylon Wilkins Date: Mon, 14 Sep 2020 05:32:20 -0700 Subject: [PATCH 16/26] Fixed ActionExecutor causing duplicate key error loop --- .../doltcore/doltdb/table_editor_test.go | 80 +++++++++++++++++++ go/libraries/utils/async/action_executor.go | 8 +- .../utils/async/action_executor_test.go | 4 +- 3 files changed, 88 insertions(+), 4 deletions(-) diff --git a/go/libraries/doltcore/doltdb/table_editor_test.go b/go/libraries/doltcore/doltdb/table_editor_test.go index 18dac0c954..7a545f2591 100644 --- a/go/libraries/doltcore/doltdb/table_editor_test.go +++ b/go/libraries/doltcore/doltdb/table_editor_test.go @@ -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 + }) + } +} diff --git a/go/libraries/utils/async/action_executor.go b/go/libraries/utils/async/action_executor.go index 3f2bded718..04e9cc71dd 100644 --- a/go/libraries/utils/async/action_executor.go +++ b/go/libraries/utils/async/action_executor.go @@ -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, diff --git a/go/libraries/utils/async/action_executor_test.go b/go/libraries/utils/async/action_executor_test.go index e815873129..1dee566c59 100644 --- a/go/libraries/utils/async/action_executor_test.go +++ b/go/libraries/utils/async/action_executor_test.go @@ -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) } } From 6a909bc179f9abff6a93effe7792dd236d6d789f Mon Sep 17 00:00:00 2001 From: Aaron Son Date: Mon, 14 Sep 2020 12:43:33 -0700 Subject: [PATCH 17/26] go/store/datas: Update FindCommonAncestor to work when two commits are from different ValueReadWriters. --- go/libraries/doltcore/doltdb/commit.go | 6 ++--- go/store/cmd/noms/noms_merge.go | 2 +- go/store/datas/commit.go | 33 +++++++++++++++++--------- go/store/datas/commit_test.go | 4 ++-- go/store/datas/database_common.go | 2 +- 5 files changed, 29 insertions(+), 18 deletions(-) diff --git a/go/libraries/doltcore/doltdb/commit.go b/go/libraries/doltcore/doltdb/commit.go index bc96ee8e5c..8698aa06dc 100644 --- a/go/libraries/doltcore/doltdb/commit.go +++ b/go/libraries/doltcore/doltdb/commit.go @@ -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 diff --git a/go/store/cmd/noms/noms_merge.go b/go/store/cmd/noms/noms_merge.go index 7cca1954aa..071211cd89 100644 --- a/go/store/cmd/noms/noms_merge.go +++ b/go/store/cmd/noms/noms_merge.go @@ -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 diff --git a/go/store/datas/commit.go b/go/store/datas/commit.go index a6988a3cdc..63da61ecaa 100644 --- a/go/store/datas/commit.go +++ b/go/store/datas/commit.go @@ -76,8 +76,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 +108,12 @@ 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) + parentsToQueue(ctx, c1Parents, c1Q, vr1) + parentsToQueue(ctx, c2Parents, c2Q, vr2) } else if c1Ht > c2Ht { - parentsToQueue(ctx, c1Q.PopRefsOfHeight(c1Ht), c1Q, vr) + parentsToQueue(ctx, c1Q.PopRefsOfHeight(c1Ht), c1Q, vr1) } else { - parentsToQueue(ctx, c2Q.PopRefsOfHeight(c2Ht), c2Q, vr) + parentsToQueue(ctx, c2Q.PopRefsOfHeight(c2Ht), c2Q, vr2) } } @@ -134,18 +135,28 @@ func parentsToQueue(ctx context.Context, refs types.RefSlice, q *types.RefByHeig } c := v.(types.Struct) - ps, ok, err := c.MaybeGet(ParentsField) - + 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 + }) + } } } diff --git a/go/store/datas/commit_test.go b/go/store/datas/commit_test.go index 18a04ba348..9def0ba563 100644 --- a/go/store/datas/commit_test.go +++ b/go/store/datas/commit_test.go @@ -258,7 +258,7 @@ 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) + found, ok, err := FindCommonAncestor(context.Background(), mustRef(types.NewRef(a, types.Format_7_18)), mustRef(types.NewRef(b, types.Format_7_18)), db, db) assert.NoError(err) if assert.True(ok) { @@ -317,7 +317,7 @@ func TestFindCommonAncestor(t *testing.T) { assertCommonAncestor(a1, a6, c3) // 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) { diff --git a/go/store/datas/database_common.go b/go/store/datas/database_common.go index 0c4ca0c47b..4719668606 100644 --- a/go/store/datas/database_common.go +++ b/go/store/datas/database_common.go @@ -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 From 8e97c61d73be9999ccfd1ac0e3d53a5e5f8f6ccc Mon Sep 17 00:00:00 2001 From: Aaron Son Date: Mon, 14 Sep 2020 13:07:32 -0700 Subject: [PATCH 18/26] go/libraries/doltcore/env/actions/commitwalk: Update GetDotDotRevisions to work across two DoltDBs as sources for commits. --- .../env/actions/commitwalk/commitwalk.go | 45 +++++++++---------- .../env/actions/commitwalk/commitwalk_test.go | 8 ++-- 2 files changed, 26 insertions(+), 27 deletions(-) diff --git a/go/libraries/doltcore/env/actions/commitwalk/commitwalk.go b/go/libraries/doltcore/env/actions/commitwalk/commitwalk.go index 4a046abad0..ed748a29bd 100644 --- a/go/libraries/doltcore/env/actions/commitwalk/commitwalk.go +++ b/go/libraries/doltcore/env/actions/commitwalk/commitwalk.go @@ -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 diff --git a/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go b/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go index 4fd6018d7b..01e4991b6c 100644 --- a/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go +++ b/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go @@ -105,7 +105,7 @@ 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]) @@ -116,18 +116,18 @@ func TestGetDotDotRevisions(t *testing.T) { assert.Equal(t, featureCommits[2], res[5]) assert.Equal(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]) - 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]) From 871b7d59a397e9bd6daec3623925856193d6ffe7 Mon Sep 17 00:00:00 2001 From: Aaron Son Date: Mon, 14 Sep 2020 14:03:35 -0700 Subject: [PATCH 19/26] go: commitwalk: Add test for GetDotDotRevisions across repositories. --- .../env/actions/commitwalk/commitwalk_test.go | 107 +++++++++++++++--- 1 file changed, 94 insertions(+), 13 deletions(-) diff --git a/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go b/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go index 01e4991b6c..d9ab9b68bb 100644 --- a/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go +++ b/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go @@ -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" ) @@ -108,13 +109,13 @@ func TestGetDotDotRevisions(t *testing.T) { 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, env.DoltDB, featureHash, 100) require.NoError(t, err) @@ -123,16 +124,79 @@ func TestGetDotDotRevisions(t *testing.T) { 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, 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,23 @@ 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) From 8235268e8a7fb0a5c5a744fa824a4ca940c06876 Mon Sep 17 00:00:00 2001 From: Aaron Son Date: Mon, 14 Sep 2020 14:28:48 -0700 Subject: [PATCH 20/26] go: store/datas: Write a test for FindCommonAncestor cross-Database behavior. --- go/store/datas/commit.go | 30 +++++++-- go/store/datas/commit_test.go | 112 ++++++++++++++++++++++++++-------- 2 files changed, 111 insertions(+), 31 deletions(-) diff --git a/go/store/datas/commit.go b/go/store/datas/commit.go index 63da61ecaa..0c78438ec7 100644 --- a/go/store/datas/commit.go +++ b/go/store/datas/commit.go @@ -24,6 +24,7 @@ package datas import ( "context" "sort" + "fmt" "github.com/liquidata-inc/dolt/go/store/d" "github.com/liquidata-inc/dolt/go/store/hash" @@ -108,12 +109,24 @@ func FindCommonAncestor(ctx context.Context, c1, c2 types.Ref, vr1, vr2 types.Va if common, ok := findCommonRef(c1Parents, c2Parents); ok { return common, true, nil } - parentsToQueue(ctx, c1Parents, c1Q, vr1) - parentsToQueue(ctx, c2Parents, c2Q, vr2) + 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, vr1) + err = parentsToQueue(ctx, c1Q.PopRefsOfHeight(c1Ht), c1Q, vr1) + if err != nil { + return types.Ref{}, false, err + } } else { - parentsToQueue(ctx, c2Q.PopRefsOfHeight(c2Ht), c2Q, vr2) + err = parentsToQueue(ctx, c2Q.PopRefsOfHeight(c2Ht), c2Q, vr2) + if err != nil { + return types.Ref{}, false, err + } } } @@ -129,12 +142,17 @@ 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) + 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 diff --git a/go/store/datas/commit_test.go b/go/store/datas/commit_test.go index 9def0ba563..823650b615 100644 --- a/go/store/datas/commit_test.go +++ b/go/store/datas/commit_test.go @@ -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, 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,25 +296,25 @@ 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, db) @@ -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) { From 2b2f1b0f0221049f0b5184491d2bca71ff63b5c1 Mon Sep 17 00:00:00 2001 From: Aaron Son Date: Mon, 14 Sep 2020 14:29:19 -0700 Subject: [PATCH 21/26] gofmt. --- .../doltcore/env/actions/commitwalk/commitwalk_test.go | 10 ++++++++-- go/store/datas/commit.go | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go b/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go index d9ab9b68bb..e66242d4d1 100644 --- a/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go +++ b/go/libraries/doltcore/env/actions/commitwalk/commitwalk_test.go @@ -222,8 +222,14 @@ func mustForkDB(t *testing.T, fromDB *doltdb.DoltDB, bn string, cm *doltdb.Commi require.NoError(t, err) p1 := make(chan datas.PullProgress) p2 := make(chan datas.PullerEvent) - go func() { for range p1{ } }() - go func() { for range p2{ } }() + 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) diff --git a/go/store/datas/commit.go b/go/store/datas/commit.go index 0c78438ec7..6ccfb08e77 100644 --- a/go/store/datas/commit.go +++ b/go/store/datas/commit.go @@ -23,8 +23,8 @@ package datas import ( "context" - "sort" "fmt" + "sort" "github.com/liquidata-inc/dolt/go/store/d" "github.com/liquidata-inc/dolt/go/store/hash" From 5a01be5164914ce67da362953ef6849d290bc372 Mon Sep 17 00:00:00 2001 From: Andy Arthur Date: Mon, 14 Sep 2020 15:23:02 -0700 Subject: [PATCH 22/26] validate ref strings when resolving ref specs --- bats/diff.bats | 14 ++++++++++---- go/libraries/doltcore/doltdb/doltdb.go | 4 ++++ 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/bats/diff.bats b/bats/diff.bats index 350a76045f..251f3bf10c 100644 --- a/bats/diff.bats +++ b/bats/diff.bats @@ -412,7 +412,7 @@ SQL [ $output -eq $CORRECT_DIFF ] } -@test "diff with branch@commit spec does not panic" { +@test "diff with invalid ref does not panic" { dolt add . dolt commit -m table dolt checkout -b test-branch @@ -420,7 +420,13 @@ SQL dolt add test dolt commit -m "added row" FIRST_COMMIT=`dolt log | grep commit | cut -d " " -f 2 | tail -1` - dolt diff $FIRST_COMMIT test-branch - skip "The below panics." - dolt diff master@$FIRST_COMMIT test-branch + 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" ]] } diff --git a/go/libraries/doltcore/doltdb/doltdb.go b/go/libraries/doltcore/doltdb/doltdb.go index 30af657c47..060c87a20b 100644 --- a/go/libraries/doltcore/doltdb/doltdb.go +++ b/go/libraries/doltcore/doltdb/doltdb.go @@ -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 { From 36f420276b07159c56a500374de8adf97a0749ec Mon Sep 17 00:00:00 2001 From: Timothy Sehn Date: Mon, 14 Sep 2020 16:26:57 -0700 Subject: [PATCH 23/26] Got MySQL connection working in Go --- .../go/go-sql-driver-mysql-test.go | 32 +++++++++++++++++++ mysql-client-tests/mysql-client-tests.bats | 4 +++ 2 files changed, 36 insertions(+) create mode 100644 mysql-client-tests/go/go-sql-driver-mysql-test.go diff --git a/mysql-client-tests/go/go-sql-driver-mysql-test.go b/mysql-client-tests/go/go-sql-driver-mysql-test.go new file mode 100644 index 0000000000..eb183b17e1 --- /dev/null +++ b/mysql-client-tests/go/go-sql-driver-mysql-test.go @@ -0,0 +1,32 @@ +package main + +import "os" +import "fmt" + +import "database/sql" +import _ "github.com/go-sql-driver/mysql" + +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) + } + + os.Exit(1) +} diff --git a/mysql-client-tests/mysql-client-tests.bats b/mysql-client-tests/mysql-client-tests.bats index 7544f26002..c62f7238b1 100644 --- a/mysql-client-tests/mysql-client-tests.bats +++ b/mysql-client-tests/mysql-client-tests.bats @@ -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 } From 0ff2efe5c6ea688b3efa8ca44d500c1ae3a2bfad Mon Sep 17 00:00:00 2001 From: Timothy Sehn Date: Mon, 14 Sep 2020 16:52:55 -0700 Subject: [PATCH 24/26] Working go code. Gotta get Docker working. --- .../go/go-sql-driver-mysql-test.go | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/mysql-client-tests/go/go-sql-driver-mysql-test.go b/mysql-client-tests/go/go-sql-driver-mysql-test.go index eb183b17e1..9a85e8be40 100644 --- a/mysql-client-tests/go/go-sql-driver-mysql-test.go +++ b/mysql-client-tests/go/go-sql-driver-mysql-test.go @@ -6,6 +6,13 @@ 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] @@ -28,5 +35,18 @@ func main() { panic(err) } - os.Exit(1) -} + 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) +} \ No newline at end of file From d13beb9fa3e308ee71af6cc1919407a9eeaf384a Mon Sep 17 00:00:00 2001 From: Dustin Brown Date: Tue, 15 Sep 2020 08:40:08 -0700 Subject: [PATCH 25/26] /MySQLDockerfile: Install golang --- MySQLDockerfile | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/MySQLDockerfile b/MySQLDockerfile index fc51e2981a..5691ea5d5c 100644 --- a/MySQLDockerfile +++ b/MySQLDockerfile @@ -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 \ @@ -26,9 +19,28 @@ RUN apt install -y \ ant \ ca-certificates-java \ bats \ - perl \ + perl \ cpanminus +# 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 + +# 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 RUN dpkg -i packages-microsoft-prod.deb @@ -49,8 +61,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 From 91e364818c6937a33d523bbddcceac5a30625b53 Mon Sep 17 00:00:00 2001 From: Timothy Sehn Date: Tue, 15 Sep 2020 10:35:28 -0700 Subject: [PATCH 26/26] Working Dockerfile for go mysql client tests --- MySQLDockerfile | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/MySQLDockerfile b/MySQLDockerfile index 5691ea5d5c..a3018964d6 100644 --- a/MySQLDockerfile +++ b/MySQLDockerfile @@ -19,8 +19,9 @@ RUN apt install -y \ ant \ ca-certificates-java \ bats \ - perl \ - cpanminus + perl \ + cpanminus \ + git # install go WORKDIR /root @@ -35,6 +36,9 @@ 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/ .