@@ -181,6 +181,8 @@ def build_result
181
181
private
182
182
183
183
def requirements_and_dependencies
184
+ return requirements_and_dependencies_without_string_agg if RUBY_PLATFORM == "java"
185
+
184
186
DB ::Rubygem . association_left_join ( versions : :dependencies ) .
185
187
where ( name : @name ) .
186
188
where { versions [ :indexed ] } .
@@ -214,6 +216,49 @@ def requirements_and_dependencies
214
216
end
215
217
end
216
218
219
+ def requirements_and_dependencies_without_string_agg
220
+ results = DB ::Rubygem .
221
+ association_left_join ( :versions ) .
222
+ where ( name : @name ) .
223
+ where { versions [ :indexed ] } .
224
+ order { [ versions [ :created_at ] , versions [ :number ] , versions [ :platform ] ] } .
225
+ select do
226
+ [
227
+ versions [ :id ] . as ( :version_id ) ,
228
+ versions [ :number ] ,
229
+ versions [ :platform ] ,
230
+ versions [ :sha256 ] ,
231
+ versions [ :info_checksum ] ,
232
+ versions [ :required_ruby_version ] ,
233
+ versions [ :required_rubygems_version ] ,
234
+ versions [ :created_at ]
235
+ ]
236
+ end
237
+
238
+ version_ids = results . map { |v | v [ :version_id ] }
239
+
240
+ deps = DB ::Dependency .
241
+ where ( version_id : version_ids ) .
242
+ select ( :version_id , :rubygem_name , :requirements ) .
243
+ order ( :version_id , :rubygem_name ) .
244
+ each_with_object ( { } ) do |dep , agg |
245
+ agg [ dep . version_id ] ||= [ ]
246
+ agg [ dep . version_id ] << CompactIndex ::Dependency . new ( dep . rubygem_name , dep . requirements )
247
+ end
248
+
249
+ results . map do |row |
250
+ CompactIndex ::GemVersion . new (
251
+ row [ :number ] ,
252
+ row [ :platform ] ,
253
+ row [ :sha256 ] ,
254
+ nil , # info_checksum
255
+ deps [ row [ :version_id ] ] || [ ] ,
256
+ row [ :required_ruby_version ] ,
257
+ row [ :required_rubygems_version ]
258
+ )
259
+ end
260
+ end
261
+
217
262
def key
218
263
:info
219
264
end
0 commit comments