diff --git a/go/test/endtoend/onlineddl/vrepl_suite/untestdata/fail-no-shared-uk/alter b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-no-shared-uk/alter similarity index 100% rename from go/test/endtoend/onlineddl/vrepl_suite/untestdata/fail-no-shared-uk/alter rename to go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-no-shared-uk/alter diff --git a/go/test/endtoend/onlineddl/vrepl_suite/untestdata/fail-no-shared-uk/create.sql b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-no-shared-uk/create.sql similarity index 100% rename from go/test/endtoend/onlineddl/vrepl_suite/untestdata/fail-no-shared-uk/create.sql rename to go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-no-shared-uk/create.sql diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-no-shared-uk/expect_failure b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-no-shared-uk/expect_failure new file mode 100644 index 00000000000..b66e92432da --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-no-shared-uk/expect_failure @@ -0,0 +1 @@ +Found no shared diff --git a/go/test/endtoend/onlineddl/vrepl_suite/untestdata/enum-to-varchar/alter b/go/test/endtoend/onlineddl/vrepl_suite/untestdata/enum-to-varchar/alter deleted file mode 100644 index a7f5412d310..00000000000 --- a/go/test/endtoend/onlineddl/vrepl_suite/untestdata/enum-to-varchar/alter +++ /dev/null @@ -1 +0,0 @@ -change e e varchar(32) not null default '' diff --git a/go/test/endtoend/onlineddl/vrepl_suite/untestdata/enum-to-varchar/create.sql b/go/test/endtoend/onlineddl/vrepl_suite/untestdata/enum-to-varchar/create.sql deleted file mode 100644 index 109b4f63101..00000000000 --- a/go/test/endtoend/onlineddl/vrepl_suite/untestdata/enum-to-varchar/create.sql +++ /dev/null @@ -1,26 +0,0 @@ -drop table if exists onlineddl_test; -create table onlineddl_test ( - id int auto_increment, - i int not null, - e enum('red', 'green', 'blue', 'orange') null default null collate 'utf8_bin', - primary key(id) -) auto_increment=1; - -insert into onlineddl_test values (null, 7, 'red'); - -drop event if exists onlineddl_test; -delimiter ;; -create event onlineddl_test - on schedule every 1 second - starts current_timestamp - ends current_timestamp + interval 60 second - on completion not preserve - enable - do -begin - insert into onlineddl_test values (null, 11, 'red'); - insert into onlineddl_test values (null, 13, 'green'); - insert into onlineddl_test values (null, 17, 'blue'); - set @last_insert_id := last_insert_id(); - update onlineddl_test set e='orange' where id = @last_insert_id; -end ;; diff --git a/go/test/endtoend/onlineddl/vrepl_suite/untestdata/fail-no-shared-uk/expect_failure b/go/test/endtoend/onlineddl/vrepl_suite/untestdata/fail-no-shared-uk/expect_failure deleted file mode 100644 index d3ef0f15940..00000000000 --- a/go/test/endtoend/onlineddl/vrepl_suite/untestdata/fail-no-shared-uk/expect_failure +++ /dev/null @@ -1 +0,0 @@ -No shared unique key can be found after ALTER diff --git a/go/vt/vttablet/onlineddl/vrepl.go b/go/vt/vttablet/onlineddl/vrepl.go index cafae77c2be..ff735122dc8 100644 --- a/go/vt/vttablet/onlineddl/vrepl.go +++ b/go/vt/vttablet/onlineddl/vrepl.go @@ -369,9 +369,9 @@ func (v *VRepl) analyzeTables(ctx context.Context, conn *dbconnpool.DBConnection v.sourceSharedColumns, v.targetSharedColumns, v.sharedColumnsMap = v.getSharedColumns(sourceColumns, targetColumns, sourceVirtualColumns, targetVirtualColumns, v.parser.ColumnRenameMap()) v.sharedPKColumns = v.getSharedPKColumns(sourcePKColumns, targetPKColumns, v.parser.ColumnRenameMap()) - if v.sharedPKColumns.Len() == 0 { - // TODO(shlomi): need to carefully examine what happens when we extend/reduce a PRIMARY KEY - // is a column subset OK? + pkMatches := (v.sharedPKColumns.Len() > 0 && v.sharedPKColumns.Len() == sourcePKColumns.Len() && v.sharedPKColumns.Len() == targetPKColumns.Len()) + if !pkMatches { + // Has to be a 1:1 mapping for all columns return fmt.Errorf("Found no shared PRIMARY KEY columns between `%s` and `%s`", v.sourceTable, v.targetTable) }