VRFS-1664 replace tmp tbl with subquery

This commit is contained in:
Jonathan Kolyer 2014-06-02 02:11:00 +00:00
parent 9c0afd6ccd
commit e35e318884
1 changed files with 14 additions and 24 deletions

View File

@ -9,7 +9,6 @@ module JamRuby
VAR_MUSICIAN_TABLE = "@MUSICIAN_TABLE"
TMP_NEW = 'tmp_new_musicians'
TMP_CAND = 'tmp_receiver_candidates'
TMP_PAIRS = 'tmp_receivers_new_musicians'
def self.subject
@ -32,37 +31,31 @@ SQL
ActiveRecord::Base.connection.execute(sql)
end
def _fetch_receiver_candidates
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_CAND}")
sql =<<SQL
SELECT
users.id AS receiver_candidate_id, users.last_jam_locidispid AS last_jam_locidispid
INTO TEMP TABLE #{TMP_CAND}
FROM users
FULL OUTER JOIN #{TMP_NEW} ON users.id = #{TMP_NEW}.new_user_id
WHERE
users.musician = 't' AND
users.subscribe_email = 't' AND
users.last_jam_locidispid IS NOT NULL AND
(#{TMP_NEW}.new_user_id IS NULL OR users.id IS NULL)
SQL
ActiveRecord::Base.connection.execute(sql)
end
def _fetch_eligible_receivers
ActiveRecord::Base.connection.execute("DROP TABLE IF EXISTS #{TMP_PAIRS}")
# load eligible recipients into tmp table
sql =<<SQL
SELECT
#{TMP_NEW}.new_user_id,
#{TMP_CAND}.receiver_candidate_id AS receiver_id,
receivers.id AS receiver_id,
scores.score AS latency
INTO TEMP TABLE #{TMP_PAIRS}
FROM scores
INNER JOIN #{TMP_CAND} ON #{TMP_CAND}.last_jam_locidispid = scores.alocidispid
INNER JOIN users AS receivers ON receivers.last_jam_locidispid = scores.alocidispid
INNER JOIN #{TMP_NEW} ON #{TMP_NEW}.last_jam_locidispid = scores.blocidispid
WHERE
scores.score < #{Score::MAX_YELLOW_LATENCY}
scores.score < #{Score::MAX_YELLOW_LATENCY} AND
receivers.id IN (
SELECT
rr.id
FROM users rr
FULL OUTER JOIN #{TMP_NEW} ON rr.id = #{TMP_NEW}.new_user_id
WHERE
rr.musician = 't' AND
rr.subscribe_email = 't' AND
rr.last_jam_locidispid IS NOT NULL AND
(#{TMP_NEW}.new_user_id IS NULL OR rr.id IS NULL)
)
SQL
ActiveRecord::Base.connection.execute(sql)
end
@ -72,9 +65,6 @@ SQL
# load new musicians into tmp table
self._fetch_new_musicians
# load receiver candidates into tmp table
self._fetch_receiver_candidates
# load email receivers into tmp table
self._fetch_eligible_receivers