ridgepole 0.3.2 → 0.3.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: aa9b0a7dfc33d00e38afd82181c57d18100a9827
4
- data.tar.gz: 6d1de2888d0d1881e7452dbfcd859b91291a8204
3
+ metadata.gz: f678cfdd6ac71010140d48e4d8174e93647de40f
4
+ data.tar.gz: 4463ea985e64b7eddf093cbee47c3973a2645a4b
5
5
  SHA512:
6
- metadata.gz: a504fcec940a63f231904ce2f096bf5cc2c1b7793911e24e0a077b2561ffc9d990783b3feb65665cc1df61b5e46c09a0b08ed542fa001e11bc4b32c523951c4a
7
- data.tar.gz: 04f49e0ca36179a1e5d495cda341cd05048379639083a3de96f1194deda7fbf093823295b6181758f730949ef2120fc68d557107cbf1690bbff9e2709ceffca8
6
+ metadata.gz: e02a89b0b5672a9d934c0dec3c550e05509e41a339a44f7c40169dc71d28733d63db2f64ac9cec55f008bea8253a31670fb8a44b93044c8b1f86dd7f107a3b33
7
+ data.tar.gz: ce27454f5a691e3dbcd87a57d2136e58ed6fbcde5af37febba2ec847768e2314bc80c8b3331e1659041fa2873150dd73aaf864134aa988250cc70d7acb9bf566
data/README.md CHANGED
@@ -31,6 +31,7 @@ Usage: ridgepole [options]
31
31
  -f, --file FILE
32
32
  --dry-run
33
33
  --table-options OPTIONS
34
+ --bulk-change
34
35
  -e, --export
35
36
  --split
36
37
  --split-with-dir
data/bin/ridgepole CHANGED
@@ -47,6 +47,10 @@ ARGV.options do |opt|
47
47
  opt.on('-f', '--file FILE') {|v| file = v }
48
48
  opt.on('', '--dry-run') { options[:dry_run] = true }
49
49
  opt.on('', '--table-options OPTIONS') {|v| options[:table_options] = v }
50
+ opt.on('', '--bulk-change') {
51
+ raise "Cannot use `bulk-change` in `merge`" if options[:merge]
52
+ options[:bulk_change] = true
53
+ }
50
54
  opt.on('-e', '--export') { set_mode[:export] }
51
55
  opt.on('', '--split') {|v| split = true }
52
56
  opt.on('', '--split-with-dir') {|v| split = :with_dir }
