github.com/pingcap/tiflow@v0.0.0-20240520035814-5bf52d54e205/dm/pkg/binlog/event/ddl_test.go (about) 1 // Copyright 2019 PingCAP, Inc. 2 // 3 // Licensed under the Apache License, Version 2.0 (the "License"); 4 // you may not use this file except in compliance with the License. 5 // You may obtain a copy of the License at 6 // 7 // http://www.apache.org/licenses/LICENSE-2.0 8 // 9 // Unless required by applicable law or agreed to in writing, software 10 // distributed under the License is distributed on an "AS IS" BASIS, 11 // See the License for the specific language governing permissions and 12 // limitations under the License. 13 14 package event 15 16 import ( 17 "bytes" 18 "fmt" 19 "testing" 20 21 gmysql "github.com/go-mysql-org/go-mysql/mysql" 22 "github.com/pingcap/tiflow/dm/pkg/gtid" 23 "github.com/stretchr/testify/require" 24 ) 25 26 func TestGenDDLEvent(t *testing.T) { 27 t.Parallel() 28 var ( 29 serverID uint32 = 101 30 latestPos uint32 = 123 31 schema = "test_db" 32 table = "test_tbl" 33 ) 34 35 // only some simple tests in this case and we can test parsing a binlog file including common header, DDL and DML in another case. 36 37 // test CREATE/DROP table for MariaDB 38 flavor := gmysql.MariaDBFlavor 39 gSetStr := fmt.Sprintf("1-%d-3", serverID) 40 latestGTID, err := gtid.ParserGTID(flavor, gSetStr) 41 require.Nil(t, err) 42 43 // ALTER TABLE 44 query := fmt.Sprintf("ALTER TABLE `%s`.`%s` CHANGE COLUMN `c2` `c2` decimal(10,3)", schema, table) 45 result, err := GenDDLEvents(flavor, serverID, latestPos, latestGTID, schema, query, true, false, 0) 46 require.Nil(t, err) 47 require.Len(t, result.Events, 2) 48 require.True(t, bytes.Contains(result.Data, []byte("ALTER TABLE"))) 49 require.True(t, bytes.Contains(result.Data, []byte(table))) 50 require.Equal(t, latestPos+uint32(len(result.Data)), result.LatestPos) 51 require.Equal(t, fmt.Sprintf("1-%d-4", serverID), result.LatestGTID.String()) 52 }