ridgepole 0.2.9 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/ridgepole/delta.rb +4 -4
- data/lib/ridgepole/diff.rb +22 -8
- data/lib/ridgepole/execute_expander.rb +22 -0
- data/lib/ridgepole/version.rb +1 -1
- data/spec/migrate/check_orphan_index_spec.rb +1 -1
- data/spec/migrate/migrate_drop_column_and_index_2_spec.rb +152 -0
- data/spec/migrate/migrate_drop_column_and_index_spec.rb +148 -0
- data/spec/migrate/migrate_noop_spec.rb +1 -1
- data/spec/migrate/migrate_script_error_spec.rb +1 -1
- metadata +5 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7f20d24b4955d4b21970f0795d9202541c64387b
|
4
|
+
data.tar.gz: ca0f973959d8c8a4580282240938ff40b0c8f064
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a1956f2233beaf59f6d664fba626b79faa3594ef1fbc565e9f3ecd33c538a5801976bca703f8c5c8c50c94894e07073269a1e477ba1aaf084d0e0a90aeac2edd
|
7
|
+
data.tar.gz: bfbd7ec8f1edd90ff24ce5f3c8cee7860b60a262f020c2b98ee1dfc4eba6bb98743fbd8397b73706b087d11dbcfdfe964ed3bced3772bfb20b0ba0d95f73d4fc
|
data/lib/ridgepole/delta.rb
CHANGED
@@ -213,13 +213,13 @@ remove_column(#{table_name.inspect}, #{column_name.inspect})
|
|
213
213
|
end
|
214
214
|
|
215
215
|
def append_change_indices(table_name, delta, buf)
|
216
|
-
(delta[:add] || {}).each do |index_name, attrs|
|
217
|
-
append_add_index(table_name, index_name, attrs, buf)
|
218
|
-
end
|
219
|
-
|
220
216
|
(delta[:delete] || {}).each do |index_name, attrs|
|
221
217
|
append_remove_index(table_name, index_name, attrs, buf)
|
222
218
|
end
|
219
|
+
|
220
|
+
(delta[:add] || {}).each do |index_name, attrs|
|
221
|
+
append_add_index(table_name, index_name, attrs, buf)
|
222
|
+
end
|
223
223
|
end
|
224
224
|
|
225
225
|
def append_add_index(table_name, index_name, attrs, buf)
|
data/lib/ridgepole/diff.rb
CHANGED
@@ -74,8 +74,8 @@ class Ridgepole::Diff
|
|
74
74
|
table_delta = {}
|
75
75
|
|
76
76
|
scan_options_change(table_name, from[:options], to[:options], table_delta)
|
77
|
-
scan_definition_change(from[:definition], to[:definition], table_delta)
|
78
|
-
scan_indices_change(from[:indices], to[:indices], table_delta)
|
77
|
+
scan_definition_change(from[:definition], to[:definition], from[:indices], table_delta)
|
78
|
+
scan_indices_change(from[:indices], to[:indices], to[:definition], table_delta)
|
79
79
|
|
80
80
|
unless table_delta.empty?
|
81
81
|
delta[:change] ||= {}
|
@@ -89,7 +89,7 @@ class Ridgepole::Diff
|
|
89
89
|
end
|
90
90
|
end
|
91
91
|
|
92
|
-
def scan_definition_change(from, to, table_delta)
|
92
|
+
def scan_definition_change(from, to, from_indices, table_delta)
|
93
93
|
from = (from || {}).dup
|
94
94
|
to = (to || {}).dup
|
95
95
|
definition_delta = {}
|
@@ -131,6 +131,16 @@ class Ridgepole::Diff
|
|
131
131
|
from.each do |column_name, from_attrs|
|
132
132
|
definition_delta[:delete] ||= {}
|
133
133
|
definition_delta[:delete][column_name] = from_attrs
|
134
|
+
|
135
|
+
if from_indices
|
136
|
+
from_indices.each do |name, attrs|
|
137
|
+
attrs[:column_name].delete(column_name)
|
138
|
+
end
|
139
|
+
|
140
|
+
from_indices.reject! do |name, attrs|
|
141
|
+
attrs[:column_name].empty?
|
142
|
+
end
|
143
|
+
end
|
134
144
|
end
|
135
145
|
end
|
136
146
|
|
@@ -163,7 +173,7 @@ class Ridgepole::Diff
|
|
163
173
|
end
|
164
174
|
end
|
165
175
|
|
166
|
-
def scan_indices_change(from, to, table_delta)
|
176
|
+
def scan_indices_change(from, to, to_columns, table_delta)
|
167
177
|
from = (from || {}).dup
|
168
178
|
to = (to || {}).dup
|
169
179
|
indices_delta = {}
|
@@ -175,8 +185,10 @@ class Ridgepole::Diff
|
|
175
185
|
indices_delta[:add][index_name] = to_attrs
|
176
186
|
|
177
187
|
unless @options[:merge]
|
178
|
-
|
179
|
-
|
188
|
+
if from_attrs[:column_name].all? {|i| to_columns[i] }
|
189
|
+
indices_delta[:delete] ||= {}
|
190
|
+
indices_delta[:delete][index_name] = from_attrs
|
191
|
+
end
|
180
192
|
end
|
181
193
|
end
|
182
194
|
else
|
@@ -187,8 +199,10 @@ class Ridgepole::Diff
|
|
187
199
|
|
188
200
|
unless @options[:merge]
|
189
201
|
from.each do |index_name, from_attrs|
|
190
|
-
|
191
|
-
|
202
|
+
if from_attrs[:column_name].all? {|i| to_columns[i] }
|
203
|
+
indices_delta[:delete] ||= {}
|
204
|
+
indices_delta[:delete][index_name] = from_attrs
|
205
|
+
end
|
192
206
|
end
|
193
207
|
end
|
194
208
|
|
@@ -40,3 +40,25 @@ class Ridgepole::ExecuteExpander
|
|
40
40
|
end
|
41
41
|
end # of class methods
|
42
42
|
end
|
43
|
+
|
44
|
+
require 'active_record/connection_adapters/abstract/schema_statements'
|
45
|
+
|
46
|
+
module ActiveRecord::ConnectionAdapters::SchemaStatements
|
47
|
+
def add_index_with_noop(table_name, column_name, options = {})
|
48
|
+
begin
|
49
|
+
add_index_without_noop(table_name, column_name, options)
|
50
|
+
rescue => e
|
51
|
+
raise e unless Ridgepole::ExecuteExpander.noop
|
52
|
+
end
|
53
|
+
end
|
54
|
+
alias_method_chain :add_index, :noop
|
55
|
+
|
56
|
+
def remove_index_with_noop(table_name, options = {})
|
57
|
+
begin
|
58
|
+
remove_index_without_noop(table_name, options)
|
59
|
+
rescue => e
|
60
|
+
raise e unless Ridgepole::ExecuteExpander.noop
|
61
|
+
end
|
62
|
+
end
|
63
|
+
alias_method_chain :remove_index, :noop
|
64
|
+
end
|
data/lib/ridgepole/version.rb
CHANGED
@@ -0,0 +1,152 @@
|
|
1
|
+
describe 'Ridgepole::Client#diff -> migrate' do
|
2
|
+
context 'when drop column and index (2)' do
|
3
|
+
let(:actual_dsl) {
|
4
|
+
<<-RUBY
|
5
|
+
create_table "clubs", force: true do |t|
|
6
|
+
t.string "name", default: "", null: false
|
7
|
+
end
|
8
|
+
|
9
|
+
add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
|
10
|
+
|
11
|
+
create_table "departments", primary_key: "dept_no", force: true do |t|
|
12
|
+
t.string "dept_name", limit: 40, null: false
|
13
|
+
end
|
14
|
+
|
15
|
+
add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
|
16
|
+
|
17
|
+
create_table "dept_emp", id: false, force: true do |t|
|
18
|
+
t.integer "emp_no", null: false
|
19
|
+
t.string "dept_no", limit: 4, null: false
|
20
|
+
t.date "from_date", null: false
|
21
|
+
t.date "to_date", null: false
|
22
|
+
end
|
23
|
+
|
24
|
+
add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
|
25
|
+
add_index "dept_emp", ["emp_no"], name: "emp_no", using: :btree
|
26
|
+
|
27
|
+
create_table "dept_manager", id: false, force: true do |t|
|
28
|
+
t.string "dept_no", limit: 4, null: false
|
29
|
+
t.integer "emp_no", null: false
|
30
|
+
t.date "from_date", null: false
|
31
|
+
t.date "to_date", null: false
|
32
|
+
end
|
33
|
+
|
34
|
+
add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
|
35
|
+
add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
|
36
|
+
|
37
|
+
create_table "employee_clubs", force: true do |t|
|
38
|
+
t.integer "emp_no", unsigned: true, null: false
|
39
|
+
t.integer "club_id", unsigned: true, null: false
|
40
|
+
end
|
41
|
+
|
42
|
+
add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
|
43
|
+
|
44
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
45
|
+
t.date "birth_date", null: false
|
46
|
+
t.string "first_name", limit: 14, null: false
|
47
|
+
t.string "last_name", limit: 16, null: false
|
48
|
+
t.string "gender", limit: 1, null: false
|
49
|
+
t.date "hire_date", null: false
|
50
|
+
end
|
51
|
+
|
52
|
+
create_table "salaries", id: false, force: true do |t|
|
53
|
+
t.integer "emp_no", null: false
|
54
|
+
t.integer "salary", null: false
|
55
|
+
t.date "from_date", null: false
|
56
|
+
t.date "to_date", null: false
|
57
|
+
end
|
58
|
+
|
59
|
+
add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
|
60
|
+
|
61
|
+
create_table "titles", id: false, force: true do |t|
|
62
|
+
t.integer "emp_no", null: false
|
63
|
+
t.string "title", limit: 50, null: false
|
64
|
+
t.date "from_date", null: false
|
65
|
+
t.date "to_date"
|
66
|
+
end
|
67
|
+
|
68
|
+
add_index "titles", ["emp_no"], name: "emp_no", using: :btree
|
69
|
+
RUBY
|
70
|
+
}
|
71
|
+
|
72
|
+
let(:expected_dsl) {
|
73
|
+
<<-RUBY
|
74
|
+
create_table "clubs", force: true do |t|
|
75
|
+
t.string "name", default: "", null: false
|
76
|
+
end
|
77
|
+
|
78
|
+
add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
|
79
|
+
|
80
|
+
create_table "departments", primary_key: "dept_no", force: true do |t|
|
81
|
+
t.string "dept_name", limit: 40, null: false
|
82
|
+
end
|
83
|
+
|
84
|
+
add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
|
85
|
+
|
86
|
+
create_table "dept_emp", id: false, force: true do |t|
|
87
|
+
t.integer "emp_no2", null: false
|
88
|
+
t.string "dept_no", limit: 4, null: false
|
89
|
+
end
|
90
|
+
|
91
|
+
add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
|
92
|
+
add_index "dept_emp", ["emp_no2"], name: "emp_no", using: :btree
|
93
|
+
|
94
|
+
create_table "dept_manager", id: false, force: true do |t|
|
95
|
+
t.string "dept_no", limit: 4, null: false
|
96
|
+
end
|
97
|
+
|
98
|
+
add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
|
99
|
+
|
100
|
+
create_table "employee_clubs", force: true do |t|
|
101
|
+
t.integer "emp_no", unsigned: true, null: false
|
102
|
+
t.integer "club_id2", unsigned: true, null: false
|
103
|
+
end
|
104
|
+
|
105
|
+
add_index "employee_clubs", ["emp_no", "club_id2"], name: "idx_emp_no_club_id2", using: :btree
|
106
|
+
add_index "employee_clubs", ["emp_no"], name: "idx_emp_no_club_id", using: :btree
|
107
|
+
|
108
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
109
|
+
t.date "birth_date", null: false
|
110
|
+
t.string "first_name", limit: 14, null: false
|
111
|
+
end
|
112
|
+
|
113
|
+
create_table "salaries", id: false, force: true do |t|
|
114
|
+
t.integer "emp_no", null: false
|
115
|
+
t.integer "salary", null: false
|
116
|
+
t.date "from_date", null: false
|
117
|
+
t.date "to_date", null: false
|
118
|
+
end
|
119
|
+
|
120
|
+
add_index "salaries", ["emp_no", "salary"], name: "emp_no", using: :btree
|
121
|
+
|
122
|
+
create_table "titles", id: false, force: true do |t|
|
123
|
+
t.integer "emp_no", null: false
|
124
|
+
t.string "title", limit: 50, null: false
|
125
|
+
t.date "from_date", null: false
|
126
|
+
t.date "to_date"
|
127
|
+
end
|
128
|
+
|
129
|
+
add_index "titles", ["emp_no"], name: "emp_no", using: :btree
|
130
|
+
RUBY
|
131
|
+
}
|
132
|
+
|
133
|
+
before { subject.diff(actual_dsl).migrate }
|
134
|
+
subject { client }
|
135
|
+
|
136
|
+
it {
|
137
|
+
delta = subject.diff(expected_dsl)
|
138
|
+
expect(delta.differ?).to be_truthy
|
139
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
140
|
+
delta.migrate
|
141
|
+
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
|
142
|
+
}
|
143
|
+
|
144
|
+
it {
|
145
|
+
delta = subject.diff(expected_dsl)
|
146
|
+
expect(delta.differ?).to be_truthy
|
147
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
148
|
+
delta.migrate(:noop => true)
|
149
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
150
|
+
}
|
151
|
+
end
|
152
|
+
end
|
@@ -0,0 +1,148 @@
|
|
1
|
+
describe 'Ridgepole::Client#diff -> migrate' do
|
2
|
+
context 'when drop column and index' do
|
3
|
+
let(:actual_dsl) {
|
4
|
+
<<-RUBY
|
5
|
+
create_table "clubs", force: true do |t|
|
6
|
+
t.string "name", default: "", null: false
|
7
|
+
end
|
8
|
+
|
9
|
+
add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
|
10
|
+
|
11
|
+
create_table "departments", primary_key: "dept_no", force: true do |t|
|
12
|
+
t.string "dept_name", limit: 40, null: false
|
13
|
+
end
|
14
|
+
|
15
|
+
add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
|
16
|
+
|
17
|
+
create_table "dept_emp", id: false, force: true do |t|
|
18
|
+
t.integer "emp_no", null: false
|
19
|
+
t.string "dept_no", limit: 4, null: false
|
20
|
+
t.date "from_date", null: false
|
21
|
+
t.date "to_date", null: false
|
22
|
+
end
|
23
|
+
|
24
|
+
add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
|
25
|
+
add_index "dept_emp", ["emp_no"], name: "emp_no", using: :btree
|
26
|
+
|
27
|
+
create_table "dept_manager", id: false, force: true do |t|
|
28
|
+
t.string "dept_no", limit: 4, null: false
|
29
|
+
t.integer "emp_no", null: false
|
30
|
+
t.date "from_date", null: false
|
31
|
+
t.date "to_date", null: false
|
32
|
+
end
|
33
|
+
|
34
|
+
add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
|
35
|
+
add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
|
36
|
+
|
37
|
+
create_table "employee_clubs", force: true do |t|
|
38
|
+
t.integer "emp_no", unsigned: true, null: false
|
39
|
+
t.integer "club_id", unsigned: true, null: false
|
40
|
+
end
|
41
|
+
|
42
|
+
add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
|
43
|
+
|
44
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
45
|
+
t.date "birth_date", null: false
|
46
|
+
t.string "first_name", limit: 14, null: false
|
47
|
+
t.string "last_name", limit: 16, null: false
|
48
|
+
t.string "gender", limit: 1, null: false
|
49
|
+
t.date "hire_date", null: false
|
50
|
+
end
|
51
|
+
|
52
|
+
create_table "salaries", id: false, force: true do |t|
|
53
|
+
t.integer "emp_no", null: false
|
54
|
+
t.integer "salary", null: false
|
55
|
+
t.date "from_date", null: false
|
56
|
+
t.date "to_date", null: false
|
57
|
+
end
|
58
|
+
|
59
|
+
add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
|
60
|
+
|
61
|
+
create_table "titles", id: false, force: true do |t|
|
62
|
+
t.integer "emp_no", null: false
|
63
|
+
t.string "title", limit: 50, null: false
|
64
|
+
t.date "from_date", null: false
|
65
|
+
t.date "to_date"
|
66
|
+
end
|
67
|
+
|
68
|
+
add_index "titles", ["emp_no"], name: "emp_no", using: :btree
|
69
|
+
RUBY
|
70
|
+
}
|
71
|
+
|
72
|
+
let(:expected_dsl) {
|
73
|
+
<<-RUBY
|
74
|
+
create_table "clubs", force: true do |t|
|
75
|
+
t.string "name", default: "", null: false
|
76
|
+
end
|
77
|
+
|
78
|
+
add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
|
79
|
+
|
80
|
+
create_table "departments", primary_key: "dept_no", force: true do |t|
|
81
|
+
t.string "dept_name", limit: 40, null: false
|
82
|
+
end
|
83
|
+
|
84
|
+
add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
|
85
|
+
|
86
|
+
create_table "dept_emp", id: false, force: true do |t|
|
87
|
+
t.string "dept_no", limit: 4, null: false
|
88
|
+
end
|
89
|
+
|
90
|
+
add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
|
91
|
+
|
92
|
+
create_table "dept_manager", id: false, force: true do |t|
|
93
|
+
t.string "dept_no", limit: 4, null: false
|
94
|
+
end
|
95
|
+
|
96
|
+
add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
|
97
|
+
|
98
|
+
create_table "employee_clubs", force: true do |t|
|
99
|
+
t.integer "emp_no", unsigned: true, null: false
|
100
|
+
end
|
101
|
+
|
102
|
+
add_index "employee_clubs", ["emp_no"], name: "idx_emp_no_club_id", using: :btree
|
103
|
+
|
104
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
105
|
+
t.date "birth_date", null: false
|
106
|
+
t.string "first_name", limit: 14, null: false
|
107
|
+
end
|
108
|
+
|
109
|
+
create_table "salaries", id: false, force: true do |t|
|
110
|
+
t.integer "emp_no", null: false
|
111
|
+
t.integer "salary", null: false
|
112
|
+
t.date "from_date", null: false
|
113
|
+
t.date "to_date", null: false
|
114
|
+
end
|
115
|
+
|
116
|
+
add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
|
117
|
+
|
118
|
+
create_table "titles", id: false, force: true do |t|
|
119
|
+
t.integer "emp_no", null: false
|
120
|
+
t.string "title", limit: 50, null: false
|
121
|
+
t.date "from_date", null: false
|
122
|
+
t.date "to_date"
|
123
|
+
end
|
124
|
+
|
125
|
+
add_index "titles", ["emp_no"], name: "emp_no", using: :btree
|
126
|
+
RUBY
|
127
|
+
}
|
128
|
+
|
129
|
+
before { subject.diff(actual_dsl).migrate }
|
130
|
+
subject { client }
|
131
|
+
|
132
|
+
it {
|
133
|
+
delta = subject.diff(expected_dsl)
|
134
|
+
expect(delta.differ?).to be_truthy
|
135
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
136
|
+
delta.migrate
|
137
|
+
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
|
138
|
+
}
|
139
|
+
|
140
|
+
it {
|
141
|
+
delta = subject.diff(expected_dsl)
|
142
|
+
expect(delta.differ?).to be_truthy
|
143
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
144
|
+
delta.migrate(:noop => true)
|
145
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
146
|
+
}
|
147
|
+
end
|
148
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ridgepole
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
@@ -134,6 +134,8 @@ files:
|
|
134
134
|
- spec/migrate/migrate_change_table_option_spec.rb
|
135
135
|
- spec/migrate/migrate_create_index_spec.rb
|
136
136
|
- spec/migrate/migrate_create_table_spec.rb
|
137
|
+
- spec/migrate/migrate_drop_column_and_index_2_spec.rb
|
138
|
+
- spec/migrate/migrate_drop_column_and_index_spec.rb
|
137
139
|
- spec/migrate/migrate_drop_column_spec.rb
|
138
140
|
- spec/migrate/migrate_drop_index_spec.rb
|
139
141
|
- spec/migrate/migrate_drop_table_spec.rb
|
@@ -192,6 +194,8 @@ test_files:
|
|
192
194
|
- spec/migrate/migrate_change_table_option_spec.rb
|
193
195
|
- spec/migrate/migrate_create_index_spec.rb
|
194
196
|
- spec/migrate/migrate_create_table_spec.rb
|
197
|
+
- spec/migrate/migrate_drop_column_and_index_2_spec.rb
|
198
|
+
- spec/migrate/migrate_drop_column_and_index_spec.rb
|
195
199
|
- spec/migrate/migrate_drop_column_spec.rb
|
196
200
|
- spec/migrate/migrate_drop_index_spec.rb
|
197
201
|
- spec/migrate/migrate_drop_table_spec.rb
|