Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: get rid of window functions in drep list query #2999

Merged
merged 2 commits into from
Feb 14, 2025
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
69 changes: 35 additions & 34 deletions govtool/backend/sql/list-dreps.sql
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
WITH DRepDistr AS (
SELECT
drep_distr.*,
ROW_NUMBER() OVER (PARTITION BY drep_hash.id ORDER BY drep_distr.epoch_no DESC) AS rn
FROM
drep_distr
JOIN drep_hash ON drep_hash.id = drep_distr.hash_id
SELECT DISTINCT ON (drep_distr.hash_id) drep_distr.*
FROM drep_distr
ORDER BY drep_distr.hash_id, drep_distr.epoch_no DESC
),
DRepActivity AS (
SELECT
Expand All @@ -19,11 +16,12 @@ DRepActivity AS (
LIMIT 1
),
LatestVotingProcedure AS (
SELECT
vp.*,
ROW_NUMBER() OVER (PARTITION BY drep_voter ORDER BY tx_id DESC) AS rn
SELECT DISTINCT ON (vp.drep_voter)
vp.*
FROM
voting_procedure vp
ORDER BY
vp.drep_voter, vp.tx_id DESC
),
LatestVoteEpoch AS (
SELECT
Expand All @@ -33,20 +31,19 @@ LatestVoteEpoch AS (
LatestVotingProcedure lvp
JOIN tx ON tx.id = lvp.tx_id
JOIN block ON block.id = tx.block_id
WHERE
lvp.rn = 1
),
RankedDRepRegistration AS (
SELECT
SELECT DISTINCT ON (dr.drep_hash_id)
dr.id,
dr.drep_hash_id,
dr.deposit,
dr.voting_anchor_id,
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn,
encode(tx.hash, 'hex') AS tx_hash
FROM
FROM
drep_registration dr
JOIN tx ON tx.id = dr.tx_id
ORDER BY
dr.drep_hash_id, dr.tx_id DESC
),
FetchError AS (
SELECT
Expand Down Expand Up @@ -132,29 +129,31 @@ DRepData AS (
off_chain_vote_drep_data.image_hash
FROM
drep_hash dh
JOIN RankedDRepRegistration ON RankedDRepRegistration.drep_hash_id = dh.id AND RankedDRepRegistration.rn = 1
JOIN RankedDRepRegistration ON RankedDRepRegistration.drep_hash_id = dh.id
JOIN (
SELECT
SELECT DISTINCT ON (dr.drep_hash_id)
dr.id,
dr.drep_hash_id,
dr.deposit,
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn
dr.deposit
FROM
drep_registration dr
WHERE
dr.deposit IS NOT NULL
) AS dr_deposit ON dr_deposit.drep_hash_id = dh.id AND dr_deposit.rn = 1
ORDER BY
dr.drep_hash_id, dr.tx_id DESC
) AS dr_deposit ON dr_deposit.drep_hash_id = dh.id
LEFT JOIN (
SELECT
SELECT DISTINCT ON (dr.drep_hash_id)
dr.id,
dr.drep_hash_id,
dr.deposit,
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn
dr.deposit
FROM
drep_registration dr
) AS latestDeposit ON latestDeposit.drep_hash_id = dh.id AND latestDeposit.rn = 1
ORDER BY
dr.drep_hash_id, dr.tx_id DESC
) AS latestDeposit ON latestDeposit.drep_hash_id = dh.id
LEFT JOIN LatestExistingVotingAnchor leva ON leva.drep_hash_id = dh.id
LEFT JOIN DRepDistr ON DRepDistr.hash_id = dh.id AND DRepDistr.rn = 1
LEFT JOIN DRepDistr ON DRepDistr.hash_id = dh.id
LEFT JOIN FetchError fetch_error ON fetch_error.voting_anchor_id = leva.voting_anchor_id
LEFT JOIN HasNonDeregisterVotingAnchor hndva ON hndva.drep_hash_id = dh.id
LEFT JOIN off_chain_vote_data ocvd ON ocvd.voting_anchor_id = leva.voting_anchor_id
Expand All @@ -163,26 +162,28 @@ DRepData AS (
LEFT JOIN tx voting_procedure_transaction ON voting_procedure_transaction.id = voting_procedure.tx_id
LEFT JOIN block voting_procedure_block ON voting_procedure_block.id = voting_procedure_transaction.block_id
LEFT JOIN (
SELECT
SELECT DISTINCT ON (dr.drep_hash_id)
block.epoch_no,
block.time,
dr.drep_hash_id,
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id DESC) AS rn
dr.drep_hash_id
FROM
drep_registration dr
drep_registration dr
JOIN tx ON tx.id = dr.tx_id
JOIN block ON block.id = tx.block_id
WHERE
COALESCE(dr.deposit, 0) >= 0
) AS newestRegister ON newestRegister.drep_hash_id = dh.id AND newestRegister.rn = 1
LEFT JOIN (
SELECT
ORDER BY
dr.drep_hash_id, dr.tx_id DESC
) AS newestRegister ON newestRegister.drep_hash_id = dh.id
LEFT JOIN (
SELECT DISTINCT ON (dr.drep_hash_id)
dr.tx_id,
dr.drep_hash_id,
ROW_NUMBER() OVER (PARTITION BY dr.drep_hash_id ORDER BY dr.tx_id ASC) AS rn
dr.drep_hash_id
FROM
drep_registration dr
) AS dr_first_register ON dr_first_register.drep_hash_id = dh.id AND dr_first_register.rn = 1
ORDER BY
dr.drep_hash_id, dr.tx_id ASC
) AS dr_first_register ON dr_first_register.drep_hash_id = dh.id
LEFT JOIN tx AS tx_first_register ON tx_first_register.id = dr_first_register.tx_id
LEFT JOIN block AS block_first_register ON block_first_register.id = tx_first_register.block_id
LEFT JOIN LatestVoteEpoch lve ON lve.drep_id = dh.id
Expand Down
Loading