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
```
Этот коммит содержится в:
Agniva De Sarker
2025-04-24 21:29:09 +05:30
коммит произвёл 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()