diff --git a/store/sqlstore/file_info_store.go b/store/sqlstore/file_info_store.go index 884a17f7b7..c2d1847fc4 100644 --- a/store/sqlstore/file_info_store.go +++ b/store/sqlstore/file_info_store.go @@ -17,7 +17,8 @@ import ( type SqlFileInfoStore struct { SqlStore - metrics einterfaces.MetricsInterface + metrics einterfaces.MetricsInterface + queryFields []string } func (fs SqlFileInfoStore) ClearCaches() { @@ -29,6 +30,27 @@ func newSqlFileInfoStore(sqlStore SqlStore, metrics einterfaces.MetricsInterface metrics: metrics, } + s.queryFields = []string{ + "FileInfo.Id", + "FileInfo.CreatorId", + "FileInfo.PostId", + "FileInfo.CreateAt", + "FileInfo.UpdateAt", + "FileInfo.DeleteAt", + "FileInfo.Path", + "FileInfo.ThumbnailPath", + "FileInfo.PreviewPath", + "FileInfo.Name", + "FileInfo.Extension", + "FileInfo.Size", + "FileInfo.MimeType", + "FileInfo.Width", + "FileInfo.Height", + "FileInfo.HasPreviewImage", + "FileInfo.MiniPreview", + "Coalesce(FileInfo.Content, '') AS Content", + } + for _, db := range sqlStore.GetAllConns() { table := db.AddTableWithName(model.FileInfo{}, "FileInfo").SetKeys(false, "Id") table.ColMap("Id").SetMaxSize(26) @@ -86,14 +108,18 @@ func (fs SqlFileInfoStore) Upsert(info *model.FileInfo) (*model.FileInfo, error) func (fs SqlFileInfoStore) Get(id string) (*model.FileInfo, error) { info := &model.FileInfo{} - if err := fs.GetReplica().SelectOne(info, - `SELECT - * - FROM - FileInfo - WHERE - Id = :Id - AND DeleteAt = 0`, map[string]interface{}{"Id": id}); err != nil { + query := fs.getQueryBuilder(). + Select(fs.queryFields...). + From("FileInfo"). + Where(sq.Eq{"Id": id}). + Where(sq.Eq{"DeleteAt": 0}) + + queryString, args, err := query.ToSql() + if err != nil { + return nil, errors.Wrap(err, "file_info_tosql") + } + + if err := fs.GetReplica().SelectOne(info, queryString, args...); err != nil { if err == sql.ErrNoRows { return nil, store.NewErrNotFound("FileInfo", id) } @@ -117,7 +143,7 @@ func (fs SqlFileInfoStore) GetWithOptions(page, perPage int, opt *model.GetFileI } query := fs.getQueryBuilder(). - Select("FileInfo.*"). + Select(fs.queryFields...). From("FileInfo") if len(opt.ChannelIds) > 0 { @@ -172,15 +198,19 @@ func (fs SqlFileInfoStore) GetWithOptions(page, perPage int, opt *model.GetFileI func (fs SqlFileInfoStore) GetByPath(path string) (*model.FileInfo, error) { info := &model.FileInfo{} - if err := fs.GetReplica().SelectOne(info, - `SELECT - * - FROM - FileInfo - WHERE - Path = :Path - AND DeleteAt = 0 - LIMIT 1`, map[string]interface{}{"Path": path}); err != nil { + query := fs.getQueryBuilder(). + Select(fs.queryFields...). + From("FileInfo"). + Where(sq.Eq{"Path": path}). + Where(sq.Eq{"DeleteAt": 0}). + Limit(1) + + queryString, args, err := query.ToSql() + if err != nil { + return nil, errors.Wrap(err, "file_info_tosql") + } + + if err := fs.GetReplica().SelectOne(info, queryString, args...); err != nil { if err == sql.ErrNoRows { return nil, store.NewErrNotFound("FileInfo", fmt.Sprintf("path=%s", path)) } @@ -203,7 +233,7 @@ func (fs SqlFileInfoStore) GetForPost(postId string, readFromMaster, includeDele } query := fs.getQueryBuilder(). - Select("*"). + Select(fs.queryFields...). From("FileInfo"). Where(sq.Eq{"PostId": postId}). OrderBy("CreateAt") @@ -228,16 +258,19 @@ func (fs SqlFileInfoStore) GetForUser(userId string) ([]*model.FileInfo, error) dbmap := fs.GetReplica() - if _, err := dbmap.Select(&infos, - `SELECT - * - FROM - FileInfo - WHERE - CreatorId = :CreatorId - AND DeleteAt = 0 - ORDER BY - CreateAt`, map[string]interface{}{"CreatorId": userId}); err != nil { + query := fs.getQueryBuilder(). + Select(fs.queryFields...). + From("FileInfo"). + Where(sq.Eq{"CreatorId": userId}). + Where(sq.Eq{"DeleteAt": 0}). + OrderBy("CreateAt") + + queryString, args, err := query.ToSql() + if err != nil { + return nil, errors.Wrap(err, "file_info_tosql") + } + + if _, err := dbmap.Select(&infos, queryString, args...); err != nil { return nil, errors.Wrapf(err, "failed to find FileInfos with creatorId=%s", userId) } return infos, nil