@@ -136,8 +136,12 @@ create_table(#{table_name.inspect}, #{options.inspect}) do |t|
136
136
  end
137
137
  EOS
138
138
 
139
- indices.each do |index_name, index_attrs|
140
- append_add_index(table_name, index_name, index_attrs, buf)
139
+ unless indices.empty?
140
+ append_change_table(table_name, buf) do
141
+ indices.each do |index_name, index_attrs|
142
+ append_add_index(table_name, index_name, index_attrs, buf)
143
+ end
144
+ end
141
145
  end
142
146
 
143
147
  buf.puts
@@ -160,11 +164,20 @@ drop_table(#{table_name.inspect})
160
164
  end
161
165
 
162
166
  def append_change(table_name, attrs, buf)
163
- append_change_definition(table_name, attrs[:definition] || {}, buf)
164
- append_change_indices(table_name, attrs[:indices] || {}, buf)
167
+ append_change_table(table_name, buf) do
168
+ append_change_definition(table_name, attrs[:definition] || {}, buf)
169
+ append_change_indices(table_name, attrs[:indices] || {}, buf)
170
+ end
171
+
165
172
  buf.puts
166
173
  end
167
174
 
175
+ def append_change_table(table_name, buf)
176
+ buf.puts "change_table(#{table_name.inspect}, {:bulk => true}) do |t|" if @options[:bulk_change]
177
+ yield
178
+ buf.puts 'end' if @options[:bulk_change]
179
+ end
180
+
168
181
  def append_change_definition(table_name, delta, buf)
169
182
  (delta[:add] || {}).each do |column_name, attrs|
170
183
  append_add_column(table_name, column_name, attrs, buf)
@@ -187,30 +200,54 @@ drop_table(#{table_name.inspect})
187
200
  type = attrs.fetch(:type)
188
201
  options = attrs[:options] || {}
189
202
 
190
- buf.puts(<<-EOS)
203
+ if @options[:bulk_change]
204
+ buf.puts(<<-EOS)
205
+ t.column(#{column_name.inspect}, #{type.inspect}, #{options.inspect})
206
+ EOS
207
+ else
208
+ buf.puts(<<-EOS)
191
209
  add_column(#{table_name.inspect}, #{column_name.inspect}, #{type.inspect}, #{options.inspect})
192
- EOS
210
+ EOS
211
+ end
193
212
  end
194
213
 
195
214
  def append_rename_column(table_name, to_column_name, from_column_name, buf)
196
- buf.puts(<<-EOS)
215
+ if @options[:bulk_change]
216
+ buf.puts(<<-EOS)
217
+ t.rename(#{from_column_name.inspect}, #{to_column_name.inspect})
218
+ EOS
219
+ else
220
+ buf.puts(<<-EOS)
197
221
  rename_column(#{table_name.inspect}, #{from_column_name.inspect}, #{to_column_name.inspect})
198
- EOS
222
+ EOS
223
+ end
199
224
  end
200
225
 
201
226
  def append_change_column(table_name, column_name, attrs, buf)
202
227
  type = attrs.fetch(:type)
203
228
  options = attrs[:options] || {}
204
229
 
205
- buf.puts(<<-EOS)
230
+ if @options[:bulk_change]
231
+ buf.puts(<<-EOS)
232
+ t.change(#{column_name.inspect}, #{type.inspect}, #{options.inspect})
233
+ EOS
234
+ else
235
+ buf.puts(<<-EOS)
206
236
  change_column(#{table_name.inspect}, #{column_name.inspect}, #{type.inspect}, #{options.inspect})
207
- EOS
237
+ EOS
238
+ end
208
239
  end
209
240
 
210
241
  def append_remove_column(table_name, column_name, attrs, buf)
211
- buf.puts(<<-EOS)
242
+ if @options[:bulk_change]
243
+ buf.puts(<<-EOS)
244
+ t.remove(#{column_name.inspect})
245
+ EOS
246
+ else
247
+ buf.puts(<<-EOS)
212
248
  remove_column(#{table_name.inspect}, #{column_name.inspect})
213
- EOS
249
+ EOS
250
+ end
214
251
  end
215
252
 
216
253
  def append_change_indices(table_name, delta, buf)
@@ -227,9 +264,15 @@ remove_column(#{table_name.inspect}, #{column_name.inspect})
227
264
  column_name = attrs.fetch(:column_name)
228
265
  options = attrs[:options] || {}
229
266
 
230
- buf.puts(<<-EOS)
267
+ if @options[:bulk_change]
268
+ buf.puts(<<-EOS)
269
+ t.index(#{column_name.inspect}, #{options.inspect})
270
+ EOS
271
+ else
272
+ buf.puts(<<-EOS)
231
273
  add_index(#{table_name.inspect}, #{column_name.inspect}, #{options.inspect})
232
- EOS
274
+ EOS
275
+ end
233
276
  end
234
277
 
235
278
  def append_remove_index(table_name, index_name, attrs, buf)
@@ -237,8 +280,14 @@ add_index(#{table_name.inspect}, #{column_name.inspect}, #{options.inspect})
237
280
  options = attrs[:options] || {}
238
281
  target = options[:name] ? {:name => options[:name]} : column_name
239
282
 
240
- buf.puts(<<-EOS)
283
+ if @options[:bulk_change]
284
+ buf.puts(<<-EOS)
285
+ t.remove_index(#{target.inspect})
286
+ EOS
287
+ else
288
+ buf.puts(<<-EOS)
241
289
  remove_index(#{table_name.inspect}, #{target.inspect})
242
- EOS
290
+ EOS
291
+ end
243
292
  end
244
293
  end
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.3.2'
2
+ VERSION = '0.3.3'
3
3
  end
@@ -162,5 +162,23 @@ describe 'Ridgepole::Client#diff -> migrate' do
162
162
  remove_column("employees", "updated_at")
163
163
  RUBY
164
164
  }
165
+
166
+ it {
167
+ delta = client(:bulk_change => true).diff(expected_dsl)
168
+ expect(delta.differ?).to be_truthy
169
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
170
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
171
+ change_table("employee_clubs", {:bulk => true}) do |t|
172
+ t.column("any_col", :string, {:null=>false, :after=>"club_id"})
173
+ end
174
+
175
+ change_table("employees", {:bulk => true}) do |t|
176
+ t.column("age", :integer, {:unsigned=>true, :null=>false, :after=>"hire_date"})
177
+ t.column("updated_at", :date, {:after=>"age"})
178
+ end
179
+ RUBY
180
+ delta.migrate
181
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
182
+ }
165
183
  end
166
184
  end
@@ -159,5 +159,23 @@ describe 'Ridgepole::Client#diff -> migrate' do
159
159
  change_column("employees", "gender", :string, {:limit=>1, :null=>false, :unsigned=>false})
160
160
  RUBY
161
161
  }
162
+
163
+ it {
164
+ delta = client(:bulk_change => true).diff(expected_dsl)
165
+ expect(delta.differ?).to be_truthy
166
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
167
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
168
+ change_table("employee_clubs", {:bulk => true}) do |t|
169
+ t.change("club_id", :integer, {:unsigned=>false, :null=>true})
170
+ end
171
+
172
+ change_table("employees", {:bulk => true}) do |t|
173
+ t.change("last_name", :string, {:limit=>20, :default=>"XXX", :null=>false, :unsigned=>false})
174
+ t.change("gender", :string, {:limit=>2, :null=>false, :unsigned=>false})
175
+ end
176
+ RUBY
177
+ delta.migrate
178
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip.gsub(/(\s*,\s*unsigned: false)?\s*,\s*null: true/, '')
179
+ }
162
180
  end
163
181
  end
@@ -0,0 +1,263 @@
1
+ describe 'Ridgepole::Client#diff -> migrate' do
2
+ context 'when create index' do
3
+ let(: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(:actual_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_no", null: false
88
+ t.string "dept_no", limit: 4, null: false
89
+ t.date "from_date", null: false
90
+ t.date "to_date", null: false
91
+ end
92
+
93
+ add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
94
+ add_index "dept_emp", ["emp_no"], name: "emp_no", using: :btree
95
+
96
+ create_table "dept_manager", id: false, force: true do |t|
97
+ t.string "dept_no", limit: 4, null: false
98
+ t.integer "emp_no", null: false
99
+ t.date "from_date", null: false
100
+ t.date "to_date", null: false
101
+ end
102
+
103
+ add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
104
+ add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
105
+
106
+ create_table "employee_clubs", force: true do |t|
107
+ t.integer "emp_no", unsigned: true, null: false
108
+ t.integer "club_id", unsigned: true, null: false
109
+ end
110
+
111
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
112
+
113
+ create_table "employees", primary_key: "emp_no", force: true do |t|
114
+ t.date "birth_date", null: false
115
+ t.string "first_name", limit: 14, null: false
116
+ t.string "last_name", limit: 16, null: false
117
+ t.string "gender", limit: 1, null: false
118
+ t.date "hire_date", null: false
119
+ end
120
+
121
+ create_table "salaries", id: false, force: true do |t|
122
+ t.integer "emp_no", null: false
123
+ t.integer "salary", null: false
124
+ t.date "from_date", null: false
125
+ t.date "to_date", null: false
126
+ end
127
+
128
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
129
+
130
+ create_table "titles", id: false, force: true do |t|
131
+ t.integer "emp_no", null: false
132
+ t.string "title", limit: 50, null: false
133
+ t.date "from_date", null: false
134
+ t.date "to_date"
135
+ end
136
+
137
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
138
+ RUBY
139
+ }
140
+
141
+ let(:expected_dsl) {
142
+ <<-RUBY
143
+ create_table "clubs", force: true do |t|
144
+ t.string "name", default: "", null: false
145
+ end
146
+
147
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
148
+
149
+ create_table "departments", primary_key: "dept_no", force: true do |t|
150
+ t.string "dept_name", limit: 40, null: false
151
+ end
152
+
153
+ add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
154
+
155
+ create_table "dept_emp", id: false, force: true do |t|
156
+ t.integer "emp_no", null: false
157
+ t.string "dept_no", limit: 4, null: false
158
+ t.date "from_date", null: false
159
+ t.date "to_date", null: false
160
+ end
161
+
162
+ add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
163
+ add_index "dept_emp", ["from_date"], name: "emp_no", using: :btree
164
+
165
+ create_table "dept_manager", id: false, force: true do |t|
166
+ t.string "dept_no", limit: 4, null: false
167
+ t.integer "emp_no", null: false
168
+ t.date "from_date", null: false
169
+ t.date "to_date", null: false
170
+ end
171
+
172
+ add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
173
+ add_index "dept_manager", ["from_date"], name: "emp_no", using: :btree
174
+
175
+ create_table "employee_clubs", force: true do |t|
176
+ t.integer "emp_no", unsigned: true, null: false
177
+ t.integer "club_id", unsigned: true, null: false
178
+ end
179
+
180
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
181
+
182
+ create_table "employees", primary_key: "emp_no", force: true do |t|
183
+ t.date "birth_date", null: false
184
+ t.string "first_name", limit: 14, null: false
185
+ t.string "last_name", limit: 16, null: false
186
+ t.string "gender", limit: 1, null: false
187
+ t.date "hire_date", null: false
188
+ end
189
+
190
+ create_table "salaries", id: false, force: true do |t|
191
+ t.integer "emp_no", null: false
192
+ t.integer "salary", null: false
193
+ t.date "from_date", null: false
194
+ t.date "to_date", null: false
195
+ end
196
+
197
+ add_index "salaries", ["from_date"], name: "emp_no", using: :btree
198
+
199
+ create_table "titles", id: false, force: true do |t|
200
+ t.integer "emp_no", null: false
201
+ t.string "title", limit: 50, null: false
202
+ t.date "from_date", null: false
203
+ t.date "to_date"
204
+ end
205
+
206
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
207
+ RUBY
208
+ }
209
+
210
+ before { subject.diff(actual_dsl).migrate }
211
+ subject { client }
212
+
213
+ it {
214
+ delta = subject.diff(expected_dsl)
215
+ expect(delta.differ?).to be_truthy
216
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
217
+ delta.migrate
218
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
219
+ }
220
+
221
+ it {
222
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
223
+ expect(delta.differ?).to be_truthy
224
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
225
+ remove_index("dept_emp", {:name=>"emp_no"})
226
+ add_index("dept_emp", ["emp_no"], {:name=>"emp_no", :using=>:btree})
227
+
228
+ remove_index("dept_manager", {:name=>"emp_no"})
229
+ add_index("dept_manager", ["emp_no"], {:name=>"emp_no", :using=>:btree})
230
+
231
+ remove_index("salaries", {:name=>"emp_no"})
232
+ add_index("salaries", ["emp_no"], {:name=>"emp_no", :using=>:btree})
233
+ RUBY
234
+ }
235
+
236
+ it {
237
+ delta = client(:bulk_change => true).diff(expected_dsl)
238
+ expect(delta.differ?).to be_truthy
239
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
240
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
241
+ change_table("dept_emp", {:bulk => true}) do |t|
242
+ t.remove_index({:name=>"emp_no"})
243
+ t.index(["from_date"], {:name=>"emp_no", :using=>:btree})
244
+ end
245
+
246
+ change_table("dept_manager", {:bulk => true}) do |t|
247
+ t.remove_index({:name=>"emp_no"})
248
+ t.index(["from_date"], {:name=>"emp_no", :using=>:btree})
249
+ end
250
+
251
+ change_table("salaries", {:bulk => true}) do |t|
252
+ t.remove_index({:name=>"emp_no"})
253
+ t.index(["from_date"], {:name=>"emp_no", :using=>:btree})
254
+ end
255
+ RUBY
256
+
257
+ # XXX: Can not add an index of the same name
258
+ expect {
259
+ delta.migrate
260
+ }.to raise_error(/Index name 'emp_no' on table 'dept_emp' already exists/)
261
+ }
262
+ end
263
+ end
@@ -99,5 +99,26 @@ describe 'Ridgepole::Client#diff -> migrate' do
99
99
  remove_index("titles", {:name=>"emp_no"})
100
100
  RUBY
101
101
  }
102
+
103
+ it {
104
+ delta = client(:bulk_change => true).diff(expected_dsl)
105
+ expect(delta.differ?).to be_truthy
106
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
107
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
108
+ change_table("clubs", {:bulk => true}) do |t|
109
+ t.index(["name"], {:name=>"idx_name", :unique=>true, :using=>:btree})
110
+ end
111
+
112
+ change_table("employee_clubs", {:bulk => true}) do |t|
113
+ t.index(["emp_no", "club_id"], {:name=>"idx_emp_no_club_id", :using=>:btree})
114
+ end
115
+
116
+ change_table("titles", {:bulk => true}) do |t|
117
+ t.index(["emp_no"], {:name=>"emp_no", :using=>:btree})
118
+ end
119
+ RUBY
120
+ delta.migrate
121
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
122
+ }
102
123
  end
103
124
  end
@@ -144,5 +144,36 @@ describe 'Ridgepole::Client#diff -> migrate' do
144
144
  delta.migrate(:noop => true)
145
145
  expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
146
146
  }
147
+
148
+ it {
149
+ delta = client(:bulk_change => true).diff(expected_dsl)
150
+ expect(delta.differ?).to be_truthy
151
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
152
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
153
+ change_table("dept_emp", {:bulk => true}) do |t|
154
+ t.remove("emp_no")
155
+ t.remove("from_date")
156
+ t.remove("to_date")
157
+ end
158
+
159
+ change_table("dept_manager", {:bulk => true}) do |t|
160
+ t.remove("emp_no")
161
+ t.remove("from_date")
162
+ t.remove("to_date")
163
+ end
164
+
165
+ change_table("employee_clubs", {:bulk => true}) do |t|
166
+ t.remove("club_id")
167
+ end
168
+
169
+ change_table("employees", {:bulk => true}) do |t|
170
+ t.remove("last_name")
171
+ t.remove("gender")
172
+ t.remove("hire_date")
173
+ end
174
+ RUBY
175
+ delta.migrate
176
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
177
+ }
147
178
  end
148
179
  end
@@ -157,5 +157,30 @@ describe 'Ridgepole::Client#diff -> migrate' do
157
157
  add_column("employees", "hire_date", :date, {:null=>false, :after=>"gender"})
158
158
  RUBY
159
159
  }
160
+
161
+ it {
162
+ delta = client(:bulk_change => true).diff(expected_dsl)
163
+ expect(delta.differ?).to be_truthy
164
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
165
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
166
+ change_table("dept_emp", {:bulk => true}) do |t|
167
+ t.remove("from_date")
168
+ t.remove("to_date")
169
+ end
170
+
171
+ change_table("dept_manager", {:bulk => true}) do |t|
172
+ t.remove("from_date")
173
+ t.remove("to_date")
174
+ end
175
+
176
+ change_table("employees", {:bulk => true}) do |t|
177
+ t.remove("last_name")
178
+ t.remove("gender")
179
+ t.remove("hire_date")
180
+ end
181
+ RUBY
182
+ delta.migrate
183
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
184
+ }
160
185
  end
161
186
  end
@@ -99,5 +99,26 @@ describe 'Ridgepole::Client#diff -> migrate' do
99
99
  add_index("titles", ["emp_no"], {:name=>"emp_no", :using=>:btree})
100
100
  RUBY
101
101
  }
102
+
103
+ it {
104
+ delta = client(:bulk_change => true).diff(expected_dsl)
105
+ expect(delta.differ?).to be_truthy
106
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
107
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
108
+ change_table("clubs", {:bulk => true}) do |t|
109
+ t.remove_index({:name=>"idx_name"})
110
+ end
111
+
112
+ change_table("employee_clubs", {:bulk => true}) do |t|
113
+ t.remove_index({:name=>"idx_emp_no_club_id"})
114
+ end
115
+
116
+ change_table("titles", {:bulk => true}) do |t|
117
+ t.remove_index({:name=>"emp_no"})
118
+ end
119
+ RUBY
120
+ delta.migrate
121
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.strip_heredoc.strip.each_line.select {|i| i !~ /\A\Z/ }.join
122
+ }
102
123
  end
103
124
  end
@@ -100,5 +100,32 @@ describe 'Ridgepole::Client#diff -> migrate' do
100
100
  CREATE INDEX `emp_no` USING btree ON `titles` (`emp_no`)
101
101
  SQL
102
102
  }
103
+
104
+ it {
105
+ delta = client(:bulk_change => true).diff(expected_dsl)
106
+ expect(delta.differ?).to be_truthy
107
+ sql = delta.migrate(:noop => true)
108
+ expect(subject.dump).to eq actual_dsl
109
+
110
+ sql = sql.each_line.map {|i| i.strip }.join("\n")
111
+
112
+ expect(sql).to eq <<-SQL.strip_heredoc.strip
113
+ CREATE TABLE `clubs` (`id` int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY, `name` varchar(255) DEFAULT '' NOT NULL) ENGINE=InnoDB
114
+ ALTER TABLE `clubs` ADD UNIQUE INDEX idx_name (`name`)
115
+ CREATE TABLE `departments` (`dept_no` int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY, `dept_name` varchar(40) NOT NULL) ENGINE=InnoDB
116
+ ALTER TABLE `departments` ADD UNIQUE INDEX dept_name (`dept_name`)
117
+ CREATE TABLE `dept_emp` (`emp_no` int(10) NOT NULL, `dept_no` varchar(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
118
+ ALTER TABLE `dept_emp` ADD INDEX dept_no (`dept_no`), ADD INDEX emp_no (`emp_no`)
119
+ CREATE TABLE `dept_manager` (`dept_no` varchar(4) NOT NULL, `emp_no` int(10) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
120
+ ALTER TABLE `dept_manager` ADD INDEX dept_no (`dept_no`), ADD INDEX emp_no (`emp_no`)
121
+ CREATE TABLE `employee_clubs` (`id` int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY, `emp_no` int(10) unsigned NOT NULL, `club_id` int(10) unsigned NOT NULL) ENGINE=InnoDB
122
+ ALTER TABLE `employee_clubs` ADD INDEX idx_emp_no_club_id (`emp_no`, `club_id`)
123
+ CREATE TABLE `employees` (`emp_no` int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` varchar(1) NOT NULL, `hire_date` date NOT NULL) ENGINE=InnoDB
124
+ CREATE TABLE `salaries` (`emp_no` int(10) NOT NULL, `salary` int(10) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
125
+ ALTER TABLE `salaries` ADD INDEX emp_no (`emp_no`)
126
+ CREATE TABLE `titles` (`emp_no` int(10) NOT NULL, `title` varchar(50) NOT NULL, `from_date` date NOT NULL, `to_date` date) ENGINE=InnoDB
127
+ ALTER TABLE `titles` ADD INDEX emp_no (`emp_no`)
128
+ SQL
129
+ }
103
130
  end
104
131
  end
@@ -160,6 +160,27 @@ describe 'Ridgepole::Client#diff -> migrate' do
160
160
  rename_column("employees", "gender2", "gender")
161
161
  RUBY
162
162
  }
163
+
164
+ it {
165
+ delta = client(:bulk_change => true).diff(expected_dsl)
166
+ expect(delta.differ?).to be_truthy
167
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
168
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
169
+ change_table("dept_emp", {:bulk => true}) do |t|
170
+ t.rename("from_date", "from_date2")
171
+ end
172
+
173
+ change_table("dept_manager", {:bulk => true}) do |t|
174
+ t.rename("to_date", "to_date2")
175
+ end
176
+
177
+ change_table("employees", {:bulk => true}) do |t|
178
+ t.rename("gender", "gender2")
179
+ end
180
+ RUBY
181
+ delta.migrate
182
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip.gsub(/\s*,\s*renamed_from:.*$/, '')
183
+ }
163
184
  end
164
185
 
165
186
  context 'when rename column (not found)' do
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ridgepole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-28 00:00:00.000000000 Z
11
+ date: 2014-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -131,6 +131,7 @@ files:
131
131
  - spec/migrate/check_orphan_index_spec.rb
132
132
  - spec/migrate/migrate_add_column_spec.rb
133
133
  - spec/migrate/migrate_change_column_spec.rb
134
+ - spec/migrate/migrate_change_index_spec.rb
134
135
  - spec/migrate/migrate_change_table_option_spec.rb
135
136
  - spec/migrate/migrate_create_index_spec.rb
136
137
  - spec/migrate/migrate_create_table_spec.rb
@@ -192,6 +193,7 @@ test_files:
192
193
  - spec/migrate/check_orphan_index_spec.rb
193
194
  - spec/migrate/migrate_add_column_spec.rb
194
195
  - spec/migrate/migrate_change_column_spec.rb
196
+ - spec/migrate/migrate_change_index_spec.rb
195
197
  - spec/migrate/migrate_change_table_option_spec.rb
196
198
  - spec/migrate/migrate_create_index_spec.rb
197
199
  - spec/migrate/migrate_create_table_spec.rb