Skip to content

Commit 1889539

Browse files
committed
fix(address-apy): qualify chain_id in portfolio chainId filter
The weight CTE joins address-yield to daily-stat tables that both expose chain_id, so the chainId filter's bare 'chain_id = $2' was ambiguous. Qualify it per-context (ay.chain_id / oy.chain_id).
1 parent 4294200 commit 1889539

1 file changed

Lines changed: 7 additions & 5 deletions

File tree

src/server-extension/address-apy.ts

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,9 @@ export class AddressApyResolver {
127127
@Arg('chainId', () => Int, { nullable: true }) chainId?: number | null,
128128
): Promise<PortfolioApyResult> {
129129
const manager = await this.tx()
130-
const chainFilter = '($2::int IS NULL OR chain_id = $2)'
130+
// Qualify chain_id per context: the weight CTE joins two tables that both
131+
// have chain_id, so a bare reference would be ambiguous.
132+
const chainFilter = (col: string) => `($2::int IS NULL OR ${col} = $2)`
131133
const sql = `
132134
WITH native AS (
133135
-- per-product native all-time daily rate, over the days the position was held
@@ -136,13 +138,13 @@ export class AddressApyResolver {
136138
SELECT chain_id, arm AS product,
137139
sum("yield"::numeric) AS sum_yield, sum(value::numeric) AS sum_denom
138140
FROM arm_address_yield
139-
WHERE address = $1 AND value > 0 AND ${chainFilter}
141+
WHERE address = $1 AND value > 0 AND ${chainFilter('chain_id')}
140142
GROUP BY chain_id, arm
141143
UNION ALL
142144
SELECT chain_id, otoken,
143145
sum("yield"::numeric), sum(balance::numeric)
144146
FROM o_token_address_yield
145-
WHERE address = $1 AND balance > 0 AND ${chainFilter}
147+
WHERE address = $1 AND balance > 0 AND ${chainFilter('chain_id')}
146148
GROUP BY chain_id, otoken
147149
) s
148150
WHERE sum_denom > 0
@@ -159,7 +161,7 @@ export class AddressApyResolver {
159161
FROM arm_address_yield ay
160162
JOIN arm_daily_stat ads
161163
ON ads.chain_id = ay.chain_id AND ads.address = ay.arm AND ads.date = ay.date
162-
WHERE ay.address = $1 AND ${chainFilter}
164+
WHERE ay.address = $1 AND ${chainFilter('ay.chain_id')}
163165
ORDER BY ay.chain_id, ay.arm, ay.date DESC
164166
)
165167
UNION ALL
@@ -170,7 +172,7 @@ export class AddressApyResolver {
170172
FROM o_token_address_yield oy
171173
JOIN o_token_daily_stat ods
172174
ON ods.chain_id = oy.chain_id AND ods.otoken = oy.otoken AND ods.date = oy.date
173-
WHERE oy.address = $1 AND ${chainFilter}
175+
WHERE oy.address = $1 AND ${chainFilter('oy.chain_id')}
174176
ORDER BY oy.chain_id, oy.otoken, oy.date DESC
175177
)
176178
) w

0 commit comments

Comments
 (0)