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 {
|
if s.DriverName() == model.DatabaseDriverMysql {
|
||||||
insert = s.getQueryBuilder().
|
insert = insert.SuffixExpr(sq.Expr("ON DUPLICATE KEY UPDATE Id=Id"))
|
||||||
Insert("Channels").
|
|
||||||
Options("IGNORE").
|
|
||||||
Columns(channelSliceColumns()...).
|
|
||||||
Values(channelToSlice(channel)...)
|
|
||||||
} else {
|
} else {
|
||||||
insert = s.getQueryBuilder().
|
insert = insert.SuffixExpr(sq.Expr("ON CONFLICT (TeamId, Name) DO NOTHING"))
|
||||||
Insert("Channels").
|
|
||||||
Columns(channelSliceColumns()...).
|
|
||||||
Values(channelToSlice(channel)...).
|
|
||||||
SuffixExpr(sq.Expr("ON CONFLICT (TeamId, Name) DO NOTHING"))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
query, params, err := insert.ToSql()
|
query, params, err := insert.ToSql()
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user