* 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
|
||||
sms_index_single_session.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
|
||||
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
|
||||
|
|
|
|||
Loading…
Reference in New Issue