Skip to content

Commit 35874a9

Browse files
committed
feat: ensure migrations in optimise_head_matrix work on mysql
1 parent 164d738 commit 35874a9

File tree

2 files changed

+38
-23
lines changed

2 files changed

+38
-23
lines changed

db/migrations/20180311_optimise_head_matrix.rb

+37-22
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,49 @@
22

33
Sequel.migration do
44
up do
5-
5+
pp = :pact_publications
66
# For each consumer_id/provider_id/tag_name, the version order of the latest version that has a pact
77
create_or_replace_view(:latest_tagged_pact_consumer_version_orders,
8-
"select pp.provider_id, cv.pacticipant_id as consumer_id, t.name as tag_name, max(\"order\") as latest_consumer_version_order
9-
from pact_publications pp
10-
inner join versions cv
11-
on pp.consumer_version_id = cv.id
12-
inner join tags t
13-
on t.version_id = pp.consumer_version_id
14-
group by pp.provider_id, cv.pacticipant_id, t.name"
8+
from(:pact_publications)
9+
.select_group(
10+
Sequel[pp][:provider_id],
11+
Sequel[:cv][:pacticipant_id].as(:consumer_id),
12+
Sequel[:t][:name].as(:tag_name))
13+
.select_append{ max(order).as(latest_consumer_version_order) }
14+
.join(:versions, { Sequel[pp][:consumer_version_id] => Sequel[:cv][:id] }, { table_alias: :cv} )
15+
.join(:tags, { Sequel[:t][:version_id] => Sequel[pp][:consumer_version_id] }, { table_alias: :t })
1516
)
1617

17-
# Add provider_version_order
18+
# Add provider_version_order to original definition
19+
v = :verifications
1820
create_or_replace_view(:latest_verifications,
19-
PactBroker::MigrationHelper.sqlite_safe("SELECT v.id, v.number, v.success, s.number as provider_version,
20-
v.build_url, v.pact_version_id, v.execution_date, v.created_at,
21-
v.provider_version_id, s.number as provider_version_number,
22-
s.order as provider_version_order
23-
FROM verifications v
24-
INNER JOIN latest_verification_numbers lv
25-
ON v.pact_version_id = lv.pact_version_id
26-
AND v.number = lv.latest_number
27-
INNER JOIN versions s on v.provider_version_id = s.id")
28-
)
21+
from(v)
22+
.select(
23+
Sequel[v][:id],
24+
Sequel[v][:number],
25+
Sequel[v][:success],
26+
Sequel[:s][:number].as(:provider_version),
27+
Sequel[v][:build_url],
28+
Sequel[v][:pact_version_id],
29+
Sequel[v][:execution_date],
30+
Sequel[v][:created_at],
31+
Sequel[v][:provider_version_id],
32+
Sequel[:s][:number].as(:provider_version_number),
33+
Sequel[:s][:order].as(:provider_version_order))
34+
.join(:latest_verification_numbers,
35+
{
36+
Sequel[v][:pact_version_id] => Sequel[:lv][:pact_version_id],
37+
Sequel[v][:number] => Sequel[:lv][:latest_number]
38+
}, { table_alias: :lv })
39+
.join(:versions,
40+
{
41+
Sequel[v][:provider_version_id] => Sequel[:s][:id]
42+
}, { table_alias: :s })
43+
)
2944

30-
create_or_replace_view(:head_matrix,
3145

32-
PactBroker::MigrationHelper.sqlite_safe("
46+
create_or_replace_view(:head_matrix,
47+
"
3348
select
3449
p.consumer_id, p.consumer_name, p.consumer_version_id, p.consumer_version_number, p.consumer_version_order,
3550
p.id as pact_publication_id, p.pact_version_id, p.pact_version_sha, p.revision_number as pact_revision_number,
@@ -59,7 +74,7 @@
5974
and lt.latest_consumer_version_order = p.consumer_version_order
6075
left outer join latest_verifications lv
6176
on p.pact_version_id = lv.pact_version_id
62-
")
77+
"
6378
)
6479
end
6580
end

db/migrations/migration_helper.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ def adapter
2323
end
2424

2525
def sqlite_safe string
26-
if adapter == 'sqlite' || adapter =~ /mysql/
26+
if adapter == 'sqlite'
2727
string.gsub(/(?:\b|")order(?:"|\b)/, '`order`')
2828
else
2929
string

0 commit comments

Comments
 (0)