From c9cd840e58986b1d7f1bfe6e2ce51f6edfaf738b Mon Sep 17 00:00:00 2001 From: Kalle <38327916+Sendouc@users.noreply.github.com> Date: Sat, 14 Jan 2023 14:24:58 +0200 Subject: [PATCH] Persisted Plus Tier migration This is basically 100% perf optimization --- migrations/017-persisted-plus-tier.js | 67 +++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 migrations/017-persisted-plus-tier.js diff --git a/migrations/017-persisted-plus-tier.js b/migrations/017-persisted-plus-tier.js new file mode 100644 index 000000000..ba72652f4 --- /dev/null +++ b/migrations/017-persisted-plus-tier.js @@ -0,0 +1,67 @@ +module.exports.up = function (db) { + db.prepare(`drop view "PlusTier"`).run(); + + db.prepare( + /* sql */ ` + create view "FreshPlusTier" as + select + "votedId" as "userId", + min( + case + when "passedVoting" = 0 + and "wasSuggested" = 1 then null + when "passedVoting" = 1 then "tier" + when "passedVoting" = 0 + and "tier" != 3 then "tier" + 1 + end + ) as "tier" + from + "PlusVotingResult" + where + year = ( + select + "year" + from + "PlusVote" + where + "validAfter" < strftime('%s', 'now') + order by + "year" desc, + "month" desc + limit + 1 + ) + and "month" = ( + select + "month" + from + "PlusVote" + where + "validAfter" < strftime('%s', 'now') + order by + "year" desc, + "month" desc + limit + 1 + ) + group by + "votedId"; + ` + ).run(); + + db.prepare( + /* sql */ ` + create table "PlusTier" ( + "userId" integer primary key, + "tier" integer not null, + foreign key ("userId") references "User"("id") on delete set null + ) strict + ` + ).run(); + + db.prepare( + /* sql */ ` + insert into "PlusTier" ("userId", "tier") select "userId", "tier" from "FreshPlusTier" where "tier" is not null; + ` + ).run(); +};