From 1bc9c5104bd6156e74fa5115cfc4ec2d8e96c0a4 Mon Sep 17 00:00:00 2001 From: Tim Vaillancourt Date: Wed, 28 Dec 2022 23:53:20 +0100 Subject: [PATCH] Pass entire sql.UniqueKey --- go/logic/applier.go | 6 ++---- go/sql/builder.go | 18 +++++++++--------- go/sql/builder_test.go | 10 +++++----- 3 files changed, 16 insertions(+), 18 deletions(-) diff --git a/go/logic/applier.go b/go/logic/applier.go index d292507..42c5da9 100644 --- a/go/logic/applier.go +++ b/go/logic/applier.go @@ -472,8 +472,7 @@ func (this *Applier) ExecuteThrottleQuery() (int64, error) { // readMigrationMinValues returns the minimum values to be iterated on rowcopy func (this *Applier) readMigrationMinValues(tx *gosql.Tx, uniqueKey *sql.UniqueKey) error { this.migrationContext.Log.Debugf("Reading migration range according to key: %s", uniqueKey.Name) - query, err := sql.BuildUniqueKeyMinValuesPreparedQuery(this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, - this.migrationContext.UniqueKey.Name, &uniqueKey.Columns) + query, err := sql.BuildUniqueKeyMinValuesPreparedQuery(this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, uniqueKey) if err != nil { return err } @@ -498,8 +497,7 @@ func (this *Applier) readMigrationMinValues(tx *gosql.Tx, uniqueKey *sql.UniqueK // readMigrationMaxValues returns the maximum values to be iterated on rowcopy func (this *Applier) readMigrationMaxValues(tx *gosql.Tx, uniqueKey *sql.UniqueKey) error { this.migrationContext.Log.Debugf("Reading migration range according to key: %s", uniqueKey.Name) - query, err := sql.BuildUniqueKeyMaxValuesPreparedQuery(this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, - this.migrationContext.UniqueKey.Name, &uniqueKey.Columns) + query, err := sql.BuildUniqueKeyMaxValuesPreparedQuery(this.migrationContext.DatabaseName, this.migrationContext.OriginalTableName, uniqueKey) if err != nil { return err } diff --git a/go/sql/builder.go b/go/sql/builder.go index c11478a..46d34fa 100644 --- a/go/sql/builder.go +++ b/go/sql/builder.go @@ -352,24 +352,24 @@ func BuildUniqueKeyRangeEndPreparedQueryViaTemptable(databaseName, tableName str return result, explodedArgs, nil } -func BuildUniqueKeyMinValuesPreparedQuery(databaseName, tableName, indexName string, uniqueKeyColumns *ColumnList) (string, error) { - return buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName, indexName, uniqueKeyColumns, "asc") +func BuildUniqueKeyMinValuesPreparedQuery(databaseName, tableName string, uniqueKey *UniqueKey) (string, error) { + return buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName, uniqueKey, "asc") } -func BuildUniqueKeyMaxValuesPreparedQuery(databaseName, tableName, indexName string, uniqueKeyColumns *ColumnList) (string, error) { - return buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName, indexName, uniqueKeyColumns, "desc") +func BuildUniqueKeyMaxValuesPreparedQuery(databaseName, tableName string, uniqueKey *UniqueKey) (string, error) { + return buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName, uniqueKey, "desc") } -func buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName, indexName string, uniqueKeyColumns *ColumnList, order string) (string, error) { - if uniqueKeyColumns.Len() == 0 { +func buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName string, uniqueKey *UniqueKey, order string) (string, error) { + if uniqueKey.Columns.Len() == 0 { return "", fmt.Errorf("Got 0 columns in BuildUniqueKeyMinMaxValuesPreparedQuery") } databaseName = EscapeName(databaseName) tableName = EscapeName(tableName) - uniqueKeyColumnNames := duplicateNames(uniqueKeyColumns.Names()) + uniqueKeyColumnNames := duplicateNames(uniqueKey.Columns.Names()) uniqueKeyColumnOrder := make([]string, len(uniqueKeyColumnNames)) - for i, column := range uniqueKeyColumns.Columns() { + for i, column := range uniqueKey.Columns.Columns() { uniqueKeyColumnNames[i] = EscapeName(uniqueKeyColumnNames[i]) if column.Type == EnumColumnType { uniqueKeyColumnOrder[i] = fmt.Sprintf("concat(%s) %s", uniqueKeyColumnNames[i], order) @@ -385,7 +385,7 @@ func buildUniqueKeyMinMaxValuesPreparedQuery(databaseName, tableName, indexName order by %s limit 1 `, databaseName, tableName, strings.Join(uniqueKeyColumnNames, ", "), - databaseName, tableName, indexName, + databaseName, tableName, uniqueKey.Name, strings.Join(uniqueKeyColumnOrder, ", "), ) return query, nil diff --git a/go/sql/builder_test.go b/go/sql/builder_test.go index b418696..2456639 100644 --- a/go/sql/builder_test.go +++ b/go/sql/builder_test.go @@ -1,5 +1,5 @@ /* - Copyright 2016 GitHub Inc. + Copyright 2022 GitHub Inc. See https://github.com/github/gh-ost/blob/master/LICENSE */ @@ -309,10 +309,10 @@ func TestBuildUniqueKeyRangeEndPreparedQuery(t *testing.T) { func TestBuildUniqueKeyMinValuesPreparedQuery(t *testing.T) { databaseName := "mydb" originalTableName := "tbl" - indexName := "PRIMARY" - uniqueKeyColumns := NewColumnList([]string{"name", "position"}) + columnList := NewColumnList([]string{"name", "position"}) + uniqueKey := &UniqueKey{Name: "PRIMARY", Columns: *columnList} { - query, err := BuildUniqueKeyMinValuesPreparedQuery(databaseName, originalTableName, indexName, uniqueKeyColumns) + query, err := BuildUniqueKeyMinValuesPreparedQuery(databaseName, originalTableName, uniqueKey) test.S(t).ExpectNil(err) expected := ` select /* gh-ost mydb.tbl */ name, position @@ -326,7 +326,7 @@ func TestBuildUniqueKeyMinValuesPreparedQuery(t *testing.T) { test.S(t).ExpectEquals(normalizeQuery(query), normalizeQuery(expected)) } { - query, err := BuildUniqueKeyMaxValuesPreparedQuery(databaseName, originalTableName, indexName, uniqueKeyColumns) + query, err := BuildUniqueKeyMaxValuesPreparedQuery(databaseName, originalTableName, uniqueKey) test.S(t).ExpectNil(err) expected := ` select /* gh-ost mydb.tbl */ name, position