diff --git a/store/mysql/memo.go b/store/mysql/memo.go index b898db0f..06df3cb5 100644 --- a/store/mysql/memo.go +++ b/store/mysql/memo.go @@ -102,13 +102,11 @@ func (d *Driver) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store. GROUP_CONCAT(resource.id) AS resource_id_list, ( SELECT - GROUP_CONCAT(related_memo_id,':',type) + GROUP_CONCAT(memo_id,':',related_memo_id,':',type) FROM memo_relation WHERE - memo_relation.memo_id = memo.id - GROUP BY - memo_relation.memo_id + memo_relation.memo_id = memo.id OR memo_relation.related_memo_id = memo.id ) AS relation_list FROM memo @@ -169,21 +167,25 @@ func (d *Driver) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store. relatedMemoTypeList := strings.Split(memoRelationList.String, ",") for _, relatedMemoType := range relatedMemoTypeList { relatedMemoTypeList := strings.Split(relatedMemoType, ":") - if len(relatedMemoTypeList) != 2 { + if len(relatedMemoTypeList) != 3 { return nil, errors.Errorf("invalid relation format") } - relatedMemoID, err := util.ConvertStringToInt32(relatedMemoTypeList[0]) + memoID, err := util.ConvertStringToInt32(relatedMemoTypeList[0]) if err != nil { return nil, err } - relationType := store.MemoRelationType(relatedMemoTypeList[1]) + relatedMemoID, err := util.ConvertStringToInt32(relatedMemoTypeList[1]) + if err != nil { + return nil, err + } + relationType := store.MemoRelationType(relatedMemoTypeList[2]) memo.RelationList = append(memo.RelationList, &store.MemoRelation{ - MemoID: memo.ID, + MemoID: memoID, RelatedMemoID: relatedMemoID, Type: relationType, }) // Set the first parent ID if relation type is comment. - if memo.ParentID == nil && relationType == store.MemoRelationComment { + if memo.ParentID == nil && memoID == memo.ID && relationType == store.MemoRelationComment { memo.ParentID = &relatedMemoID } } diff --git a/store/sqlite/memo.go b/store/sqlite/memo.go index 6a0cd673..788d8b93 100644 --- a/store/sqlite/memo.go +++ b/store/sqlite/memo.go @@ -102,13 +102,11 @@ func (d *Driver) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store. GROUP_CONCAT(resource.id) AS resource_id_list, ( SELECT - GROUP_CONCAT(related_memo_id || ':' || type) + GROUP_CONCAT(memo_id || ':' || related_memo_id || ':' || type) FROM memo_relation WHERE - memo_relation.memo_id = memo.id - GROUP BY - memo_relation.memo_id + memo_relation.memo_id = memo.id OR memo_relation.related_memo_id = memo.id ) AS relation_list FROM memo @@ -169,21 +167,25 @@ func (d *Driver) ListMemos(ctx context.Context, find *store.FindMemo) ([]*store. relatedMemoTypeList := strings.Split(memoRelationList.String, ",") for _, relatedMemoType := range relatedMemoTypeList { relatedMemoTypeList := strings.Split(relatedMemoType, ":") - if len(relatedMemoTypeList) != 2 { + if len(relatedMemoTypeList) != 3 { return nil, errors.New("invalid relation format") } - relatedMemoID, err := util.ConvertStringToInt32(relatedMemoTypeList[0]) + memoID, err := util.ConvertStringToInt32(relatedMemoTypeList[0]) if err != nil { return nil, err } - relationType := store.MemoRelationType(relatedMemoTypeList[1]) + relatedMemoID, err := util.ConvertStringToInt32(relatedMemoTypeList[1]) + if err != nil { + return nil, err + } + relationType := store.MemoRelationType(relatedMemoTypeList[2]) memo.RelationList = append(memo.RelationList, &store.MemoRelation{ - MemoID: memo.ID, + MemoID: memoID, RelatedMemoID: relatedMemoID, Type: relationType, }) // Set the first parent ID if relation type is comment. - if memo.ParentID == nil && relationType == store.MemoRelationComment { + if memo.ParentID == nil && memoID == memo.ID && relationType == store.MemoRelationComment { memo.ParentID = &relatedMemoID } }