@@ -183,21 +183,17 @@ def build_result
183
183
private
184
184
185
185
def requirements_and_dependencies
186
- group_by_columns = "number, platform, sha256, info_checksum, required_ruby_version, required_rubygems_version, versions.created_at"
187
-
188
- dep_req_agg = "string_agg(dependencies.requirements, '@' ORDER BY dependencies.rubygem_name, dependencies.id) as dep_req_agg"
189
-
190
- dep_name_agg = "string_agg(dependencies.rubygem_name, ',' ORDER BY dependencies.rubygem_name) AS dep_name_agg"
191
-
192
- DB ::Rubygem . db [ <<~SQL . squish , @name ] .
193
- SELECT #{ group_by_columns } , #{ dep_req_agg } , #{ dep_name_agg }
194
- FROM rubygems
195
- LEFT JOIN versions ON versions.rubygem_id = rubygems.id
196
- LEFT JOIN dependencies ON dependencies.version_id = versions.id
197
- WHERE rubygems.name = ? AND versions.indexed = true
198
- GROUP BY #{ group_by_columns }
199
- ORDER BY versions.created_at, number, platform, dep_name_agg
200
- SQL
186
+ DB ::Rubygem . association_left_join ( versions : :dependencies ) .
187
+ where ( name : @name ) .
188
+ where { versions [ :indexed ] } .
189
+ order { [ versions [ :created_at ] , versions [ :number ] , versions [ :platform ] , dep_name_agg ] } .
190
+ select_group do
191
+ [ versions [ :number ] , versions [ :platform ] , versions [ :sha256 ] , versions [ :info_checksum ] , versions [ :required_ruby_version ] , versions [ :required_rubygems_version ] , versions [ :created_at ] ]
192
+ end . # rubocop:disable Style/MultilineBlockChain
193
+ select_more do
194
+ [ string_agg ( dependencies [ :requirements ] , "@" ) . order ( dependencies [ :rubygem_name ] , dependencies [ :id ] ) . as ( :dep_req_agg ) ,
195
+ string_agg ( dependencies [ :rubygem_name ] , "," ) . order ( dependencies [ :rubygem_name ] ) . as ( :dep_name_agg ) ]
196
+ end . # rubocop:disable Style/MultilineBlockChain
201
197
map do |row |
202
198
reqs = row [ :dep_req_agg ] &.split ( "@" )
203
199
dep_names = row [ :dep_name_agg ] &.split ( "," )
@@ -235,14 +231,9 @@ def fetch_resource
235
231
end
236
232
237
233
def build_result
238
- names = DB ::Rubygem . db [ <<~SQL . squish ] . map { |row | row [ :name ] }
239
- SELECT name
240
- FROM rubygems
241
- INNER JOIN versions ON versions.rubygem_id = rubygems.id
242
- WHERE versions.indexed = true
243
- GROUP BY name
244
- ORDER BY name
245
- SQL
234
+ names = DB ::Rubygem . association_join ( :versions ) .
235
+ where { versions [ :indexed ] } .
236
+ order ( :name ) . group ( :name ) . select_map ( :name )
246
237
@result = CompactIndex . names ( names ) . encode ( "UTF-8" )
247
238
end
248
239
0 commit comments