convert MessageExport query to squirrel (#28023)

Co-authored-by: Benjamin Cooke <ben@Benjamins-MacBook-Pro-2.local>
Этот коммит содержится в:
Ben Cooke
2024-09-03 06:36:14 -04:00
коммит произвёл GitHub
родитель 0e1b336c7e
Коммит 57450489e6

Просмотреть файл

@@ -272,11 +272,21 @@ func (s SqlComplianceStore) ComplianceExport(job *model.Compliance, cursor model
} }
func (s SqlComplianceStore) MessageExport(c request.CTX, cursor model.MessageExportCursor, limit int) ([]*model.MessageExport, model.MessageExportCursor, error) { func (s SqlComplianceStore) MessageExport(c request.CTX, cursor model.MessageExportCursor, limit int) ([]*model.MessageExport, model.MessageExportCursor, error) {
var args []any caseStmt, caseArgs, caseErr := sq.Case().
args = append(args, model.ChannelTypeDirect, model.ChannelTypeGroup, cursor.LastPostUpdateAt, cursor.LastPostUpdateAt, cursor.LastPostId, limit) When(
query := sq.Eq{"Channels.Type": model.ChannelTypeDirect},
`SELECT "'Direct Message'",
Posts.Id AS PostId, ).
When(
sq.Eq{"Channels.Type": model.ChannelTypeGroup},
"'Group Message'",
).
Else("Channels.DisplayName").ToSql()
if caseErr != nil {
return nil, cursor, errors.Wrap(caseErr, "unable to construct case statement")
}
query, args, err := s.getQueryBuilder().Select(`Posts.Id AS PostId,
Posts.CreateAt AS PostCreateAt, Posts.CreateAt AS PostCreateAt,
Posts.UpdateAt AS PostUpdateAt, Posts.UpdateAt AS PostUpdateAt,
Posts.DeleteAt AS PostDeleteAt, Posts.DeleteAt AS PostDeleteAt,
@@ -290,32 +300,34 @@ func (s SqlComplianceStore) MessageExport(c request.CTX, cursor model.MessageExp
Teams.Name AS TeamName, Teams.Name AS TeamName,
Teams.DisplayName AS TeamDisplayName, Teams.DisplayName AS TeamDisplayName,
Channels.Id AS ChannelId, Channels.Id AS ChannelId,
CASE
WHEN Channels.Type = ? THEN 'Direct Message'
WHEN Channels.Type = ? THEN 'Group Message'
ELSE Channels.DisplayName
END AS ChannelDisplayName,
Channels.Name AS ChannelName, Channels.Name AS ChannelName,
Channels.Type AS ChannelType, Channels.Type AS ChannelType,
Users.Id AS UserId, Users.Id AS UserId,
Users.Email AS UserEmail, Users.Email AS UserEmail,
Users.Username, Users.Username,
Bots.UserId IS NOT NULL AS IsBot Bots.UserId IS NOT NULL AS IsBot`).
FROM Column(caseStmt+" AS ChannelDisplayName", caseArgs...).
Posts From("Posts").
LEFT OUTER JOIN Channels ON Posts.ChannelId = Channels.Id JoinClause("LEFT OUTER JOIN Channels ON Posts.ChannelId = Channels.Id").
LEFT OUTER JOIN Teams ON Channels.TeamId = Teams.Id JoinClause("LEFT OUTER JOIN Teams ON Channels.TeamId = Teams.Id").
LEFT OUTER JOIN Users ON Posts.UserId = Users.Id JoinClause("LEFT OUTER JOIN Users ON Posts.UserId = Users.Id").
LEFT JOIN Bots ON Bots.UserId = Posts.UserId LeftJoin("Bots ON Bots.UserId = Posts.UserId").
WHERE ( Where(sq.And{
Posts.UpdateAt > ? sq.Or{
OR ( sq.Gt{"Posts.UpdateAt": cursor.LastPostUpdateAt},
Posts.UpdateAt = ? sq.And{
AND Posts.Id > ? sq.Eq{"Posts.UpdateAt": cursor.LastPostUpdateAt},
) sq.Gt{"Posts.Id": cursor.LastPostId},
) AND Posts.Type NOT LIKE 'system_%' },
ORDER BY PostUpdateAt, PostId },
LIMIT ?` sq.NotLike{"Posts.Type": "system_%"},
}).
OrderBy("PostUpdateAt, PostId").
Limit(uint64(limit)).
ToSql()
if err != nil {
return nil, cursor, errors.Wrap(err, "unable to construct query to export messages")
}
cposts := []*model.MessageExport{} cposts := []*model.MessageExport{}
if err := s.GetReplicaX().SelectCtx(c.Context(), &cposts, query, args...); err != nil { if err := s.GetReplicaX().SelectCtx(c.Context(), &cposts, query, args...); err != nil {