MM-30300: Add coalesce to get null content as empty string on FileInfo store (#16216)
* MM-30300: Add coalesce to get null content as empty string on FileInfo store * Making explicit the fields get from the FileInfo table * Addressing PR review comments
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
d2ec53f1e9
Коммит
b08b51d52d
@@ -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
|
||||
|
||||
Ссылка в новой задаче
Block a user