fix INSERT DML handling on renamed column
This commit is contained in:
parent
7c792d3ba3
commit
b63cc3e75e
@ -832,7 +832,7 @@ func (this *Applier) buildDMLEventQuery(dmlEvent *binlog.BinlogDMLEvent) (query
|
||||
}
|
||||
case binlog.InsertDML:
|
||||
{
|
||||
query, sharedArgs, err := sql.BuildDMLInsertQuery(dmlEvent.DatabaseName, this.migrationContext.GetGhostTableName(), this.migrationContext.OriginalTableColumns, this.migrationContext.MappedSharedColumns, dmlEvent.NewColumnValues.AbstractValues())
|
||||
query, sharedArgs, err := sql.BuildDMLInsertQuery(dmlEvent.DatabaseName, this.migrationContext.GetGhostTableName(), this.migrationContext.OriginalTableColumns, this.migrationContext.SharedColumns, this.migrationContext.MappedSharedColumns, dmlEvent.NewColumnValues.AbstractValues())
|
||||
return query, sharedArgs, 1, err
|
||||
}
|
||||
case binlog.UpdateDML:
|
||||
|
@ -354,7 +354,7 @@ func BuildDMLDeleteQuery(databaseName, tableName string, tableColumns, uniqueKey
|
||||
return result, uniqueKeyArgs, nil
|
||||
}
|
||||
|
||||
func BuildDMLInsertQuery(databaseName, tableName string, tableColumns, sharedColumns *ColumnList, args []interface{}) (result string, sharedArgs []interface{}, err error) {
|
||||
func BuildDMLInsertQuery(databaseName, tableName string, tableColumns, sharedColumns, mappedSharedColumns *ColumnList, args []interface{}) (result string, sharedArgs []interface{}, err error) {
|
||||
if len(args) != tableColumns.Len() {
|
||||
return result, args, fmt.Errorf("args count differs from table column count in BuildDMLInsertQuery")
|
||||
}
|
||||
@ -367,17 +367,17 @@ func BuildDMLInsertQuery(databaseName, tableName string, tableColumns, sharedCol
|
||||
databaseName = EscapeName(databaseName)
|
||||
tableName = EscapeName(tableName)
|
||||
|
||||
for _, column := range sharedColumns.Names {
|
||||
for _, column := range mappedSharedColumns.Names {
|
||||
tableOrdinal := tableColumns.Ordinals[column]
|
||||
arg := fixArgType(args[tableOrdinal], sharedColumns.IsUnsigned(column))
|
||||
arg := fixArgType(args[tableOrdinal], mappedSharedColumns.IsUnsigned(column))
|
||||
sharedArgs = append(sharedArgs, arg)
|
||||
}
|
||||
|
||||
sharedColumnNames := duplicateNames(sharedColumns.Names)
|
||||
for i := range sharedColumnNames {
|
||||
sharedColumnNames[i] = EscapeName(sharedColumnNames[i])
|
||||
mappedSharedColumnNames := duplicateNames(mappedSharedColumns.Names)
|
||||
for i := range mappedSharedColumnNames {
|
||||
mappedSharedColumnNames[i] = EscapeName(mappedSharedColumnNames[i])
|
||||
}
|
||||
preparedValues := buildPreparedValues(sharedColumns.Len())
|
||||
preparedValues := buildPreparedValues(mappedSharedColumns.Len())
|
||||
|
||||
result = fmt.Sprintf(`
|
||||
replace /* gh-ost %s.%s */ into
|
||||
@ -387,7 +387,7 @@ func BuildDMLInsertQuery(databaseName, tableName string, tableColumns, sharedCol
|
||||
(%s)
|
||||
`, databaseName, tableName,
|
||||
databaseName, tableName,
|
||||
strings.Join(sharedColumnNames, ", "),
|
||||
strings.Join(mappedSharedColumnNames, ", "),
|
||||
strings.Join(preparedValues, ", "),
|
||||
)
|
||||
return result, sharedArgs, nil
|
||||
|
@ -442,7 +442,7 @@ func TestBuildDMLInsertQuery(t *testing.T) {
|
||||
args := []interface{}{3, "testname", "first", 17, 23}
|
||||
{
|
||||
sharedColumns := NewColumnList([]string{"id", "name", "position", "age"})
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, args)
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, args)
|
||||
test.S(t).ExpectNil(err)
|
||||
expected := `
|
||||
replace /* gh-ost mydb.tbl */
|
||||
@ -456,7 +456,7 @@ func TestBuildDMLInsertQuery(t *testing.T) {
|
||||
}
|
||||
{
|
||||
sharedColumns := NewColumnList([]string{"position", "name", "age", "id"})
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, args)
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, args)
|
||||
test.S(t).ExpectNil(err)
|
||||
expected := `
|
||||
replace /* gh-ost mydb.tbl */
|
||||
@ -470,12 +470,12 @@ func TestBuildDMLInsertQuery(t *testing.T) {
|
||||
}
|
||||
{
|
||||
sharedColumns := NewColumnList([]string{"position", "name", "surprise", "id"})
|
||||
_, _, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, args)
|
||||
_, _, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, args)
|
||||
test.S(t).ExpectNotNil(err)
|
||||
}
|
||||
{
|
||||
sharedColumns := NewColumnList([]string{})
|
||||
_, _, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, args)
|
||||
_, _, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, args)
|
||||
test.S(t).ExpectNotNil(err)
|
||||
}
|
||||
}
|
||||
@ -489,7 +489,7 @@ func TestBuildDMLInsertQuerySignedUnsigned(t *testing.T) {
|
||||
// testing signed
|
||||
args := []interface{}{3, "testname", "first", int8(-1), 23}
|
||||
sharedColumns := NewColumnList([]string{"id", "name", "position", "age"})
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, args)
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, args)
|
||||
test.S(t).ExpectNil(err)
|
||||
expected := `
|
||||
replace /* gh-ost mydb.tbl */
|
||||
@ -505,7 +505,7 @@ func TestBuildDMLInsertQuerySignedUnsigned(t *testing.T) {
|
||||
// testing unsigned
|
||||
args := []interface{}{3, "testname", "first", int8(-1), 23}
|
||||
sharedColumns.SetUnsigned("position")
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, args)
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, args)
|
||||
test.S(t).ExpectNil(err)
|
||||
expected := `
|
||||
replace /* gh-ost mydb.tbl */
|
||||
@ -521,7 +521,7 @@ func TestBuildDMLInsertQuerySignedUnsigned(t *testing.T) {
|
||||
// testing unsigned
|
||||
args := []interface{}{3, "testname", "first", int32(-1), 23}
|
||||
sharedColumns.SetUnsigned("position")
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, args)
|
||||
query, sharedArgs, err := BuildDMLInsertQuery(databaseName, tableName, tableColumns, sharedColumns, sharedColumns, args)
|
||||
test.S(t).ExpectNil(err)
|
||||
expected := `
|
||||
replace /* gh-ost mydb.tbl */
|
||||
|
Loading…
Reference in New Issue
Block a user