diff --git a/src/vendor/github.com/radondb/shift/shift/delete.go b/src/vendor/github.com/radondb/shift/shift/delete.go index 3b2cfdab..85e8dea7 100644 --- a/src/vendor/github.com/radondb/shift/shift/delete.go +++ b/src/vendor/github.com/radondb/shift/shift/delete.go @@ -39,14 +39,14 @@ func (h *EventHandler) DeleteRow(e *canal.RowsEvent) { if len(pks) > 0 { for _, pk := range pks { v := row[pk] - values = append(values, fmt.Sprintf("%s=%s", e.Table.Columns[pk].Name, h.ParseValue(e, pk, v))) + values = append(values, fmt.Sprintf("`%s`=%s", e.Table.Columns[pk].Name, h.ParseValue(e, pk, v))) } } else { for j, v := range row { if v == nil { continue } - values = append(values, fmt.Sprintf("%s=%s", e.Table.Columns[j].Name, h.ParseValue(e, j, v))) + values = append(values, fmt.Sprintf("`%s`=%s", e.Table.Columns[j].Name, h.ParseValue(e, j, v))) } } diff --git a/src/vendor/github.com/radondb/shift/shift/shift.go b/src/vendor/github.com/radondb/shift/shift/shift.go index b3c4b1a6..a875ab60 100644 --- a/src/vendor/github.com/radondb/shift/shift/shift.go +++ b/src/vendor/github.com/radondb/shift/shift/shift.go @@ -257,7 +257,7 @@ func (shift *Shift) ChecksumTable() error { } checksumFunc := func(t string, Conn *client.Conn, Database string, Table string, c chan interface{}) { - sql := fmt.Sprintf("checksum table %s.%s", Database, Table) + sql := fmt.Sprintf("checksum table `%s`.`%s`", Database, Table) r, err := Conn.Execute(sql) if err != nil { log.Error("shift.checksum.%s.table[%s.%s].error", t, Database, Table) diff --git a/src/vendor/github.com/radondb/shift/shift/shift_test.go b/src/vendor/github.com/radondb/shift/shift/shift_test.go index d08dd229..784eaa88 100644 --- a/src/vendor/github.com/radondb/shift/shift/shift_test.go +++ b/src/vendor/github.com/radondb/shift/shift/shift_test.go @@ -1538,3 +1538,61 @@ func TestSupportShiftToRadonDB(t *testing.T) { log.Info("shift to radondb done.") } } + +// Fix bug for issue #560 +func TestShiftColOrTblNameWithoutQuote(t *testing.T) { + log := xlog.NewStdLog(xlog.Level(xlog.DEBUG)) + + fromPool, errfrom := NewPool(log, 4, mockCfg.From, mockCfg.FromUser, mockCfg.FromPassword) + assert.Nil(t, errfrom) + fromConn := fromPool.Get() + // Clean before exit + defer func() { + sql := "DROP DATABASE IF EXISTS `a-b_db`" + if _, err := fromConn.Execute(sql); err != nil { + log.Panicf("test.drop.databse.error:%+v", err) + } + fromPool.Put(fromConn) + fromPool.Close() + }() + + // Drop test DB + sql := "DROP DATABASE IF EXISTS `a-b_db`" + if _, err := fromConn.Execute(sql); err != nil { + log.Panicf("test.drop.from.databse.error:%+v", err) + } + + // Create DB error + _, err := fromConn.Execute("CREATE DATABASE a-b_db") + assert.NotNil(t, err) + + // Create DB success + _, err = fromConn.Execute("CREATE DATABASE `a-b_db`") + assert.Nil(t, err) + + // Create table error + _, err = fromConn.Execute("CREATE TABLE `a-b_db`.a-b_tbl(`char` int, `key` bigint) ENGINE=InnoDB DEFAULT CHARSET=utf8") + assert.NotNil(t, err) + + // Create table success + _, err = fromConn.Execute("CREATE TABLE `a-b_db`.`a-b_tbl`(`char` int, `key` bigint) ENGINE=InnoDB DEFAULT CHARSET=utf8") + assert.Nil(t, err) + + _, err = fromConn.Execute("INSERT INTO `a-b_db`.`a-b_tbl` VALUES (3, -3.14)") + assert.Nil(t, err) + + // Update col fail + _, err = fromConn.Execute("UPDATE `a-b_db`.`a-b_tbl` set char=1 where char=3") + assert.NotNil(t, err) + // Update col success + _, err = fromConn.Execute("UPDATE `a-b_db`.`a-b_tbl` set `char`=1 where `char`=3") + assert.Nil(t, err) + + // DELETE fail + _, err = fromConn.Execute("DELETE FROM `a-b_db`.`a-b_tbl` where char=3") + assert.NotNil(t, err) + + // DELETE success + _, err = fromConn.Execute("DELETE FROM `a-b_db`.`a-b_tbl` where `char`=3") + assert.Nil(t, err) +} diff --git a/src/vendor/github.com/radondb/shift/shift/update.go b/src/vendor/github.com/radondb/shift/shift/update.go index 8003d78e..96fb92de 100644 --- a/src/vendor/github.com/radondb/shift/shift/update.go +++ b/src/vendor/github.com/radondb/shift/shift/update.go @@ -46,20 +46,20 @@ func (h *EventHandler) UpdateRow(e *canal.RowsEvent) { if len(pks) > 0 { for _, pk := range pks { v := v1Row[pk] - wheres = append(wheres, fmt.Sprintf("%s=%s", e.Table.Columns[pk].Name, h.ParseValue(e, pk, v))) + wheres = append(wheres, fmt.Sprintf("`%s`=%s", e.Table.Columns[pk].Name, h.ParseValue(e, pk, v))) } } for i := range v2Row { v2 := v2Row[i] if v2 != nil { - values = append(values, fmt.Sprintf("%s=%s", e.Table.Columns[i].Name, h.ParseValue(e, i, v2))) + values = append(values, fmt.Sprintf("`%s`=%s", e.Table.Columns[i].Name, h.ParseValue(e, i, v2))) } if len(pks) == 0 { v1 := v1Row[i] if v1 != nil { - wheres = append(wheres, fmt.Sprintf("%s=%s", e.Table.Columns[i].Name, h.ParseValue(e, i, v1))) + wheres = append(wheres, fmt.Sprintf("`%s`=%s", e.Table.Columns[i].Name, h.ParseValue(e, i, v1))) } } }