Skip to content

Commit 2b7f8e2

Browse files
committed
feat(matrix badge): optimise database query
1 parent e109a8c commit 2b7f8e2

File tree

2 files changed

+18
-16
lines changed

2 files changed

+18
-16
lines changed

lib/pact_broker/domain/verification.rb

-6
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,6 @@ def untagged
5858
.left_outer_join(:tags, {version_id: :consumer_version_id})
5959
.where(Sequel.qualify(:tags, :name) => nil)
6060
end
61-
62-
def provider_version_tag tag_name
63-
filter = name_like(Sequel.qualify(:ptags, :name), tag_name)
64-
join_params = { Sequel[:ptags][:version_id] => Sequel[model.table_name][:provider_version_id] }
65-
join(:tags, join_params, {table_alias: :ptags}).where(filter)
66-
end
6761
end
6862

6963
def pact_version_sha

lib/pact_broker/verifications/repository.rb

+18-10
Original file line numberDiff line numberDiff line change
@@ -101,19 +101,27 @@ def find_latest_verification_for consumer_name, provider_name, consumer_version_
101101
end
102102

103103
def find_latest_verification_for_tags consumer_name, provider_name, consumer_version_tag, provider_version_tag
104-
view_name = PactBroker::Verifications::AllVerifications.table_name
105-
query = PactBroker::Verifications::AllVerifications
104+
view_name = PactBroker::Domain::Verification.table_name
105+
consumer = pacticipant_repository.find_by_name(consumer_name)
106+
provider = pacticipant_repository.find_by_name(provider_name)
107+
108+
consumer_tag_filter = PactBroker::Repositories::Helpers.name_like(Sequel.qualify(:consumer_tags, :name), consumer_version_tag)
109+
provider_tag_filter = PactBroker::Repositories::Helpers.name_like(Sequel.qualify(:provider_tags, :name), provider_version_tag)
110+
111+
query = PactBroker::Domain::Verification
106112
.select_all_qualified
107-
.join(:versions, {Sequel[:provider_versions][:id] => Sequel[view_name][:provider_version_id]}, {table_alias: :provider_versions})
108-
.join(:latest_pact_publications_by_consumer_versions, { Sequel[view_name][:pact_version_id] => Sequel[:latest_pact_publications_by_consumer_versions][:pact_version_id] })
109-
.consumer(consumer_name)
110-
.provider(provider_name)
111-
.tag(consumer_version_tag)
112-
.provider_version_tag(provider_version_tag)
113+
.join(:versions, { Sequel[:provider_versions][:id] => Sequel[view_name][:provider_version_id] }, { table_alias: :provider_versions })
114+
.join(:latest_verification_id_for_pact_version_and_provider_version, { Sequel[:lv][:verification_id] => Sequel[view_name][:id] }, { table_alias: :lv })
115+
.join(:latest_pact_publication_ids_for_consumer_versions, { Sequel[view_name][:pact_version_id] => Sequel[:lp][:pact_version_id] }, { table_alias: :lp })
116+
.join(:versions, { Sequel[:consumer_versions][:id] => Sequel[:lp][:consumer_version_id] }, { table_alias: :consumer_versions })
117+
.join(:tags, { Sequel[:consumer_tags][:version_id] => Sequel[:lp][:consumer_version_id]}, { table_alias: :consumer_tags })
118+
.join(:tags, { Sequel[:provider_tags][:version_id] => Sequel[view_name][:provider_version_id]}, { table_alias: :provider_tags })
119+
.where(consumer: consumer, provider: provider)
120+
.where(consumer_tag_filter)
121+
.where(provider_tag_filter)
113122

114123
query.reverse_order(
115-
Sequel[:latest_pact_publications_by_consumer_versions][:consumer_version_order],
116-
Sequel[:latest_pact_publications_by_consumer_versions][:revision_number],
124+
Sequel[:consumer_versions][:order],
117125
Sequel[:provider_versions][:order],
118126
Sequel[view_name][:execution_date]
119127
).limit(1).single_record

0 commit comments

Comments
 (0)