Fix updating old DB code.

This commit is contained in:
Yang Luo 2021-12-24 00:36:53 +08:00
parent f4890a6a22
commit 3818492065
4 changed files with 76 additions and 9 deletions

View File

@ -158,3 +158,11 @@ func DeleteSyncer(syncer *Syncer) bool {
func (syncer *Syncer) GetId() string {
return fmt.Sprintf("%s/%s", syncer.Owner, syncer.Name)
}
func (syncer *Syncer) getTableColumnsTypeMap() map[string]string {
m := map[string]string{}
for _, tableColumn := range syncer.TableColumns {
m[tableColumn.Name] = tableColumn.Type
}
return m
}

View File

@ -48,7 +48,16 @@ func (syncer *Syncer) getOriginalUserMap() ([]*OriginalUser, map[string]*Origina
func (syncer *Syncer) addUser(user *OriginalUser) bool {
m := syncer.getMapFromOriginalUser(user)
affected, err := syncer.Adapter.Engine.Table(syncer.Table).Insert(m)
keyString := syncer.getSqlKeyStringFromMap(m)
valueString := syncer.getSqlValueStringFromMap(m)
sql := fmt.Sprintf("insert into %s (%s) values (%s)", syncer.Table, keyString, valueString)
res, err := syncer.Adapter.Engine.Exec(sql)
if err != nil {
panic(err)
}
affected, err := res.RowsAffected()
if err != nil {
panic(err)
}
@ -56,7 +65,7 @@ func (syncer *Syncer) addUser(user *OriginalUser) bool {
return affected != 0
}
func (syncer *Syncer) getOriginalColumns() []string {
/*func (syncer *Syncer) getOriginalColumns() []string {
res := []string{}
for _, tableColumn := range syncer.TableColumns {
if tableColumn.CasdoorName != "Id" {
@ -64,7 +73,7 @@ func (syncer *Syncer) getOriginalColumns() []string {
}
}
return res
}
}*/
func (syncer *Syncer) getCasdoorColumns() []string {
res := []string{}
@ -79,8 +88,17 @@ func (syncer *Syncer) getCasdoorColumns() []string {
func (syncer *Syncer) updateUser(user *OriginalUser) bool {
m := syncer.getMapFromOriginalUser(user)
columns := syncer.getOriginalColumns()
affected, err := syncer.Adapter.Engine.Table(syncer.Table).ID(syncer.TablePrimaryKey).Cols(columns...).Update(m)
pkValue := m[syncer.TablePrimaryKey]
delete(m, syncer.TablePrimaryKey)
setString := syncer.getSqlSetStringFromMap(m)
sql := fmt.Sprintf("update %s set %s where %s = %s", syncer.Table, setString, syncer.TablePrimaryKey, pkValue)
res, err := syncer.Adapter.Engine.Exec(sql)
if err != nil {
panic(err)
}
affected, err := res.RowsAffected()
if err != nil {
panic(err)
}

View File

@ -27,7 +27,7 @@ func (syncer *Syncer) getFullAvatarUrl(avatar string) string {
return avatar
}
if !strings.HasPrefix(avatar, "https://") {
if !strings.HasPrefix(avatar, "http") {
return fmt.Sprintf("%s%s", syncer.AvatarBaseUrl, avatar)
}
return avatar
@ -76,7 +76,9 @@ func (syncer *Syncer) createUserFromOriginalUser(originalUser *OriginalUser, aff
}
func (syncer *Syncer) createOriginalUserFromUser(user *User) *OriginalUser {
return user
originalUser := *user
originalUser.Avatar = syncer.getPartialAvatarUrl(user.Avatar)
return &originalUser
}
func (syncer *Syncer) setUserByKeyValue(user *User, key string, value string) {
@ -211,3 +213,42 @@ func (syncer *Syncer) getMapFromOriginalUser(user *OriginalUser) map[string]stri
return m2
}
func (syncer *Syncer) getSqlSetStringFromMap(m map[string]string) string {
typeMap := syncer.getTableColumnsTypeMap()
tokens := []string{}
for k, v := range m {
token := fmt.Sprintf("%s = %s", k, v)
if typeMap[k] == "string" {
token = fmt.Sprintf("%s = '%s'", k, v)
}
tokens = append(tokens, token)
}
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 {
typeMap := syncer.getTableColumnsTypeMap()
tokens := []string{}
for k, v := range m {
token := v
if typeMap[k] == "string" {
token = fmt.Sprintf("'%s'", v)
}
tokens = append(tokens, token)
}
return strings.Join(tokens, ", ")
}

View File

@ -32,8 +32,8 @@ type User struct {
Password string `xorm:"varchar(100)" json:"password"`
PasswordSalt string `xorm:"varchar(100)" json:"passwordSalt"`
DisplayName string `xorm:"varchar(100)" json:"displayName"`
Avatar string `xorm:"varchar(255)" json:"avatar"`
PermanentAvatar string `xorm:"varchar(255)" json:"permanentAvatar"`
Avatar string `xorm:"varchar(500)" json:"avatar"`
PermanentAvatar string `xorm:"varchar(500)" json:"permanentAvatar"`
Email string `xorm:"varchar(100)" json:"email"`
Phone string `xorm:"varchar(100)" json:"phone"`
Location string `xorm:"varchar(100)" json:"location"`