Skip to content

Commit b4e1461

Browse files
committed
feat(pacts for verification): optimise queries for determining which provider version tags are pending
1 parent 9b3162a commit b4e1461

File tree

3 files changed

+29
-6
lines changed

3 files changed

+29
-6
lines changed

lib/db.rb

+6
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,17 @@ module DB
2525
# pool, as noted in the documentation for the extension.
2626
#
2727
def self.connect db_credentials
28+
# Keep this conifiguration in sync with lib/pact_broker/app.rb#configure_database_connection
2829
Sequel.datetime_class = DateTime
2930
# logger = Logger.new($stdout)
3031
con = Sequel.connect(db_credentials.merge(:logger => logger, :pool_class => Sequel::ThreadedConnectionPool, :encoding => 'utf8'))
3132
con.extension(:connection_validator)
3233
con.extension(:pagination)
34+
con.extend_datasets do
35+
def any?
36+
!empty?
37+
end
38+
end
3339
con.pool.connection_validation_timeout = -1 #Check the connection on every request
3440
con.timezone = :utc
3541
con.run("SET sql_mode='STRICT_TRANS_TABLES';") if db_credentials[:adapter].to_s =~ /mysql/

lib/pact_broker/app.rb

+7
Original file line numberDiff line numberDiff line change
@@ -106,11 +106,18 @@ def load_configuration_from_database
106106
end
107107

108108
def configure_database_connection
109+
# Keep this configuration in sync with lib/db.rb
109110
PactBroker::DB.connection = configuration.database_connection
110111
PactBroker::DB.connection.timezone = :utc
111112
PactBroker::DB.validate_connection_config if configuration.validate_database_connection_config
112113
PactBroker::DB.set_mysql_strict_mode_if_mysql
113114
PactBroker::DB.connection.extension(:pagination)
115+
PactBroker::DB.extend_datasets do
116+
def any?
117+
!empty?
118+
end
119+
end
120+
114121
Sequel.datetime_class = DateTime
115122
Sequel.database_timezone = :utc # Store all dates in UTC, assume any date without a TZ is UTC
116123
Sequel.application_timezone = :local # Convert dates to localtime when retrieving from database

lib/pact_broker/pacts/pact_version.rb

+16-6
Original file line numberDiff line numberDiff line change
@@ -52,21 +52,31 @@ def latest_consumer_version_number
5252

5353
def select_provider_tags_with_successful_verifications(tags)
5454
tags.select do | tag |
55+
verifications_join = {
56+
Sequel[:verifications][:pact_version_id] => Sequel[:pact_versions][:id],
57+
Sequel[:verifications][:success] => true
58+
}
59+
tags_join = {
60+
Sequel[:tags][:version_id] => Sequel[:versions][:id],
61+
Sequel[:tags][:name] => tag
62+
}
5563
PactVersion.where(Sequel[:pact_versions][:id] => id)
56-
.join(:verifications, Sequel[:verifications][:pact_version_id] => Sequel[:pact_versions][:id])
64+
.join(:verifications, verifications_join)
5765
.join(:versions, Sequel[:versions][:id] => Sequel[:verifications][:provider_version_id])
58-
.join(:tags, Sequel[:tags][:version_id] => Sequel[:versions][:id])
59-
.where(Sequel[:tags][:name] => tag)
60-
.where(Sequel[:verifications][:success] => true)
66+
.join(:tags, tags_join)
6167
.any?
6268
end
6369
end
6470

6571
def verified_successfully_by_any_provider_version?
72+
verifications_join = {
73+
Sequel[:verifications][:pact_version_id] => Sequel[:pact_versions][:id],
74+
Sequel[:verifications][:pact_version_id] => id,
75+
Sequel[:verifications][:success] => true
76+
}
6677
PactVersion.where(Sequel[:pact_versions][:id] => id)
67-
.join(:verifications, Sequel[:verifications][:pact_version_id] => Sequel[:pact_versions][:id])
78+
.join(:verifications, verifications_join)
6879
.join(:versions, Sequel[:versions][:id] => Sequel[:verifications][:provider_version_id])
69-
.where(Sequel[:verifications][:success] => true)
7080
.any?
7181
end
7282

0 commit comments

Comments
 (0)