diff --git a/go/cmd/dolt/commands/sqlserver/sqlclient.go b/go/cmd/dolt/commands/sqlserver/sqlclient.go index 31a0247ce1..1054d3396b 100644 --- a/go/cmd/dolt/commands/sqlserver/sqlclient.go +++ b/go/cmd/dolt/commands/sqlserver/sqlclient.go @@ -37,6 +37,7 @@ import ( "github.com/dolthub/dolt/go/cmd/dolt/commands" "github.com/dolthub/dolt/go/cmd/dolt/commands/engine" "github.com/dolthub/dolt/go/libraries/doltcore/env" + "github.com/dolthub/dolt/go/libraries/doltcore/sqle/dsess" "github.com/dolthub/dolt/go/libraries/utils/argparser" "github.com/dolthub/dolt/go/libraries/utils/filesys" "github.com/dolthub/dolt/go/libraries/utils/iohelp" @@ -475,17 +476,20 @@ func (c ConnectionQueryist) Query(ctx *sql.Context, query string) (sql.Schema, s // BuildConnectionStringQueryist returns a Queryist that connects to the server specified by the given server config. Presence in this // module isn't ideal, but it's the only way to get the server config into the queryist. -func BuildConnectionStringQueryist(ctx context.Context, cwdFS filesys.Filesys, creds *cli.UserPassword, apr *argparser.ArgParseResults, host string, port int, useTLS bool, database string) (cli.LateBindQueryist, error) { +func BuildConnectionStringQueryist(ctx context.Context, cwdFS filesys.Filesys, creds *cli.UserPassword, apr *argparser.ArgParseResults, host string, port int, useTLS bool, dbRev string) (cli.LateBindQueryist, error) { clientConfig, err := GetClientConfig(cwdFS, creds, apr) if err != nil { return nil, err } - parsedMySQLConfig, err := mysqlDriver.ParseDSN(ConnectionString(clientConfig, database)) + // ParseDSN currently doesn't support `/` in the db name + dbName, _ := dsess.SplitRevisionDbName(dbRev) + parsedMySQLConfig, err := mysqlDriver.ParseDSN(ConnectionString(clientConfig, dbName)) if err != nil { return nil, err } + parsedMySQLConfig.DBName = dbRev parsedMySQLConfig.Addr = fmt.Sprintf("%s:%d", host, port) if useTLS { @@ -503,7 +507,7 @@ func BuildConnectionStringQueryist(ctx context.Context, cwdFS filesys.Filesys, c var lateBind cli.LateBindQueryist = func(ctx context.Context) (cli.Queryist, *sql.Context, func(), error) { sqlCtx := sql.NewContext(ctx) - sqlCtx.SetCurrentDatabase(database) + sqlCtx.SetCurrentDatabase(dbRev) return queryist, sqlCtx, func() { conn.Conn(ctx) }, nil } diff --git a/go/cmd/dolt/dolt.go b/go/cmd/dolt/dolt.go index 98b4857aee..e0b04bd999 100644 --- a/go/cmd/dolt/dolt.go +++ b/go/cmd/dolt/dolt.go @@ -623,9 +623,10 @@ func buildLateBinder(ctx context.Context, cwdFS filesys.Filesys, mrEnv *env.Mult } if hasUseDb { - targetEnv = mrEnv.GetEnv(useDb) + dbName, _ := dsess.SplitRevisionDbName(useDb) + targetEnv = mrEnv.GetEnv(dbName) if targetEnv == nil { - return nil, fmt.Errorf("The provided --use-db %s does not exist or is not a directory.", useDb) + return nil, fmt.Errorf("The provided --use-db %s does not exist.", dbName) } } else { useDb = mrEnv.GetFirstDatabase() diff --git a/go/go.mod b/go/go.mod index 34846fb097..45fb5bd474 100644 --- a/go/go.mod +++ b/go/go.mod @@ -19,7 +19,7 @@ require ( github.com/dustin/go-humanize v1.0.0 github.com/fatih/color v1.13.0 github.com/flynn-archive/go-shlex v0.0.0-20150515145356-3f9db97f8568 - github.com/go-sql-driver/mysql v1.6.0 + github.com/go-sql-driver/mysql v1.7.2-0.20230713085235-0b18dac46f7f github.com/gocraft/dbr/v2 v2.7.2 github.com/golang/protobuf v1.5.3 // indirect github.com/golang/snappy v0.0.4 diff --git a/go/go.sum b/go/go.sum index f94bea3127..0ba8759843 100644 --- a/go/go.sum +++ b/go/go.sum @@ -255,8 +255,9 @@ github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhO github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= -github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= +github.com/go-sql-driver/mysql v1.7.2-0.20230713085235-0b18dac46f7f h1:4+t8Qb99xUG/Ea00cQAiQl+gsjpK8ZYtAO8E76gRzQI= +github.com/go-sql-driver/mysql v1.7.2-0.20230713085235-0b18dac46f7f/go.mod h1:6gYm/zDt3ahdnMVTPeT/LfoBFsws1qZm5yI6FmVjB14= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= diff --git a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_alltypes_test.go b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_alltypes_test.go index 82bdaf5074..37f640f20a 100644 --- a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_alltypes_test.go +++ b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_alltypes_test.go @@ -48,13 +48,13 @@ func TestBinlogReplicationForAllTypes(t *testing.T) { waitForReplicaToCatchUp(t) rows, err := replicaDatabase.Queryx("select * from db01.alltypes order by pk asc;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "1", row["pk"]) assertValues(t, 0, row) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "2", row["pk"]) assertValues(t, 1, row) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "3", row["pk"]) assertNullValues(t, row) require.False(t, rows.Next()) @@ -70,13 +70,13 @@ func TestBinlogReplicationForAllTypes(t *testing.T) { replicaDatabase.MustExec("use db01;") rows, err = replicaDatabase.Queryx("select * from db01.alltypes order by pk asc;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "1", row["pk"]) assertNullValues(t, row) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "2", row["pk"]) assertValues(t, 0, row) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "3", row["pk"]) assertValues(t, 1, row) require.False(t, rows.Next()) @@ -516,7 +516,7 @@ func assertValues(t *testing.T, assertionIndex int, row map[string]interface{}) actualValue := "" if row[typeDesc.ColumnName()] != nil { - actualValue = row[typeDesc.ColumnName()].(string) + actualValue = fmt.Sprintf("%v", row[typeDesc.ColumnName()]) } if typeDesc.TypeDefinition == "json" { // LD_1 and DOLT storage formats return JSON strings slightly differently; DOLT removes spaces diff --git a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_filters_test.go b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_filters_test.go index 21bf8c4768..ce129172e5 100644 --- a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_filters_test.go +++ b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_filters_test.go @@ -56,7 +56,7 @@ func TestBinlogReplicationFilters_ignoreTablesOnly(t *testing.T) { // Verify that all changes from t1 were applied on the replica rows, err := replicaDatabase.Queryx("SELECT COUNT(pk) as count, MIN(pk) as min, MAX(pk) as max from db01.t1;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "10", row["count"]) require.Equal(t, "0", row["min"]) require.Equal(t, "9", row["max"]) @@ -65,7 +65,7 @@ func TestBinlogReplicationFilters_ignoreTablesOnly(t *testing.T) { // Verify that no changes from t2 were applied on the replica rows, err = replicaDatabase.Queryx("SELECT COUNT(pk) as count, MIN(pk) as min, MAX(pk) as max from db01.t2;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "0", row["count"]) require.Equal(t, nil, row["min"]) require.Equal(t, nil, row["max"]) @@ -107,7 +107,7 @@ func TestBinlogReplicationFilters_doTablesOnly(t *testing.T) { // Verify that all changes from t1 were applied on the replica rows, err := replicaDatabase.Queryx("SELECT COUNT(pk) as count, MIN(pk) as min, MAX(pk) as max from db01.t1;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "10", row["count"]) require.Equal(t, "0", row["min"]) require.Equal(t, "9", row["max"]) @@ -116,7 +116,7 @@ func TestBinlogReplicationFilters_doTablesOnly(t *testing.T) { // Verify that no changes from t2 were applied on the replica rows, err = replicaDatabase.Queryx("SELECT COUNT(pk) as count, MIN(pk) as min, MAX(pk) as max from db01.t2;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "0", row["count"]) require.Equal(t, nil, row["min"]) require.Equal(t, nil, row["max"]) @@ -159,7 +159,7 @@ func TestBinlogReplicationFilters_doTablesAndIgnoreTables(t *testing.T) { // Verify that all changes from t1 were applied on the replica rows, err := replicaDatabase.Queryx("SELECT COUNT(pk) as count, MIN(pk) as min, MAX(pk) as max from db01.t1;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "10", row["count"]) require.Equal(t, "0", row["min"]) require.Equal(t, "9", row["max"]) @@ -168,7 +168,7 @@ func TestBinlogReplicationFilters_doTablesAndIgnoreTables(t *testing.T) { // Verify that no changes from t2 were applied on the replica rows, err = replicaDatabase.Queryx("SELECT COUNT(pk) as count, MIN(pk) as min, MAX(pk) as max from db01.t2;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "0", row["count"]) require.Equal(t, nil, row["min"]) require.Equal(t, nil, row["max"]) diff --git a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_multidb_test.go b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_multidb_test.go index 804d680d37..b148676dd2 100644 --- a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_multidb_test.go +++ b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_multidb_test.go @@ -48,13 +48,13 @@ func TestBinlogReplicationMultiDb(t *testing.T) { waitForReplicaToCatchUp(t) rows, err := replicaDatabase.Queryx("select * from db01.t01 order by pk asc;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "1", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "3", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "5", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "7", row["pk"]) require.False(t, rows.Next()) require.NoError(t, rows.Close()) @@ -64,19 +64,19 @@ func TestBinlogReplicationMultiDb(t *testing.T) { replicaDatabase.MustExec("use db01;") rows, err = replicaDatabase.Queryx("select * from db01.dolt_diff;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t01", row["table_name"]) require.EqualValues(t, "1", row["data_change"]) require.EqualValues(t, "0", row["schema_change"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t01", row["table_name"]) require.EqualValues(t, "1", row["data_change"]) require.EqualValues(t, "0", row["schema_change"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t01", row["table_name"]) require.EqualValues(t, "1", row["data_change"]) require.EqualValues(t, "0", row["schema_change"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t01", row["table_name"]) require.EqualValues(t, "0", row["data_change"]) require.EqualValues(t, "1", row["schema_change"]) @@ -88,13 +88,13 @@ func TestBinlogReplicationMultiDb(t *testing.T) { replicaDatabase.MustExec("use db02;") rows, err = replicaDatabase.Queryx("select * from db02.t02 order by pk asc;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "2", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "4", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "6", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "8", row["pk"]) require.False(t, rows.Next()) require.NoError(t, rows.Close()) @@ -102,19 +102,19 @@ func TestBinlogReplicationMultiDb(t *testing.T) { // Verify db02.dolt_diff rows, err = replicaDatabase.Queryx("select * from db02.dolt_diff;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t02", row["table_name"]) require.Equal(t, "1", row["data_change"]) require.Equal(t, "0", row["schema_change"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t02", row["table_name"]) require.Equal(t, "1", row["data_change"]) require.Equal(t, "0", row["schema_change"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t02", row["table_name"]) require.Equal(t, "1", row["data_change"]) require.Equal(t, "0", row["schema_change"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t02", row["table_name"]) require.Equal(t, "0", row["data_change"]) require.Equal(t, "1", row["schema_change"]) @@ -148,13 +148,13 @@ func TestBinlogReplicationMultiDbTransactions(t *testing.T) { waitForReplicaToCatchUp(t) rows, err := replicaDatabase.Queryx("select * from db01.t01 order by pk asc;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "1", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "3", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "5", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "7", row["pk"]) require.False(t, rows.Next()) require.NoError(t, rows.Close()) @@ -163,11 +163,11 @@ func TestBinlogReplicationMultiDbTransactions(t *testing.T) { replicaDatabase.MustExec("use db01;") rows, err = replicaDatabase.Queryx("select * from db01.dolt_diff;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t01", row["table_name"]) require.EqualValues(t, "1", row["data_change"]) require.EqualValues(t, "0", row["schema_change"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t01", row["table_name"]) require.EqualValues(t, "0", row["data_change"]) require.EqualValues(t, "1", row["schema_change"]) @@ -179,13 +179,13 @@ func TestBinlogReplicationMultiDbTransactions(t *testing.T) { replicaDatabase.MustExec("use db02;") rows, err = replicaDatabase.Queryx("select * from db02.t02 order by pk asc;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "2", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "4", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "6", row["pk"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "8", row["pk"]) require.False(t, rows.Next()) require.NoError(t, rows.Close()) @@ -193,11 +193,11 @@ func TestBinlogReplicationMultiDbTransactions(t *testing.T) { // Verify db02.dolt_diff rows, err = replicaDatabase.Queryx("select * from db02.dolt_diff;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t02", row["table_name"]) require.Equal(t, "1", row["data_change"]) require.Equal(t, "0", row["schema_change"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "t02", row["table_name"]) require.Equal(t, "0", row["data_change"]) require.Equal(t, "1", row["schema_change"]) diff --git a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_reconnect_test.go b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_reconnect_test.go index d6d7e3c7cb..3ab5d62f8d 100644 --- a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_reconnect_test.go +++ b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_reconnect_test.go @@ -62,7 +62,7 @@ func TestBinlogReplicationAutoReconnect(t *testing.T) { rows, err := replicaDatabase.Queryx("select min(pk) as min, max(pk) as max, count(pk) as count from db01.reconnect_test;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "0", row["min"]) require.Equal(t, "999", row["max"]) require.Equal(t, "1000", row["count"]) @@ -145,7 +145,7 @@ func showReplicaStatus(t *testing.T) map[string]interface{} { rows, err := replicaDatabase.Queryx("show replica status;") require.NoError(t, err) defer rows.Close() - return convertByteArraysToStrings(readNextRow(t, rows)) + return convertMapScanResultToStrings(readNextRow(t, rows)) } func configureToxiProxy(t *testing.T) { @@ -184,15 +184,19 @@ func turnOnLimitDataToxic(t *testing.T) { t.Logf("Toxiproxy proxy with limit_data toxic (1KB) started on port %d", proxyPort) } -// convertByteArraysToStrings converts each []byte value in the specified map |m| into a string. +// convertMapScanResultToStrings converts each value in the specified map |m| into a string. // This is necessary because MapScan doesn't honor (or know about) the correct underlying SQL types – it -// gets all results back as strings, typed as []byte. +// gets results back as strings, typed as []byte. Results also get returned as int64, which are converted to strings +// for ease of testing. // More info at the end of this issue: https://github.com/jmoiron/sqlx/issues/225 -func convertByteArraysToStrings(m map[string]interface{}) map[string]interface{} { +func convertMapScanResultToStrings(m map[string]interface{}) map[string]interface{} { for key, value := range m { - if bytes, ok := value.([]byte); ok { + if bytes, ok := value.([]uint8); ok { m[key] = string(bytes) } + if i, ok := value.(int64); ok { + m[key] = strconv.FormatInt(i, 10) + } } return m diff --git a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_restart_test.go b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_restart_test.go index 285a5d7d0a..3c05a7bc45 100644 --- a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_restart_test.go +++ b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_restart_test.go @@ -75,8 +75,8 @@ func TestBinlogReplicationServerRestart(t *testing.T) { require.NoError(t, err) replicaRows, err := replicaDatabase.Queryx(countMaxQuery) require.NoError(t, err) - primaryRow := convertByteArraysToStrings(readNextRow(t, primaryRows)) - replicaRow := convertByteArraysToStrings(readNextRow(t, replicaRows)) + primaryRow := convertMapScanResultToStrings(readNextRow(t, primaryRows)) + replicaRow := convertMapScanResultToStrings(readNextRow(t, replicaRows)) require.Equal(t, primaryRow["count"], replicaRow["count"]) require.Equal(t, primaryRow["max"], replicaRow["max"]) require.NoError(t, replicaRows.Close()) diff --git a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_test.go b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_test.go index 5921d383b5..36b43df457 100644 --- a/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_test.go +++ b/go/libraries/doltcore/sqle/binlogreplication/binlog_replication_test.go @@ -169,7 +169,7 @@ func TestResetReplica(t *testing.T) { rows, err = replicaDatabase.Queryx("SHOW REPLICA STATUS;") require.NoError(t, err) - status := convertByteArraysToStrings(readNextRow(t, rows)) + status := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "0", status["Last_Errno"]) require.Equal(t, "", status["Last_Error"]) require.Equal(t, "0", status["Last_IO_Errno"]) @@ -320,7 +320,7 @@ func TestDoltCommits(t *testing.T) { waitForReplicaToCatchUp(t) rows, err := replicaDatabase.Queryx("select count(*) as count from db01.dolt_log;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "5", row["count"]) require.NoError(t, rows.Close()) @@ -331,31 +331,31 @@ func TestDoltCommits(t *testing.T) { require.NoError(t, err) // Fourth transaction - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "1", row["data_change"]) require.Equal(t, "0", row["schema_change"]) require.Equal(t, "t1", row["table_name"]) commitId := row["commit_hash"] - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "1", row["data_change"]) require.Equal(t, "0", row["schema_change"]) require.Equal(t, "t2", row["table_name"]) require.Equal(t, commitId, row["commit_hash"]) // Third transaction - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "1", row["data_change"]) require.Equal(t, "0", row["schema_change"]) require.Equal(t, "t2", row["table_name"]) // Second transaction - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "0", row["data_change"]) require.Equal(t, "1", row["schema_change"]) require.Equal(t, "t2", row["table_name"]) // First transaction - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "0", row["data_change"]) require.Equal(t, "1", row["schema_change"]) require.Equal(t, "t1", row["table_name"]) @@ -405,13 +405,13 @@ func TestForeignKeyChecks(t *testing.T) { waitForReplicaToCatchUp(t) rows, err := replicaDatabase.Queryx("select * from db01.t1 order by pk;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "1", row["pk"]) require.Equal(t, "red", row["color"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "2", row["pk"]) require.Equal(t, "still-not-a-color", row["color"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "3", row["pk"]) require.Equal(t, "not-a-color", row["color"]) require.False(t, rows.Next()) @@ -419,9 +419,9 @@ func TestForeignKeyChecks(t *testing.T) { rows, err = replicaDatabase.Queryx("select * from db01.colors order by name;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "blue", row["name"]) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "green", row["name"]) require.False(t, rows.Next()) require.NoError(t, rows.Close()) @@ -441,14 +441,14 @@ func TestCharsetsAndCollations(t *testing.T) { waitForReplicaToCatchUp(t) rows, err := replicaDatabase.Queryx("show create table db01.t1;") require.NoError(t, err) - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) require.Contains(t, row["Create Table"], "ascii_general_ci") require.Contains(t, row["Create Table"], "utf16_general_ci") require.NoError(t, rows.Close()) rows, err = replicaDatabase.Queryx("select * from db01.t1;") require.NoError(t, err) - row = convertByteArraysToStrings(readNextRow(t, rows)) + row = convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, "one", row["c1"]) require.Equal(t, "\x00o\x00n\x00e", row["c2"]) require.NoError(t, rows.Close()) @@ -515,7 +515,7 @@ func waitForReplicaToReachGtid(t *testing.T, target int) { func assertWarning(t *testing.T, database *sqlx.DB, code int, message string) { rows, err := database.Queryx("SHOW WARNINGS;") require.NoError(t, err) - warning := convertByteArraysToStrings(readNextRow(t, rows)) + warning := convertMapScanResultToStrings(readNextRow(t, rows)) require.Equal(t, strconv.Itoa(code), warning["Code"]) require.Equal(t, message, warning["Message"]) require.False(t, rows.Next()) @@ -526,7 +526,7 @@ func queryGtid(t *testing.T, database *sqlx.DB) string { rows, err := database.Queryx("SELECT @@global.gtid_executed as gtid_executed;") require.NoError(t, err) defer rows.Close() - row := convertByteArraysToStrings(readNextRow(t, rows)) + row := convertMapScanResultToStrings(readNextRow(t, rows)) if row["gtid_executed"] == nil { t.Fatal("no value for @@GLOBAL.gtid_executed") } @@ -550,7 +550,7 @@ func readAllRows(t *testing.T, rows *sqlx.Rows) []map[string]interface{} { } err := rows.MapScan(row) require.NoError(t, err) - row = convertByteArraysToStrings(row) + row = convertMapScanResultToStrings(row) result = append(result, row) } } diff --git a/go/libraries/doltcore/sqle/enginetest/dolt_server_test.go b/go/libraries/doltcore/sqle/enginetest/dolt_server_test.go index 12073e5e12..905e779e44 100755 --- a/go/libraries/doltcore/sqle/enginetest/dolt_server_test.go +++ b/go/libraries/doltcore/sqle/enginetest/dolt_server_test.go @@ -55,7 +55,7 @@ var DoltBranchMultiSessionScriptTests = []queries.ScriptTest{ }, { Query: "/* client b */ CALL DOLT_BRANCH('-d', 'branch1');", - ExpectedErrStr: "Error 1105: unsafe to delete or rename branches in use in other sessions; use --force to force the change", + ExpectedErrStr: "Error 1105 (HY000): unsafe to delete or rename branches in use in other sessions; use --force to force the change", }, { Query: "/* client a */ CALL DOLT_CHECKOUT('branch2');", @@ -67,7 +67,7 @@ var DoltBranchMultiSessionScriptTests = []queries.ScriptTest{ }, { Query: "/* client b */ CALL DOLT_BRANCH('-d', 'branch2');", - ExpectedErrStr: "Error 1105: unsafe to delete or rename branches in use in other sessions; use --force to force the change", + ExpectedErrStr: "Error 1105 (HY000): unsafe to delete or rename branches in use in other sessions; use --force to force the change", }, { Query: "/* client b */ CALL DOLT_BRANCH('-df', 'branch2');", @@ -96,7 +96,7 @@ var DoltBranchMultiSessionScriptTests = []queries.ScriptTest{ }, { Query: "/* client b */ CALL DOLT_BRANCH('-m', 'branch1', 'movedBranch1');", - ExpectedErrStr: "Error 1105: unsafe to delete or rename branches in use in other sessions; use --force to force the change", + ExpectedErrStr: "Error 1105 (HY000): unsafe to delete or rename branches in use in other sessions; use --force to force the change", }, { Query: "/* client b */ CALL DOLT_BRANCH('-mf', 'branch1', 'movedBranch1');", @@ -137,7 +137,7 @@ var DoltBranchMultiSessionScriptTests = []queries.ScriptTest{ }, { Query: "/* client a */ CALL DOLT_BRANCH('-d', 'branch2');", - ExpectedErrStr: "Error 1105: unsafe to delete or rename branches in use in other sessions; use --force to force the change", + ExpectedErrStr: "Error 1105 (HY000): unsafe to delete or rename branches in use in other sessions; use --force to force the change", }, { Query: "/* client a */ CALL DOLT_BRANCH('-df', 'branch2');", @@ -188,7 +188,7 @@ var DoltBranchMultiSessionScriptTests = []queries.ScriptTest{ }, { Query: "/* client a */ CALL DOLT_BRANCH('-m', 'branch2', 'newName');", - ExpectedErrStr: "Error 1105: unsafe to delete or rename branches in use in other sessions; use --force to force the change", + ExpectedErrStr: "Error 1105 (HY000): unsafe to delete or rename branches in use in other sessions; use --force to force the change", }, { Query: "/* client a */ CALL DOLT_BRANCH('-mf', 'branch2', 'newName');", @@ -239,11 +239,11 @@ var DoltBranchMultiSessionScriptTests = []queries.ScriptTest{ }, { Query: "/* client a */ select name from dolt_branches;", - ExpectedErrStr: "Error 1105: database not found: dolt/branch1", + ExpectedErrStr: "Error 1105 (HY000): database not found: dolt/branch1", }, { Query: "/* client a */ CALL DOLT_CHECKOUT('main');", - ExpectedErrStr: "Error 1105: database not found: dolt/branch1", + ExpectedErrStr: "Error 1105 (HY000): database not found: dolt/branch1", }, { Query: "/* client a */ USE dolt/main;", @@ -288,12 +288,12 @@ var DoltBranchMultiSessionScriptTests = []queries.ScriptTest{ }, { Query: "/* client a */ select name from dolt_branches;", - ExpectedErrStr: "Error 1105: database not found: dolt/branch1", + ExpectedErrStr: "Error 1105 (HY000): database not found: dolt/branch1", }, { // TODO: this could be handled better, not the best experience. Maybe kill the session? Query: "/* client a */ CALL DOLT_CHECKOUT('main');", - ExpectedErrStr: "Error 1105: database not found: dolt/branch1", + ExpectedErrStr: "Error 1105 (HY000): database not found: dolt/branch1", }, { Query: "/* client a */ USE dolt/main;", @@ -415,7 +415,7 @@ var DropDatabaseMultiSessionScriptTests = []queries.ScriptTest{ }, { Query: "/* client b */ show tables;", - ExpectedErrStr: "Error 1105: database not found: db01/branch1", + ExpectedErrStr: "Error 1105 (HY000): database not found: db01/branch1", }, }, }, diff --git a/integration-tests/bats/global-args.bats b/integration-tests/bats/global-args.bats new file mode 100755 index 0000000000..f146ef688a --- /dev/null +++ b/integration-tests/bats/global-args.bats @@ -0,0 +1,79 @@ +#!/usr/bin/env bats + +load $BATS_TEST_DIRNAME/helper/common.bash + +setup() { + setup_common + dolt sql <