Skip to content

Commit

Permalink
Bypass string_agg on jruby until jdbc-sqlite3 supports it
Browse files Browse the repository at this point in the history
  • Loading branch information
martinemde committed Feb 25, 2025
1 parent 10aeb06 commit 5d38d90
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
36 changes: 36 additions & 0 deletions lib/gemstash/compact_index_builder.rb
Original file line number Diff line number Diff line change
Expand Up @@ -181,6 +181,8 @@ def build_result
private

def requirements_and_dependencies
return requirements_and_dependencies_without_string_agg if RUBY_PLATFORM == "java"

DB::Rubygem.association_left_join(versions: :dependencies).
where(name: @name).
where { versions[:indexed] }.
Expand Down Expand Up @@ -214,6 +216,40 @@ def requirements_and_dependencies
end
end

def requirements_and_dependencies_without_string_agg
results = DB::Rubygem.
association_left_join(:versions).
where(name: @name).
where { versions[:indexed] }.
order { [versions[:created_at], versions[:number], versions[:platform]] }.
select do
[versions[:id].as(:version_id), versions[:number], versions[:platform], versions[:sha256], versions[:info_checksum], versions[:required_ruby_version], versions[:required_rubygems_version], versions[:created_at]]
end

version_ids = results.map {|v| v[:version_id] }

# Without string_agg this is less efficient. Waiting for jdbc-sqlite3 to support string_agg
deps = DB::Dependency.
where(version_id: version_ids).
select(:version_id, :rubygem_name, :requirements).
each_with_object({}) do |dep, agg|
agg[dep.version_id] ||= []
agg[dep.version_id] << CompactIndex::Dependency.new(dep.rubygem_name, dep.requirements)
end

results.map do |row|
CompactIndex::GemVersion.new(
row[:number],
row[:platform],
row[:sha256],
nil, # info_checksum
deps[row[:version_id]] || [],
row[:required_ruby_version],
row[:required_rubygems_version]
)
end
end

def key
:info
end
Expand Down
2 changes: 1 addition & 1 deletion lib/gemstash/db.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ module DB
Sequel::Model.raise_on_save_failure = true
Sequel::Model.plugin :timestamps, update_on_create: true
Sequel::Model.db.extension :error_sql
Sequel::Model.db.extension :string_agg
Sequel::Model.db.extension :string_agg if RUBY_PLATFORM != "java"
Sequel::Model.db.extension :schema_dumper
autoload :Authorization, "gemstash/db/authorization"
autoload :CachedRubygem, "gemstash/db/cached_rubygem"
Expand Down

0 comments on commit 5d38d90

Please sign in to comment.