diff --git a/go/mysql/constants.go b/go/mysql/constants.go index 44f18bede8a..415af39e761 100644 --- a/go/mysql/constants.go +++ b/go/mysql/constants.go @@ -535,6 +535,7 @@ const ( ERTableNameNotAllowedHere = 1250 ERQueryInterrupted = 1317 ERTruncatedWrongValueForField = 1366 + ERIllegalValueForType = 1367 ERDataTooLong = 1406 ErrWrongValueForType = 1411 ERWarnDataTruncated = 1265 diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/alter b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/alter new file mode 100644 index 00000000000..9dbaa5784ad --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/alter @@ -0,0 +1 @@ +modify column t datetime diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/create.sql b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/create.sql new file mode 100644 index 00000000000..723344fd19e --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/create.sql @@ -0,0 +1,23 @@ +drop table if exists onlineddl_test; +create table onlineddl_test ( + id int auto_increment, + t varchar(128) charset utf8 collate utf8_general_ci, + primary key(id) +) auto_increment=1; + +insert into onlineddl_test values (null, '2021-12-21 12:21:11'); + +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, '2021-12-21 12:21:12'); + insert into onlineddl_test values (null, '2021-12-21 12:21:13'); + insert into onlineddl_test values (null, ''); +end ;; diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/expect_failure b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/expect_failure new file mode 100644 index 00000000000..faee7e8d148 --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime-2/expect_failure @@ -0,0 +1 @@ +Incorrect datetime value diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/alter b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/alter new file mode 100644 index 00000000000..9dbaa5784ad --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/alter @@ -0,0 +1 @@ +modify column t datetime diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/create.sql b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/create.sql new file mode 100644 index 00000000000..5680fdd2717 --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/create.sql @@ -0,0 +1,23 @@ +drop table if exists onlineddl_test; +create table onlineddl_test ( + id int auto_increment, + t varchar(128) charset utf8 collate utf8_general_ci, + primary key(id) +) auto_increment=1; + +insert into onlineddl_test values (null, '2021-12-21 12:21:11'); + +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, '2021-12-21 12:21:12'); + insert into onlineddl_test values (null, '2021-12-21 12:21:13'); + insert into onlineddl_test values (null, 'something else'); +end ;; diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/expect_failure b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/expect_failure new file mode 100644 index 00000000000..faee7e8d148 --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/fail-utf8-to-datetime/expect_failure @@ -0,0 +1 @@ +Incorrect datetime value diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/utf8-to-datetime/alter b/go/test/endtoend/onlineddl/vrepl_suite/testdata/utf8-to-datetime/alter new file mode 100644 index 00000000000..9dbaa5784ad --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/utf8-to-datetime/alter @@ -0,0 +1 @@ +modify column t datetime diff --git a/go/test/endtoend/onlineddl/vrepl_suite/testdata/utf8-to-datetime/create.sql b/go/test/endtoend/onlineddl/vrepl_suite/testdata/utf8-to-datetime/create.sql new file mode 100644 index 00000000000..548e257767f --- /dev/null +++ b/go/test/endtoend/onlineddl/vrepl_suite/testdata/utf8-to-datetime/create.sql @@ -0,0 +1,23 @@ +drop table if exists onlineddl_test; +create table onlineddl_test ( + id int auto_increment, + t varchar(128) charset utf8 collate utf8_general_ci, + primary key(id) +) auto_increment=1; + +insert into onlineddl_test values (null, '2021-12-21 12:21:11'); + +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, '2021-12-21 12:21:12'); + insert into onlineddl_test values (null, '2021-12-21 12:21:13'); + insert into onlineddl_test values (null, '2021-12-21 12:21:14'); +end ;; diff --git a/go/vt/vttablet/tabletmanager/vreplication/utils.go b/go/vt/vttablet/tabletmanager/vreplication/utils.go index 10ef8716605..4f433872e98 100644 --- a/go/vt/vttablet/tabletmanager/vreplication/utils.go +++ b/go/vt/vttablet/tabletmanager/vreplication/utils.go @@ -142,7 +142,9 @@ func isUnrecoverableError(err error) bool { mysql.ERWarnDataOutOfRange, mysql.ERDataTooLong, mysql.ERWarnDataTruncated, + mysql.ERTruncatedWrongValue, mysql.ERTruncatedWrongValueForField, + mysql.ERIllegalValueForType, mysql.ErrWrongValueForType, mysql.ErrCantCreateGeometryObject, mysql.ErrGISDataWrongEndianess, diff --git a/go/vt/vttablet/tabletserver/tabletserver.go b/go/vt/vttablet/tabletserver/tabletserver.go index 7c264e6c610..02047709d89 100644 --- a/go/vt/vttablet/tabletserver/tabletserver.go +++ b/go/vt/vttablet/tabletserver/tabletserver.go @@ -1501,7 +1501,7 @@ func convertErrorCode(err error) vtrpcpb.Code { mysql.ERCantAggregate3Collations, mysql.ERCantAggregateNCollations, mysql.ERVariableIsNotStruct, mysql.ERUnknownCollation, mysql.ERWrongNameForIndex, mysql.ERWrongNameForCatalog, mysql.ERBadFTColumn, mysql.ERTruncatedWrongValue, mysql.ERTooMuchAutoTimestampCols, mysql.ERInvalidOnUpdate, mysql.ERUnknownTimeZone, mysql.ERInvalidCharacterString, mysql.ERIllegalReference, mysql.ERDerivedMustHaveAlias, mysql.ERTableNameNotAllowedHere, mysql.ERDataTooLong, mysql.ERDataOutOfRange, - mysql.ERTruncatedWrongValueForField: + mysql.ERTruncatedWrongValueForField, mysql.ERIllegalValueForType: errCode = vtrpcpb.Code_INVALID_ARGUMENT case mysql.ERSpecifiedAccessDenied: errCode = vtrpcpb.Code_PERMISSION_DENIED