Skip to content

Commit 26324ea

Browse files
committed
chore: get rid of window functions in drep list query
1 parent ec47dac commit 26324ea

File tree

1 file changed

+35
-34
lines changed

1 file changed

+35
-34
lines changed

govtool/backend/sql/list-dreps.sql

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,7 @@
11
WITH DRepDistr AS (
2-
SELECT
3-
drep_distr.*,
4-
ROW_NUMBER() OVER (PARTITION BY drep_hash.id ORDER BY drep_distr.epoch_no DESC) AS rn
5-
FROM
6-
drep_distr
7-
JOIN drep_hash ON drep_hash.id = drep_distr.hash_id
2+
SELECT DISTINCT ON (drep_distr.hash_id) drep_distr.*
3+
FROM drep_distr
4+
ORDER BY drep_distr.hash_id, drep_distr.epoch_no DESC
85
),
96
DRepActivity AS (
107
SELECT
@@ -19,11 +16,12 @@ DRepActivity AS (
1916
LIMIT 1
2017
),
2118
LatestVotingProcedure AS (
22-
SELECT
23-
vp.*,
24-
ROW_NUMBER() OVER (PARTITION BY drep_voter ORDER BY tx_id DESC) AS rn
19+
SELECT DISTINCT ON (vp.drep_voter)
20+
vp.*
2521
FROM
2622
voting_procedure vp
23+
ORDER BY
24+
vp.drep_voter, vp.tx_id DESC
2725
),
2826
LatestVoteEpoch AS (
2927
SELECT
@@ -33,20 +31,19 @@ LatestVoteEpoch AS (
3331
LatestVotingProcedure lvp
3432
JOIN tx ON tx.id = lvp.tx_id
3533
JOIN block ON block.id = tx.block_id
36-
WHERE
37-
lvp.rn = 1
3834
),
3935
RankedDRepRegistration AS (
40-
SELECT
36+
SELECT DISTINCT ON (dr.drep_hash_id)
4137
dr.id,
4238
dr.drep_hash_id,
4339
dr.deposit,
4440
dr.voting_anchor_id,
45-
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn,
4641
encode(tx.hash, 'hex') AS tx_hash
47-
FROM
42+
FROM
4843
drep_registration dr
4944
JOIN tx ON tx.id = dr.tx_id
45+
ORDER BY
46+
dr.drep_hash_id, dr.tx_id DESC
5047
),
5148
FetchError AS (
5249
SELECT
@@ -132,29 +129,31 @@ DRepData AS (
132129
off_chain_vote_drep_data.image_hash
133130
FROM
134131
drep_hash dh
135-
JOIN RankedDRepRegistration ON RankedDRepRegistration.drep_hash_id = dh.id AND RankedDRepRegistration.rn = 1
132+
JOIN RankedDRepRegistration ON RankedDRepRegistration.drep_hash_id = dh.id
136133
JOIN (
137-
SELECT
134+
SELECT DISTINCT ON (dr.drep_hash_id)
138135
dr.id,
139136
dr.drep_hash_id,
140-
dr.deposit,
141-
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn
137+
dr.deposit
142138
FROM
143139
drep_registration dr
144140
WHERE
145141
dr.deposit IS NOT NULL
146-
) AS dr_deposit ON dr_deposit.drep_hash_id = dh.id AND dr_deposit.rn = 1
142+
ORDER BY
143+
dr.drep_hash_id, dr.tx_id DESC
144+
) AS dr_deposit ON dr_deposit.drep_hash_id = dh.id
147145
LEFT JOIN (
148-
SELECT
146+
SELECT DISTINCT ON (dr.drep_hash_id)
149147
dr.id,
150148
dr.drep_hash_id,
151-
dr.deposit,
152-
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn
149+
dr.deposit
153150
FROM
154151
drep_registration dr
155-
) AS latestDeposit ON latestDeposit.drep_hash_id = dh.id AND latestDeposit.rn = 1
152+
ORDER BY
153+
dr.drep_hash_id, dr.tx_id DESC
154+
) AS latestDeposit ON latestDeposit.drep_hash_id = dh.id
156155
LEFT JOIN LatestExistingVotingAnchor leva ON leva.drep_hash_id = dh.id
157-
LEFT JOIN DRepDistr ON DRepDistr.hash_id = dh.id AND DRepDistr.rn = 1
156+
LEFT JOIN DRepDistr ON DRepDistr.hash_id = dh.id
158157
LEFT JOIN FetchError fetch_error ON fetch_error.voting_anchor_id = leva.voting_anchor_id
159158
LEFT JOIN HasNonDeregisterVotingAnchor hndva ON hndva.drep_hash_id = dh.id
160159
LEFT JOIN off_chain_vote_data ocvd ON ocvd.voting_anchor_id = leva.voting_anchor_id
@@ -163,26 +162,28 @@ DRepData AS (
163162
LEFT JOIN tx voting_procedure_transaction ON voting_procedure_transaction.id = voting_procedure.tx_id
164163
LEFT JOIN block voting_procedure_block ON voting_procedure_block.id = voting_procedure_transaction.block_id
165164
LEFT JOIN (
166-
SELECT
165+
SELECT DISTINCT ON (dr.drep_hash_id)
167166
block.epoch_no,
168167
block.time,
169-
dr.drep_hash_id,
170-
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn
168+
dr.drep_hash_id
171169
FROM
172-
drep_registration dr
170+
drep_registration dr
173171
JOIN tx ON tx.id = dr.tx_id
174172
JOIN block ON block.id = tx.block_id
175173
WHERE
176174
COALESCE(dr.deposit, 0) >= 0
177-
) AS newestRegister ON newestRegister.drep_hash_id = dh.id AND newestRegister.rn = 1
178-
LEFT JOIN (
179-
SELECT
175+
ORDER BY
176+
dr.drep_hash_id, dr.tx_id DESC
177+
) AS newestRegister ON newestRegister.drep_hash_id = dh.id
178+
LEFT JOIN (
179+
SELECT DISTINCT ON (dr.drep_hash_id)
180180
dr.tx_id,
181-
dr.drep_hash_id,
182-
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id ASC) AS rn
181+
dr.drep_hash_id
183182
FROM
184183
drep_registration dr
185-
) AS dr_first_register ON dr_first_register.drep_hash_id = dh.id AND dr_first_register.rn = 1
184+
ORDER BY
185+
dr.drep_hash_id, dr.tx_id ASC
186+
) AS dr_first_register ON dr_first_register.drep_hash_id = dh.id
186187
LEFT JOIN tx AS tx_first_register ON tx_first_register.id = dr_first_register.tx_id
187188
LEFT JOIN block AS block_first_register ON block_first_register.id = tx_first_register.block_id
188189
LEFT JOIN LatestVoteEpoch lve ON lve.drep_id = dh.id

0 commit comments

Comments
 (0)