@@ -183,21 +183,30 @@ 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
+ # group_by_columns = "number, platform, sha256, info_checksum, required_ruby_version, required_rubygems_version, versions.created_at"
187
+
188
+ # dep_req_agg = Sequel::SQL::StringAgg.new("dependencies.requirements", "@").
189
+ # order("dependencies.rubygem_name", :id).
190
+ # as(:dep_req_agg)
191
+
192
+ # dep_name_agg = Sequel::SQL::StringAgg.new("dependencies.rubygem_name", ",").
193
+ # order("dependencies.rubygem_name").
194
+ # as(:dep_name_agg)
195
+
196
+ group_by_columns = %i[ number platform sha256 info_checksum required_ruby_version required_rubygems_version created_at ] .
197
+ map { |c | DB ::Version [ c ] }
198
+
199
+ DB ::Rubygem . association_left_join ( versions : :dependencies ) .
200
+ where ( name : @name ) .
201
+ where { versions [ :indexed ] } .
202
+ order { [ versions [ :created_at ] , versions [ :number ] , versions [ :platform ] , dep_name_agg ] } .
203
+ select_group do
204
+ [ versions [ :number ] , versions [ :platform ] , versions [ :sha256 ] , versions [ :info_checksum ] , versions [ :required_ruby_version ] , versions [ :required_rubygems_version ] , versions [ :created_at ] ]
205
+ end . # rubocop:disable Style/MultilineBlockChain
206
+ select_more do
207
+ [ string_agg ( dependencies [ :requirements ] , "@" ) . order ( dependencies [ :rubygem_name ] , dependencies [ :id ] ) . as ( :dep_req_agg ) ,
208
+ string_agg ( dependencies [ :rubygem_name ] , "," ) . order ( dependencies [ :rubygem_name ] ) . as ( :dep_name_agg ) ]
209
+ end . # rubocop:disable Style/MultilineBlockChain
201
210
map do |row |
202
211
reqs = row [ :dep_req_agg ] &.split ( "@" )
203
212
dep_names = row [ :dep_name_agg ] &.split ( "," )
@@ -235,14 +244,9 @@ def fetch_resource
235
244
end
236
245
237
246
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
247
+ names = DB ::Rubygem . association_join ( :versions ) .
248
+ where { versions [ :indexed ] } .
249
+ order ( :name ) . group ( :name ) . select_map ( :name )
246
250
@result = CompactIndex . names ( names ) . encode ( "UTF-8" )
247
251
end
248
252
0 commit comments