Fix problem with nulls in file infos content field (#17404)

Этот коммит содержится в:
Jesús Espino
2021-04-16 09:38:48 +02:00
коммит произвёл GitHub
родитель f90209c8a3
Коммит 09a52aab3e

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

@@ -101,12 +101,12 @@ func (fs SqlFileInfoStore) Save(info *model.FileInfo) (*model.FileInfo, error) {
func (fs SqlFileInfoStore) GetByIds(ids []string) ([]*model.FileInfo, error) { func (fs SqlFileInfoStore) GetByIds(ids []string) ([]*model.FileInfo, error) {
query := fs.getQueryBuilder(). query := fs.getQueryBuilder().
Select("FI.*, P.ChannelId"). Select(append(fs.queryFields, "P.ChannelId")...).
From("FileInfo as FI"). From("FileInfo").
LeftJoin("Posts as P ON FI.PostId=P.Id"). LeftJoin("Posts as P ON FileInfo.PostId=P.Id").
Where(sq.Eq{"FI.Id": ids}). Where(sq.Eq{"FileInfo.Id": ids}).
Where(sq.Eq{"FI.DeleteAt": 0}). Where(sq.Eq{"FileInfo.DeleteAt": 0}).
OrderBy("FI.CreateAt DESC") OrderBy("FileInfo.CreateAt DESC")
queryString, args, err := query.ToSql() queryString, args, err := query.ToSql()
if err != nil { if err != nil {
@@ -428,14 +428,14 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team
return nil, err return nil, err
} }
query := fs.getQueryBuilder(). query := fs.getQueryBuilder().
Select("FI.*, P.ChannelId as ChannelId"). Select(append(fs.queryFields, "P.ChannelId as ChannelId")...).
From("FileInfo AS FI"). From("FileInfo").
LeftJoin("Posts as P ON FI.PostId=P.Id"). LeftJoin("Posts as P ON FileInfo.PostId=P.Id").
LeftJoin("Channels as C ON C.Id=P.ChannelId"). LeftJoin("Channels as C ON C.Id=P.ChannelId").
LeftJoin("ChannelMembers as CM ON C.Id=CM.ChannelId"). LeftJoin("ChannelMembers as CM ON C.Id=CM.ChannelId").
Where(sq.Or{sq.Eq{"C.TeamId": teamId}, sq.Eq{"C.TeamId": ""}}). Where(sq.Or{sq.Eq{"C.TeamId": teamId}, sq.Eq{"C.TeamId": ""}}).
Where(sq.Eq{"FI.DeleteAt": 0}). Where(sq.Eq{"FileInfo.DeleteAt": 0}).
OrderBy("FI.CreateAt DESC"). OrderBy("FileInfo.CreateAt DESC").
Limit(100) Limit(100)
for _, params := range paramsList { for _, params := range paramsList {
@@ -454,11 +454,11 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team
} }
if len(params.Extensions) != 0 { if len(params.Extensions) != 0 {
query = query.Where(sq.Eq{"FI.Extension": params.Extensions}) query = query.Where(sq.Eq{"FileInfo.Extension": params.Extensions})
} }
if len(params.ExcludedExtensions) != 0 { if len(params.ExcludedExtensions) != 0 {
query = query.Where(sq.NotEq{"FI.Extension": params.ExcludedExtensions}) query = query.Where(sq.NotEq{"FileInfo.Extension": params.ExcludedExtensions})
} }
if len(params.ExcludedChannels) != 0 { if len(params.ExcludedChannels) != 0 {
@@ -466,41 +466,41 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team
} }
if len(params.FromUsers) != 0 { if len(params.FromUsers) != 0 {
query = query.Where(sq.Eq{"FI.CreatorId": params.FromUsers}) query = query.Where(sq.Eq{"FileInfo.CreatorId": params.FromUsers})
} }
if len(params.ExcludedUsers) != 0 { if len(params.ExcludedUsers) != 0 {
query = query.Where(sq.NotEq{"FI.CreatorId": params.ExcludedUsers}) query = query.Where(sq.NotEq{"FileInfo.CreatorId": params.ExcludedUsers})
} }
// handle after: before: on: filters // handle after: before: on: filters
if params.OnDate != "" { if params.OnDate != "" {
onDateStart, onDateEnd := params.GetOnDateMillis() onDateStart, onDateEnd := params.GetOnDateMillis()
query = query.Where(sq.Expr("FI.CreateAt BETWEEN ? AND ?", strconv.FormatInt(onDateStart, 10), strconv.FormatInt(onDateEnd, 10))) query = query.Where(sq.Expr("FileInfo.CreateAt BETWEEN ? AND ?", strconv.FormatInt(onDateStart, 10), strconv.FormatInt(onDateEnd, 10)))
} else { } else {
if params.ExcludedDate != "" { if params.ExcludedDate != "" {
excludedDateStart, excludedDateEnd := params.GetExcludedDateMillis() excludedDateStart, excludedDateEnd := params.GetExcludedDateMillis()
query = query.Where(sq.Expr("FI.CreateAt NOT BETWEEN ? AND ?", strconv.FormatInt(excludedDateStart, 10), strconv.FormatInt(excludedDateEnd, 10))) query = query.Where(sq.Expr("FileInfo.CreateAt NOT BETWEEN ? AND ?", strconv.FormatInt(excludedDateStart, 10), strconv.FormatInt(excludedDateEnd, 10)))
} }
if params.AfterDate != "" { if params.AfterDate != "" {
afterDate := params.GetAfterDateMillis() afterDate := params.GetAfterDateMillis()
query = query.Where(sq.GtOrEq{"FI.CreateAt": strconv.FormatInt(afterDate, 10)}) query = query.Where(sq.GtOrEq{"FileInfo.CreateAt": strconv.FormatInt(afterDate, 10)})
} }
if params.BeforeDate != "" { if params.BeforeDate != "" {
beforeDate := params.GetBeforeDateMillis() beforeDate := params.GetBeforeDateMillis()
query = query.Where(sq.LtOrEq{"FI.CreateAt": strconv.FormatInt(beforeDate, 10)}) query = query.Where(sq.LtOrEq{"FileInfo.CreateAt": strconv.FormatInt(beforeDate, 10)})
} }
if params.ExcludedAfterDate != "" { if params.ExcludedAfterDate != "" {
afterDate := params.GetExcludedAfterDateMillis() afterDate := params.GetExcludedAfterDateMillis()
query = query.Where(sq.Lt{"FI.CreateAt": strconv.FormatInt(afterDate, 10)}) query = query.Where(sq.Lt{"FileInfo.CreateAt": strconv.FormatInt(afterDate, 10)})
} }
if params.ExcludedBeforeDate != "" { if params.ExcludedBeforeDate != "" {
beforeDate := params.GetExcludedBeforeDateMillis() beforeDate := params.GetExcludedBeforeDateMillis()
query = query.Where(sq.Gt{"FI.CreateAt": strconv.FormatInt(beforeDate, 10)}) query = query.Where(sq.Gt{"FileInfo.CreateAt": strconv.FormatInt(beforeDate, 10)})
} }
} }
@@ -535,9 +535,9 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team
} }
query = query.Where(sq.Or{ query = query.Where(sq.Or{
sq.Expr("to_tsvector('english', FI.Name) @@ to_tsquery('english', ?)", queryTerms), sq.Expr("to_tsvector('english', FileInfo.Name) @@ to_tsquery('english', ?)", queryTerms),
sq.Expr("to_tsvector('english', Translate(FI.Name, '.,-', ' ')) @@ to_tsquery('english', ?)", queryTerms), sq.Expr("to_tsvector('english', Translate(FileInfo.Name, '.,-', ' ')) @@ to_tsquery('english', ?)", queryTerms),
sq.Expr("to_tsvector('english', FI.Content) @@ to_tsquery('english', ?)", queryTerms), sq.Expr("to_tsvector('english', FileInfo.Content) @@ to_tsquery('english', ?)", queryTerms),
}) })
} else if fs.DriverName() == model.DATABASE_DRIVER_MYSQL { } else if fs.DriverName() == model.DATABASE_DRIVER_MYSQL {
var err error var err error
@@ -566,8 +566,8 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team
queryTerms = strings.Join(splitTerms, " ") + excludeClause queryTerms = strings.Join(splitTerms, " ") + excludeClause
} }
query = query.Where(sq.Or{ query = query.Where(sq.Or{
sq.Expr("MATCH (FI.Name) AGAINST (? IN BOOLEAN MODE)", queryTerms), sq.Expr("MATCH (FileInfo.Name) AGAINST (? IN BOOLEAN MODE)", queryTerms),
sq.Expr("MATCH (FI.Content) AGAINST (? IN BOOLEAN MODE)", queryTerms), sq.Expr("MATCH (FileInfo.Content) AGAINST (? IN BOOLEAN MODE)", queryTerms),
}) })
} }
} }
@@ -614,12 +614,12 @@ func (fs SqlFileInfoStore) CountAll() (int64, error) {
func (fs SqlFileInfoStore) GetFilesBatchForIndexing(startTime, endTime int64, limit int) ([]*model.FileForIndexing, error) { func (fs SqlFileInfoStore) GetFilesBatchForIndexing(startTime, endTime int64, limit int) ([]*model.FileForIndexing, error) {
var files []*model.FileForIndexing var files []*model.FileForIndexing
sql, args, _ := fs.getQueryBuilder(). sql, args, _ := fs.getQueryBuilder().
Select("fi.*, p.ChannelId"). Select(append(fs.queryFields, "p.ChannelId")...).
From("FileInfo as fi"). From("FileInfo").
LeftJoin("Posts AS p ON fi.PostId = p.Id"). LeftJoin("Posts AS p ON FileInfo.PostId = p.Id").
Where(sq.GtOrEq{"fi.CreateAt": startTime}). Where(sq.GtOrEq{"FileInfo.CreateAt": startTime}).
Where(sq.Lt{"fi.CreateAt": endTime}). Where(sq.Lt{"FileInfo.CreateAt": endTime}).
OrderBy("fi.CreateAt"). OrderBy("FileInfo.CreateAt").
Limit(uint64(limit)). Limit(uint64(limit)).
ToSql() ToSql()
_, err := fs.GetSearchReplica().Select(&files, sql, args...) _, err := fs.GetSearchReplica().Select(&files, sql, args...)