services/horizon: Fix claimable balance query #5200
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
PR Checklist
PR Structure
otherwise).
services/friendbot
, orall
ordoc
if the changes are broad or impact manypackages.
Thoroughness
.md
files, etc... affected by this change). Take a look in the
docs
folder for a given service,like this one.
Release planning
needed with deprecations, added features, breaking changes, and DB schema changes.
semver, or if it's mainly a patch change. The PR is targeted at the next
release branch if it's not a patch change.
What
Explicitly qualify columns with table name/alias in claimable balance db query.
Query before the fix:
SELECT cb.id, cb.claimants, cb.asset, cb.amount, cb.sponsor, cb.last_modified_ledger, cb.flags FROM claimable_balances cb JOIN claimable_balance_claimants ON claimable_balance_claimants.id = cb.id WHERE
(last_modified_ledger, id) > ($1, $2)
AND claimable_balance_claimants.destination = $3 AND cb.asset = $4 ORDER BY last_modified_ledger ASC, id ASC LIMIT 200With the fix:
SELECT cb.id, cb.claimants, cb.asset, cb.amount, cb.sponsor, cb.last_modified_ledger, cb.flags FROM claimable_balances cb JOIN claimable_balance_claimants ON claimable_balance_claimants.id = cb.id WHERE
(cb.last_modified_ledger, cb.id) > ($1, $2)
AND claimable_balance_claimants.destination = $3 AND cb.asset = $4 ORDER BY last_modified_ledger ASC, id ASC LIMIT 200Why
Resolves Issue #5199
Issue #4907 introduced a join between claimable_balances and claimable_balance_claimants tables which resulted in unqualified columns in claimable balance query with cursor cursor causing database error
column reference 'last_modified_ledger' is ambiguous
.Known limitations