MM-63878: Fix INSERT IGNORE in saveChannelT (#30850)
INSERT IGNORE will ignore ALL errors in the INSERT statement. This is not what was intended. The right way is to do a redundant update on duplicate key. It's not great, but that's how MySQL wants us to do it. https://mattermost.atlassian.net/browse/MM-63878 ```release-note NONE ```
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
faf68a6d86
Коммит
29f7c895b8
@@ -742,19 +742,14 @@ func (s SqlChannelStore) saveChannelT(transaction *sqlxTxWrapper, channel *model
|
||||
}
|
||||
}
|
||||
|
||||
var insert sq.InsertBuilder
|
||||
insert := s.getQueryBuilder().
|
||||
Insert("Channels").
|
||||
Columns(channelSliceColumns()...).
|
||||
Values(channelToSlice(channel)...)
|
||||
if s.DriverName() == model.DatabaseDriverMysql {
|
||||
insert = s.getQueryBuilder().
|
||||
Insert("Channels").
|
||||
Options("IGNORE").
|
||||
Columns(channelSliceColumns()...).
|
||||
Values(channelToSlice(channel)...)
|
||||
insert = insert.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Id=Id"))
|
||||
} else {
|
||||
insert = s.getQueryBuilder().
|
||||
Insert("Channels").
|
||||
Columns(channelSliceColumns()...).
|
||||
Values(channelToSlice(channel)...).
|
||||
SuffixExpr(sq.Expr("ON CONFLICT (TeamId, Name) DO NOTHING"))
|
||||
insert = insert.SuffixExpr(sq.Expr("ON CONFLICT (TeamId, Name) DO NOTHING"))
|
||||
}
|
||||
|
||||
query, params, err := insert.ToSql()
|
||||
|
||||
Ссылка в новой задаче
Block a user