Monorepo for Tangled tangled.org

appview/db: improve repo-languages query

switch from corelated query to window function. practically, this gives
us a 10x speedup for this portion of the function. we can go further by
running each subquery for GetRepos concurrently, but the potential wins
here is in the order of ~2ms.

Signed-off-by: oppiliappan <me@oppi.li>

authored by oppi.li and committed by Tangled 8dca6c02 af39fa77

Changed files
+13 -14
appview
+13 -14
appview/db/repos.go
··· 131 131 132 132 languageQuery := fmt.Sprintf( 133 133 ` 134 - select 135 - repo_at, language 136 - from 137 - repo_languages r1 138 - where 139 - repo_at IN (%s) 134 + select repo_at, language 135 + from ( 136 + select 137 + repo_at, 138 + language, 139 + row_number() over ( 140 + partition by repo_at 141 + order by bytes desc 142 + ) as rn 143 + from repo_languages 144 + where repo_at in (%s) 140 145 and is_default_ref = 1 141 - and id = ( 142 - select id 143 - from repo_languages r2 144 - where r2.repo_at = r1.repo_at 145 - and r2.is_default_ref = 1 146 - order by bytes desc 147 - limit 1 148 - ); 146 + ) 147 + where rn = 1 149 148 `, 150 149 inClause, 151 150 )