From 09a52aab3e4dd88e345cff6a34f1cc10b9ad078d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jes=C3=BAs=20Espino?= Date: Fri, 16 Apr 2021 09:38:48 +0200 Subject: [PATCH] Fix problem with nulls in file infos content field (#17404) --- store/sqlstore/file_info_store.go | 64 +++++++++++++++---------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/store/sqlstore/file_info_store.go b/store/sqlstore/file_info_store.go index 2f2adab979..f8b42b2dbf 100644 --- a/store/sqlstore/file_info_store.go +++ b/store/sqlstore/file_info_store.go @@ -101,12 +101,12 @@ func (fs SqlFileInfoStore) Save(info *model.FileInfo) (*model.FileInfo, error) { func (fs SqlFileInfoStore) GetByIds(ids []string) ([]*model.FileInfo, error) { query := fs.getQueryBuilder(). - Select("FI.*, P.ChannelId"). - From("FileInfo as FI"). - LeftJoin("Posts as P ON FI.PostId=P.Id"). - Where(sq.Eq{"FI.Id": ids}). - Where(sq.Eq{"FI.DeleteAt": 0}). - OrderBy("FI.CreateAt DESC") + Select(append(fs.queryFields, "P.ChannelId")...). + From("FileInfo"). + LeftJoin("Posts as P ON FileInfo.PostId=P.Id"). + Where(sq.Eq{"FileInfo.Id": ids}). + Where(sq.Eq{"FileInfo.DeleteAt": 0}). + OrderBy("FileInfo.CreateAt DESC") queryString, args, err := query.ToSql() if err != nil { @@ -428,14 +428,14 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team return nil, err } query := fs.getQueryBuilder(). - Select("FI.*, P.ChannelId as ChannelId"). - From("FileInfo AS FI"). - LeftJoin("Posts as P ON FI.PostId=P.Id"). + Select(append(fs.queryFields, "P.ChannelId as ChannelId")...). + From("FileInfo"). + LeftJoin("Posts as P ON FileInfo.PostId=P.Id"). LeftJoin("Channels as C ON C.Id=P.ChannelId"). LeftJoin("ChannelMembers as CM ON C.Id=CM.ChannelId"). Where(sq.Or{sq.Eq{"C.TeamId": teamId}, sq.Eq{"C.TeamId": ""}}). - Where(sq.Eq{"FI.DeleteAt": 0}). - OrderBy("FI.CreateAt DESC"). + Where(sq.Eq{"FileInfo.DeleteAt": 0}). + OrderBy("FileInfo.CreateAt DESC"). Limit(100) for _, params := range paramsList { @@ -454,11 +454,11 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team } 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 { - query = query.Where(sq.NotEq{"FI.Extension": params.ExcludedExtensions}) + query = query.Where(sq.NotEq{"FileInfo.Extension": params.ExcludedExtensions}) } if len(params.ExcludedChannels) != 0 { @@ -466,41 +466,41 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team } 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 { - query = query.Where(sq.NotEq{"FI.CreatorId": params.ExcludedUsers}) + query = query.Where(sq.NotEq{"FileInfo.CreatorId": params.ExcludedUsers}) } // handle after: before: on: filters if params.OnDate != "" { 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 { if params.ExcludedDate != "" { 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 != "" { 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 != "" { 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 != "" { 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 != "" { 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{ - sq.Expr("to_tsvector('english', FI.Name) @@ to_tsquery('english', ?)", queryTerms), - sq.Expr("to_tsvector('english', Translate(FI.Name, '.,-', ' ')) @@ to_tsquery('english', ?)", queryTerms), - sq.Expr("to_tsvector('english', FI.Content) @@ to_tsquery('english', ?)", queryTerms), + sq.Expr("to_tsvector('english', FileInfo.Name) @@ to_tsquery('english', ?)", queryTerms), + sq.Expr("to_tsvector('english', Translate(FileInfo.Name, '.,-', ' ')) @@ to_tsquery('english', ?)", queryTerms), + sq.Expr("to_tsvector('english', FileInfo.Content) @@ to_tsquery('english', ?)", queryTerms), }) } else if fs.DriverName() == model.DATABASE_DRIVER_MYSQL { var err error @@ -566,8 +566,8 @@ func (fs SqlFileInfoStore) Search(paramsList []*model.SearchParams, userId, team queryTerms = strings.Join(splitTerms, " ") + excludeClause } query = query.Where(sq.Or{ - sq.Expr("MATCH (FI.Name) AGAINST (? IN BOOLEAN MODE)", queryTerms), - sq.Expr("MATCH (FI.Content) AGAINST (? IN BOOLEAN MODE)", queryTerms), + sq.Expr("MATCH (FileInfo.Name) 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) { var files []*model.FileForIndexing sql, args, _ := fs.getQueryBuilder(). - Select("fi.*, p.ChannelId"). - From("FileInfo as fi"). - LeftJoin("Posts AS p ON fi.PostId = p.Id"). - Where(sq.GtOrEq{"fi.CreateAt": startTime}). - Where(sq.Lt{"fi.CreateAt": endTime}). - OrderBy("fi.CreateAt"). + Select(append(fs.queryFields, "p.ChannelId")...). + From("FileInfo"). + LeftJoin("Posts AS p ON FileInfo.PostId = p.Id"). + Where(sq.GtOrEq{"FileInfo.CreateAt": startTime}). + Where(sq.Lt{"FileInfo.CreateAt": endTime}). + OrderBy("FileInfo.CreateAt"). Limit(uint64(limit)). ToSql() _, err := fs.GetSearchReplica().Select(&files, sql, args...)