* VRFS-1981 - delete old scores
This commit is contained in:
parent
cf061aa055
commit
f0304f2ca3
|
|
@ -204,4 +204,5 @@ define_environment_in_db.sql
|
||||||
drop_session_invite_constraint.sql
|
drop_session_invite_constraint.sql
|
||||||
sms_index_single_session.sql
|
sms_index_single_session.sql
|
||||||
fix_current_scores_user_association.sql
|
fix_current_scores_user_association.sql
|
||||||
undirected_scores.sql
|
undirected_scores.sql
|
||||||
|
discard_scores.sql
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
-- get rid of excessive scores
|
||||||
|
--SELECT score_history_last_imported_at FROM generic_state LIMIT 1;
|
||||||
|
|
||||||
|
DROP FUNCTION IF EXISTS discard_scores();
|
||||||
|
CREATE FUNCTION discard_scores () RETURNS VOID AS $$
|
||||||
|
BEGIN
|
||||||
|
WITH scores_to_delete AS (
|
||||||
|
SELECT alocidispid, blocidispid, scorer, created_at FROM (SELECT *, row_number() OVER (PARTITION BY alocidispid, blocidispid, scorer ORDER BY scores.created_at DESC) AS rownum FROM scores) tmp WHERE rownum >= 6
|
||||||
|
)
|
||||||
|
DELETE FROM scores USING scores_to_delete WHERE
|
||||||
|
scores.alocidispid = scores_to_delete.alocidispid AND
|
||||||
|
scores.blocidispid = scores_to_delete.blocidispid AND
|
||||||
|
scores.scorer = scores_to_delete.scorer AND
|
||||||
|
scores.created_at = scores_to_delete.created_at;
|
||||||
|
RETURN;
|
||||||
|
END;
|
||||||
|
$$ LANGUAGE plpgsql;
|
||||||
|
|
@ -344,4 +344,56 @@ describe Score do
|
||||||
result[7]['full_score'].to_i.should == user2.last_jam_audio_latency + user1.last_jam_audio_latency + 22
|
result[7]['full_score'].to_i.should == user2.last_jam_audio_latency + user1.last_jam_audio_latency + 22
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "discard_scores" do
|
||||||
|
|
||||||
|
it "works" do
|
||||||
|
Score.createx(1234, 'anodeid', 0x01020304, 2345, 'bnodeid', 0x02030405, 20, nil, 'foo')
|
||||||
|
Score.count.should == 2
|
||||||
|
Score.connection.execute("SELECT discard_scores()").check
|
||||||
|
Score.count.should == 2
|
||||||
|
end
|
||||||
|
|
||||||
|
it "discards over 5 items" do
|
||||||
|
Score.createx(1234, 'anodeid', 0x01020304, 2345, 'bnodeid', 0x02030405, 20, nil, 'foo')
|
||||||
|
Score.createx(1234, 'anodeid', 0x01020304, 2345, 'bnodeid', 0x02030405, 20, nil, 'foo')
|
||||||
|
Score.createx(1234, 'anodeid', 0x01020304, 2345, 'bnodeid', 0x02030405, 20, nil, 'foo')
|
||||||
|
Score.createx(1234, 'anodeid', 0x01020304, 2345, 'bnodeid', 0x02030405, 20, nil, 'foo')
|
||||||
|
Score.createx(1234, 'anodeid', 0x01020304, 2345, 'bnodeid', 0x02030405, 20, nil, 'foo')
|
||||||
|
|
||||||
|
Score.count.should == 10
|
||||||
|
Score.connection.execute("SELECT discard_scores()").check
|
||||||
|
Score.count.should == 10
|
||||||
|
|
||||||
|
Score.createx(1234, 'anodeid', 0x01020304, 2345, 'bnodeid', 0x02030405, 26, nil, 'foo')
|
||||||
|
Score.connection.execute("UPDATE scores set created_at = TIMESTAMP '#{2.days.ago}' WHERE score = 26").cmdtuples.should == 2
|
||||||
|
Score.connection.execute("SELECT discard_scores()").check
|
||||||
|
Score.count.should == 10
|
||||||
|
Score.connection.execute("SELECT * FROM scores WHERE score = 20").ntuples.should == 10
|
||||||
|
Score.connection.execute("SELECT * FROM scores WHERE scorer = 0").ntuples.should == 5
|
||||||
|
Score.connection.execute("SELECT * FROM scores WHERE scorer = 1").ntuples.should == 5
|
||||||
|
|
||||||
|
|
||||||
|
Score.createx(2345, 'bnodeid', 0x02030405, 1234, 'anodeid', 0x01020304, 22, nil, 'foo')
|
||||||
|
Score.createx(2345, 'bnodeid', 0x02030405, 1234, 'anodeid', 0x01020304, 22, nil, 'foo')
|
||||||
|
Score.createx(2345, 'bnodeid', 0x02030405, 1234, 'anodeid', 0x01020304, 22, nil, 'foo')
|
||||||
|
Score.createx(2345, 'bnodeid', 0x02030405, 1234, 'anodeid', 0x01020304, 22, nil, 'foo')
|
||||||
|
Score.createx(2345, 'bnodeid', 0x02030405, 1234, 'anodeid', 0x01020304, 22, nil, 'foo')
|
||||||
|
|
||||||
|
Score.count.should == 20
|
||||||
|
Score.connection.execute("SELECT discard_scores()").check
|
||||||
|
Score.count.should == 20
|
||||||
|
|
||||||
|
Score.createx(2345, 'bnodeid', 0x02030405, 1234, 'anodeid', 0x01020304, 36, nil, 'foo')
|
||||||
|
Score.connection.execute("UPDATE scores set created_at = TIMESTAMP '#{2.days.ago}' WHERE score = 36").cmdtuples.should == 2
|
||||||
|
Score.connection.execute("SELECT discard_scores()").check
|
||||||
|
Score.count.should == 20
|
||||||
|
Score.connection.execute("SELECT * FROM scores WHERE score = 22").ntuples.should == 10
|
||||||
|
Score.connection.execute("SELECT * FROM scores WHERE score = 22 AND scorer = 0").ntuples.should == 5
|
||||||
|
Score.connection.execute("SELECT * FROM scores WHERE score = 22 AND scorer = 1").ntuples.should == 5
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
end
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue