@@ -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