Skip to content

Commit a8cfbfb

Browse files
suzakujuly2993
authored andcommitted
drainer: Bugfix, should handle ActionModifySchemaCharsetAndCollate correctly (pingcap#769)
1 parent a35542b commit a8cfbfb

File tree

3 files changed

+26
-0
lines changed

3 files changed

+26
-0
lines changed

drainer/schema.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -289,6 +289,18 @@ func (s *Schema) handleDDL(job *model.Job) (schemaName string, tableName string,
289289
s.currentVersion = job.BinlogInfo.SchemaVersion
290290
schemaName = schema.Name.O
291291

292+
case model.ActionModifySchemaCharsetAndCollate:
293+
db := job.BinlogInfo.DBInfo
294+
if _, ok := s.schemas[db.ID]; !ok {
295+
return "", "", "", errors.NotFoundf("schema %s(%d)", db.Name, db.ID)
296+
}
297+
298+
s.schemas[db.ID] = db
299+
s.schemaNameToID[db.Name.O] = db.ID
300+
s.version2SchemaTable[job.BinlogInfo.SchemaVersion] = TableName{Schema: db.Name.O, Table: ""}
301+
s.currentVersion = job.BinlogInfo.SchemaVersion
302+
schemaName = db.Name.O
303+
292304
case model.ActionDropSchema:
293305
schemaName, err = s.DropSchema(job.SchemaID)
294306
if err != nil {

drainer/schema_test.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,7 @@ func (t *schemaSuite) TestHandleDDL(c *C) {
327327
tableName string
328328
}{
329329
{name: "createSchema", jobID: 3, schemaID: 2, tableID: 0, jobType: model.ActionCreateSchema, binlogInfo: &model.HistoryInfo{SchemaVersion: 1, DBInfo: dbInfo, TableInfo: nil, FinishedTS: 123}, query: "create database Test", resultQuery: "create database Test", schemaName: dbInfo.Name.O, tableName: ""},
330+
{name: "updateSchema", jobID: 4, schemaID: 2, tableID: 0, jobType: model.ActionModifySchemaCharsetAndCollate, binlogInfo: &model.HistoryInfo{SchemaVersion: 8, DBInfo: dbInfo, TableInfo: nil, FinishedTS: 123}, query: "ALTER DATABASE Test CHARACTER SET utf8mb4;", resultQuery: "ALTER DATABASE Test CHARACTER SET utf8mb4;", schemaName: dbInfo.Name.O},
330331
{name: "createTable", jobID: 7, schemaID: 2, tableID: 6, jobType: model.ActionCreateTable, binlogInfo: &model.HistoryInfo{SchemaVersion: 3, DBInfo: nil, TableInfo: tblInfo, FinishedTS: 123}, query: "create table T(id int);", resultQuery: "create table T(id int);", schemaName: dbInfo.Name.O, tableName: tblInfo.Name.O},
331332
{name: "addColumn", jobID: 9, schemaID: 2, tableID: 6, jobType: model.ActionAddColumn, binlogInfo: &model.HistoryInfo{SchemaVersion: 4, DBInfo: nil, TableInfo: tblInfo, FinishedTS: 123}, query: "alter table T add a varchar(45);", resultQuery: "alter table T add a varchar(45);", schemaName: dbInfo.Name.O, tableName: tblInfo.Name.O},
332333
{name: "truncateTable", jobID: 10, schemaID: 2, tableID: 6, jobType: model.ActionTruncateTable, binlogInfo: &model.HistoryInfo{SchemaVersion: 5, DBInfo: nil, TableInfo: tblInfo, FinishedTS: 123}, query: "truncate table T;", resultQuery: "truncate table T;", schemaName: dbInfo.Name.O, tableName: tblInfo.Name.O},

tests/dailytest/case.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,16 @@ var caseRecoverAndInsertClean = []string{`
164164
`,
165165
}
166166

167+
var (
168+
caseAlterDatabase = []string{
169+
`CREATE DATABASE to_be_altered CHARACTER SET utf8;`,
170+
`ALTER DATABASE to_be_altered CHARACTER SET utf8mb4;`,
171+
}
172+
caseAlterDatabaseClean = []string{
173+
`DROP DATABASE to_be_altered;`,
174+
}
175+
)
176+
167177
type testRunner struct {
168178
src *sql.DB
169179
dst *sql.DB
@@ -195,6 +205,9 @@ func RunCase(src *sql.DB, dst *sql.DB, schema string) {
195205
tr.execSQLs(caseUKWithNoPK)
196206
tr.execSQLs(caseUKWithNoPKClean)
197207

208+
tr.execSQLs(caseAlterDatabase)
209+
tr.execSQLs(caseAlterDatabaseClean)
210+
198211
// run casePKAddDuplicateUK
199212
tr.run(func(src *sql.DB) {
200213
err := execSQLs(src, casePKAddDuplicateUK)

0 commit comments

Comments
 (0)