lhm-shopify 4.1.0 → 4.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/test.yml +5 -0
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +2 -2
- data/gemfiles/activerecord_6.1.gemfile.lock +2 -2
- data/gemfiles/activerecord_7.0.gemfile.lock +2 -2
- data/gemfiles/activerecord_7.1.gemfile.lock +2 -2
- data/lib/lhm/chunker.rb +6 -5
- data/lib/lhm/migrator.rb +5 -1
- data/lib/lhm/version.rb +1 -1
- data/spec/integration/chunker_spec.rb +2 -3
- data/spec/unit/migrator_spec.rb +16 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1a16e83f2a989c0624948b4ef8bfe2c3b7359aa1420ee5d2c41dee1b9ec6e29
|
4
|
+
data.tar.gz: 9baa1e49780b70edd51caec39460a3ad440f2d7f10f65aa8295da541a762cd42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0d96f3ba67d232682ecb5fa27f9f7cb33f850125546364a41ede17c6dda187e00d8b91e6ab8a5189022e9fd3117af4e9bb6272c1392d0d8510252cea6ae9ac00
|
7
|
+
data.tar.gz: 407a0497d1ce019d3f7e835ceb157441a1cd76f5723a7a7d3a61d95c2232adb42ac56b6aba9b07d5720eeeab0e6ce6a68d50d297dbd9736fd4e641835d372a86
|
data/.github/workflows/test.yml
CHANGED
@@ -18,6 +18,11 @@ jobs:
|
|
18
18
|
ruby: ["3.0", "3.1", "3.2", "head"]
|
19
19
|
mysql: ["5.7", "8.0"]
|
20
20
|
adapter: ["mysql2", "trilogy"]
|
21
|
+
exclude:
|
22
|
+
- activerecord: 6.1
|
23
|
+
ruby: head
|
24
|
+
- activerecord: 7.0
|
25
|
+
ruby: head
|
21
26
|
|
22
27
|
env:
|
23
28
|
BUNDLE_GEMFILE: "${{ github.workspace }}/gemfiles/activerecord_${{ matrix.activerecord }}.gemfile"
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Unreleased
|
2
2
|
|
3
|
+
# 4.2.0 (Mar, 2024)
|
4
|
+
* Support `DROP DEFAULT` & `SET DEFAULT` in `change_column` operations.
|
5
|
+
|
6
|
+
# 4.1.1 (Nov, 2023)
|
7
|
+
* Fix check for warnings against PK in MySQL 8+
|
8
|
+
|
3
9
|
# 4.1.0 (Oct, 2023)
|
4
10
|
* Test against MySQL 8.0.
|
5
11
|
* Test against Ruby Head.
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
lhm-shopify (4.
|
4
|
+
lhm-shopify (4.2.0)
|
5
5
|
retriable (>= 3.0.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -38,7 +38,7 @@ GEM
|
|
38
38
|
ruby2_keywords
|
39
39
|
i18n (1.14.1)
|
40
40
|
concurrent-ruby (~> 1.0)
|
41
|
-
minitest (5.
|
41
|
+
minitest (5.22.2)
|
42
42
|
mocha (2.1.0)
|
43
43
|
ruby2_keywords (>= 0.0.5)
|
44
44
|
mutex_m (0.1.2)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
lhm-shopify (4.
|
4
|
+
lhm-shopify (4.2.0)
|
5
5
|
retriable (>= 3.0.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -31,7 +31,7 @@ GEM
|
|
31
31
|
docile (1.4.0)
|
32
32
|
i18n (1.14.1)
|
33
33
|
concurrent-ruby (~> 1.0)
|
34
|
-
minitest (5.
|
34
|
+
minitest (5.22.2)
|
35
35
|
mocha (2.1.0)
|
36
36
|
ruby2_keywords (>= 0.0.5)
|
37
37
|
mysql2 (0.5.5)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
lhm-shopify (4.
|
4
|
+
lhm-shopify (4.2.0)
|
5
5
|
retriable (>= 3.0.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -30,7 +30,7 @@ GEM
|
|
30
30
|
docile (1.4.0)
|
31
31
|
i18n (1.14.1)
|
32
32
|
concurrent-ruby (~> 1.0)
|
33
|
-
minitest (5.
|
33
|
+
minitest (5.22.2)
|
34
34
|
mocha (2.1.0)
|
35
35
|
ruby2_keywords (>= 0.0.5)
|
36
36
|
mysql2 (0.5.5)
|
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: ..
|
3
3
|
specs:
|
4
|
-
lhm-shopify (4.
|
4
|
+
lhm-shopify (4.2.0)
|
5
5
|
retriable (>= 3.0.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -38,7 +38,7 @@ GEM
|
|
38
38
|
ruby2_keywords
|
39
39
|
i18n (1.14.1)
|
40
40
|
concurrent-ruby (~> 1.0)
|
41
|
-
minitest (5.
|
41
|
+
minitest (5.22.2)
|
42
42
|
mocha (2.1.0)
|
43
43
|
ruby2_keywords (>= 0.0.5)
|
44
44
|
mutex_m (0.1.2)
|
data/lib/lhm/chunker.rb
CHANGED
@@ -23,6 +23,7 @@ module Lhm
|
|
23
23
|
@chunk_finder = ChunkFinder.new(migration, connection, options)
|
24
24
|
@options = options
|
25
25
|
@raise_on_warnings = options.fetch(:raise_on_warnings, false)
|
26
|
+
@pk_duplicate_warning_regexp ||= /Duplicate entry .+ for key '(#{@migration.destination_name}\.)?PRIMARY'/
|
26
27
|
@verifier = options[:verifier]
|
27
28
|
if @throttler = options[:throttler]
|
28
29
|
@throttler.connection = @connection if @throttler.respond_to?(:connection=)
|
@@ -80,11 +81,11 @@ module Lhm
|
|
80
81
|
|
81
82
|
def raise_on_non_pk_duplicate_warning
|
82
83
|
@connection.select_all("SHOW WARNINGS", should_retry: true, log_prefix: LOG_PREFIX).each do |row|
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
84
|
+
next if row["Message"].match?(@pk_duplicate_warning_regexp)
|
85
|
+
|
86
|
+
m = "Unexpected warning found for inserted row: #{row["Message"]}"
|
87
|
+
Lhm.logger.warn(m)
|
88
|
+
raise Error.new(m) if @raise_on_warnings
|
88
89
|
end
|
89
90
|
end
|
90
91
|
|
data/lib/lhm/migrator.rb
CHANGED
@@ -67,7 +67,11 @@ module Lhm
|
|
67
67
|
# @param [String] name Name of the column to change
|
68
68
|
# @param [String] definition Valid SQL column definition
|
69
69
|
def change_column(name, definition)
|
70
|
-
|
70
|
+
if definition.match?(/^(DROP|SET) DEFAULT/i)
|
71
|
+
ddl('alter table `%s` alter column `%s` %s' % [@name, name, definition])
|
72
|
+
else
|
73
|
+
ddl('alter table `%s` modify column `%s` %s' % [@name, name, definition])
|
74
|
+
end
|
71
75
|
end
|
72
76
|
|
73
77
|
# Rename an existing column.
|
data/lib/lhm/version.rb
CHANGED
@@ -31,7 +31,6 @@ describe Lhm::Chunker do
|
|
31
31
|
replica do
|
32
32
|
value(count_all(@destination.name)).must_equal(1)
|
33
33
|
end
|
34
|
-
|
35
34
|
end
|
36
35
|
|
37
36
|
it 'should copy and ignore duplicate primary key' do
|
@@ -39,7 +38,7 @@ describe Lhm::Chunker do
|
|
39
38
|
execute("insert into origin set id = 1002 ")
|
40
39
|
execute("insert into destination set id = 1002 ")
|
41
40
|
|
42
|
-
Lhm::Chunker.new(@migration, connection, {throttler: throttler, printer: printer} ).run
|
41
|
+
Lhm::Chunker.new(@migration, connection, {raise_on_warnings: true, throttler: throttler, printer: printer} ).run
|
43
42
|
|
44
43
|
replica do
|
45
44
|
value(count_all(@destination.name)).must_equal(2)
|
@@ -55,7 +54,7 @@ describe Lhm::Chunker do
|
|
55
54
|
execute("insert into composite_primary_key set id = 1002, shop_id = 1")
|
56
55
|
execute("insert into composite_primary_key_dest set id = 1002, shop_id = 1")
|
57
56
|
|
58
|
-
Lhm::Chunker.new(migration, connection, {throttler: throttler, printer: printer} ).run
|
57
|
+
Lhm::Chunker.new(migration, connection, {raise_on_warning: true, throttler: throttler, printer: printer} ).run
|
59
58
|
|
60
59
|
replica do
|
61
60
|
value(count_all(destination.name)).must_equal(2)
|
data/spec/unit/migrator_spec.rb
CHANGED
@@ -116,6 +116,22 @@ describe Lhm::Migrator do
|
|
116
116
|
'alter table `lhmn_alt` modify column `logins` INT(11)'
|
117
117
|
])
|
118
118
|
end
|
119
|
+
|
120
|
+
it "should drop a default" do
|
121
|
+
@creator.change_column('foo', 'DROP DEFAULT')
|
122
|
+
|
123
|
+
value(@creator.statements).must_equal([
|
124
|
+
'alter table `lhmn_alt` alter column `foo` DROP DEFAULT'
|
125
|
+
])
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should set a default" do
|
129
|
+
@creator.change_column('foo', "SET DEFAULT 'bar'")
|
130
|
+
|
131
|
+
value(@creator.statements).must_equal([
|
132
|
+
"alter table `lhmn_alt` alter column `foo` SET DEFAULT 'bar'"
|
133
|
+
])
|
134
|
+
end
|
119
135
|
end
|
120
136
|
|
121
137
|
describe 'direct changes' do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: lhm-shopify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- SoundCloud
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date:
|
15
|
+
date: 2024-03-04 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: retriable
|
@@ -320,7 +320,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
320
320
|
- !ruby/object:Gem::Version
|
321
321
|
version: '0'
|
322
322
|
requirements: []
|
323
|
-
rubygems_version: 3.
|
323
|
+
rubygems_version: 3.5.6
|
324
324
|
signing_key:
|
325
325
|
specification_version: 4
|
326
326
|
summary: online schema changer for mysql
|