Refactor reply-chain SQL to use CTEs and fix a bug where they were chaining to the wrong parent tweets
This commit is contained in:
parent
9d3eacc256
commit
3c3fd55991
@ -246,15 +246,29 @@ func (p Profile) GetTweetDetail(id TweetID) (TweetDetailView, error) {
|
|||||||
ret.ReplyChains = append(ret.ReplyChains, []TweetID{r.ID})
|
ret.ReplyChains = append(ret.ReplyChains, []TweetID{r.ID})
|
||||||
}
|
}
|
||||||
reply2_query := `
|
reply2_query := `
|
||||||
select id, user_id, text, posted_at, num_likes, num_retweets, num_replies, num_quote_tweets, in_reply_to_id, quoted_tweet_id,
|
with parent_ids(id) as (values ` + strings.Repeat("(?), ", len(reply_1_ids)-1) + `(?)),
|
||||||
mentions, reply_mentions, hashtags, ifnull(space_id, '') space_id, ifnull(tombstone_types.short_name, "") tombstone_type,
|
all_reply_ids(id, parent_id, num_likes) as (
|
||||||
is_expandable,
|
select tweets.id, tweets.in_reply_to_id, num_likes
|
||||||
is_stub, is_content_downloaded, is_conversation_scraped, last_scraped_at
|
from parent_ids
|
||||||
from tweets
|
left join tweets on tweets.in_reply_to_id = parent_ids.id
|
||||||
left join tombstone_types on tweets.tombstone_type = tombstone_types.rowid
|
),
|
||||||
where in_reply_to_id in (` + strings.Repeat("?,", len(reply_1_ids)-1) + `?)
|
top_ids_by_parent(id, parent_id) as (
|
||||||
order by num_likes desc
|
select id, parent_id outer_parent_id
|
||||||
limit 50`
|
from all_reply_ids
|
||||||
|
where id = (
|
||||||
|
select id from all_reply_ids
|
||||||
|
where parent_id = outer_parent_id
|
||||||
|
order by num_likes desc limit 1
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
select tweets.id id, user_id, text, posted_at, num_likes, num_retweets, num_replies, num_quote_tweets, in_reply_to_id,
|
||||||
|
quoted_tweet_id, mentions, reply_mentions, hashtags, ifnull(space_id, '') space_id,
|
||||||
|
ifnull(tombstone_types.short_name, "") tombstone_type, is_expandable,
|
||||||
|
is_stub, is_content_downloaded, is_conversation_scraped, last_scraped_at
|
||||||
|
from top_ids_by_parent
|
||||||
|
left join tweets on tweets.id = top_ids_by_parent.id
|
||||||
|
left join tombstone_types on tweets.tombstone_type = tombstone_types.rowid`
|
||||||
err = p.DB.Select(&replies, reply2_query, reply_1_ids...)
|
err = p.DB.Select(&replies, reply2_query, reply_1_ids...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
@ -262,7 +276,7 @@ func (p Profile) GetTweetDetail(id TweetID) (TweetDetailView, error) {
|
|||||||
for _, r := range replies {
|
for _, r := range replies {
|
||||||
ret.Tweets[r.ID] = r
|
ret.Tweets[r.ID] = r
|
||||||
for i, chain := range ret.ReplyChains {
|
for i, chain := range ret.ReplyChains {
|
||||||
if chain[0] == r.InReplyToID {
|
if len(chain) == 1 && chain[0] == r.InReplyToID {
|
||||||
ret.ReplyChains[i] = append(chain, r.ID)
|
ret.ReplyChains[i] = append(chain, r.ID)
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user