Skip to content

Commit 4930ff6

Browse files
committed
Bypass string_agg on jruby until jdbc-sqlite3 supports it
1 parent 3f822e6 commit 4930ff6

File tree

2 files changed

+46
-1
lines changed

2 files changed

+46
-1
lines changed

lib/gemstash/compact_index_builder.rb

+45
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,8 @@ def build_result
181181
private
182182

183183
def requirements_and_dependencies
184+
return requirements_and_dependencies_without_string_agg if RUBY_PLATFORM == "java"
185+
184186
DB::Rubygem.association_left_join(versions: :dependencies).
185187
where(name: @name).
186188
where { versions[:indexed] }.
@@ -214,6 +216,49 @@ def requirements_and_dependencies
214216
end
215217
end
216218

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+
217262
def key
218263
:info
219264
end

lib/gemstash/db.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module DB
1111
Sequel::Model.raise_on_save_failure = true
1212
Sequel::Model.plugin :timestamps, update_on_create: true
1313
Sequel::Model.db.extension :error_sql
14-
Sequel::Model.db.extension :string_agg
14+
Sequel::Model.db.extension :string_agg if RUBY_PLATFORM != "java"
1515
Sequel::Model.db.extension :schema_dumper
1616
autoload :Authorization, "gemstash/db/authorization"
1717
autoload :CachedRubygem, "gemstash/db/cached_rubygem"

0 commit comments

Comments
 (0)