Fix other bugs in syncer.

This commit is contained in:
Yang Luo 2021-12-25 00:05:54 +08:00
parent e79e3c36d0
commit 4b4c9be71b
5 changed files with 23 additions and 26 deletions

View File

@ -167,3 +167,11 @@ func (syncer *Syncer) getTableColumnsTypeMap() map[string]string {
}
return m
}
func (syncer *Syncer) getTable() string {
if syncer.DatabaseType == "mssql" {
return fmt.Sprintf("[%s]", syncer.Table)
} else {
return syncer.Table
}
}

View File

@ -77,7 +77,9 @@ func (syncer *Syncer) syncUsers() {
for _, user := range users {
id := user.Id
if _, ok := oUserMap[id]; !ok {
panic(fmt.Sprintf("New original user: cannot create now, user = %v", user))
newOUser := syncer.createOriginalUserFromUser(user)
syncer.addUser(newOUser)
fmt.Printf("New oUser: %v\n", newOUser)
}
}
}

View File

@ -26,11 +26,7 @@ import (
type OriginalUser = User
func (syncer *Syncer) getOriginalUsers() []*OriginalUser {
sql := fmt.Sprintf("select * from %s", syncer.Table)
if syncer.DatabaseType == "mssql" {
sql = fmt.Sprintf("select * from [%s]", syncer.Table)
}
sql := fmt.Sprintf("select * from %s", syncer.getTable())
results, err := syncer.Adapter.Engine.QueryString(sql)
if err != nil {
panic(err)
@ -51,10 +47,9 @@ func (syncer *Syncer) getOriginalUserMap() ([]*OriginalUser, map[string]*Origina
func (syncer *Syncer) addUser(user *OriginalUser) bool {
m := syncer.getMapFromOriginalUser(user)
keyString := syncer.getSqlKeyStringFromMap(m)
valueString := syncer.getSqlValueStringFromMap(m)
keyString, valueString := syncer.getSqlKeyValueStringFromMap(m)
sql := fmt.Sprintf("insert into %s (%s) values (%s)", syncer.Table, keyString, valueString)
sql := fmt.Sprintf("insert into %s (%s) values (%s)", syncer.getTable(), keyString, valueString)
res, err := syncer.Adapter.Engine.Exec(sql)
if err != nil {
panic(err)
@ -95,7 +90,7 @@ func (syncer *Syncer) updateUser(user *OriginalUser) bool {
delete(m, syncer.TablePrimaryKey)
setString := syncer.getSqlSetStringFromMap(m)
sql := fmt.Sprintf("update %s set %s where %s = %s", syncer.Table, setString, syncer.TablePrimaryKey, pkValue)
sql := fmt.Sprintf("update %s set %s where %s = %s", syncer.getTable(), setString, syncer.TablePrimaryKey, pkValue)
res, err := syncer.Adapter.Engine.Exec(sql)
if err != nil {
panic(err)

View File

@ -233,26 +233,18 @@ func (syncer *Syncer) getSqlSetStringFromMap(m map[string]string) string {
return strings.Join(tokens, ", ")
}
func (syncer *Syncer) getSqlKeyStringFromMap(m map[string]string) string {
tokens := []string{}
for k, _ := range m {
token := k
tokens = append(tokens, token)
}
return strings.Join(tokens, ", ")
}
func (syncer *Syncer) getSqlValueStringFromMap(m map[string]string) string {
func (syncer *Syncer) getSqlKeyValueStringFromMap(m map[string]string) (string, string) {
typeMap := syncer.getTableColumnsTypeMap()
tokens := []string{}
keys := []string{}
values := []string{}
for k, v := range m {
token := v
if typeMap[k] == "string" {
token = fmt.Sprintf("'%s'", v)
v = fmt.Sprintf("'%s'", v)
}
tokens = append(tokens, token)
keys = append(keys, k)
values = append(values, v)
}
return strings.Join(tokens, ", ")
return strings.Join(keys, ", "), strings.Join(values, ", ")
}

View File

@ -24,7 +24,7 @@ func (syncer *Syncer) getUserMap() ([]*User, map[string]*User) {
m := map[string]*User{}
for _, user := range users {
m[user.Name] = user
m[user.Id] = user
}
return users, m
}