aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNathan Perry <avaglir@gmail.com>2019-03-30 10:42:29 -0400
committerNathan Perry <avaglir@gmail.com>2019-03-30 10:44:35 -0400
commit2b05cde092d0bfde28739f2f8e1ee0ab4deae181 (patch)
treeb74b93c112f07146a36c6cd0fc9d3fc5ec31272f
parent419af1fa7fa6fe78eda1c9653f9438da36a9853d (diff)
further clean up rare meme query
-rw-r--r--src/db/mod.rs29
1 files changed, 17 insertions, 12 deletions
diff --git a/src/db/mod.rs b/src/db/mod.rs
index 5abf634..a331ead 100644
--- a/src/db/mod.rs
+++ b/src/db/mod.rs
@@ -126,20 +126,31 @@ pub fn rare_meme(conn: &PgConnection, audio: bool) -> Result<Meme> {
let rows = raw_conn.query(r#"
WITH
meme_count AS (
- SELECT meme_id, COUNT(*) AS ct FROM invocation_records GROUP BY meme_id
+ SELECT
+ meme_id,
+ COUNT(*) AS ct
+ FROM invocation_records
+ GROUP BY meme_id
),
aggregate AS (
- SELECT memes.id AS meme_id, COALESCE(meme_count.ct, 0) AS ct, EXTRACT(EPOCH FROM (now() - metadata.created)) AS time_diff
+ SELECT
+ memes.id AS meme_id,
+ COALESCE(meme_count.ct, 0) AS ct,
+ EXTRACT(EPOCH FROM (now() - metadata.created)) AS time_diff
FROM meme_count
- RIGHT JOIN memes ON memes.id = meme_count.meme_id
- INNER JOIN metadata ON metadata.id = memes.metadata_id
+ RIGHT JOIN memes ON memes.id = meme_count.meme_id
+ INNER JOIN metadata ON metadata.id = memes.metadata_id
WHERE (memes.audio_id IS NULL) = $1 OR $2
),
least_used AS (
- SELECT meme_id, TRUNC(time_diff / (ct + 1)) as play_prop
+ SELECT
+ meme_id,
+ TRUNC(time_diff / (ct + 1)) as play_prop
FROM aggregate
)
- SELECT meme_id, sum(play_prop) OVER (ORDER BY play_prop DESC) as play_prop
+ SELECT
+ meme_id,
+ sum(play_prop) OVER (ORDER BY play_prop DESC) as play_prop
FROM least_used
LIMIT 100;
"#, &[&!audio, &audio])?;
@@ -152,12 +163,6 @@ pub fn rare_meme(conn: &PgConnection, audio: bool) -> Result<Meme> {
return Err(err_msg("no rare memes found"));
}
- let total_probability_mass: i64 = elems.iter().map(|(_, prob)| prob).sum();
-
- if total_probability_mass == 0 {
- return Err(err_msg("rare meme probability mass was 0"))
- }
-
let mut rng = thread_rng();
let target_prob = rng.gen_range(0, elems.last().unwrap().1);