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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ab7f38bb9a9792744ec9d0be95c424623bebc485
4
- data.tar.gz: b0c4a492af6b717721f638151ff2551179db198c
3
+ metadata.gz: 7f20d24b4955d4b21970f0795d9202541c64387b
4
+ data.tar.gz: ca0f973959d8c8a4580282240938ff40b0c8f064
5
5
  SHA512:
6
- metadata.gz: 0d98972b1adb24a14092700c87640bcdeb392807a1040f15ca919c4516366f49a93db7ba1c24aab4c8b44e4fb7e812cbdce672bc2cd3ae52dc9dc7e8732ce33f
7
- data.tar.gz: d081472f63fcd0e1fec7adf35336965f1e8946edb41f524423c47261b84b2f57ea283e6d43cb0ce1753f98f041b740aa4c531b17b65aa3a32c98cfc08cdc2679
6
+ metadata.gz: a1956f2233beaf59f6d664fba626b79faa3594ef1fbc565e9f3ecd33c538a5801976bca703f8c5c8c50c94894e07073269a1e477ba1aaf084d0e0a90aeac2edd
7
+ data.tar.gz: bfbd7ec8f1edd90ff24ce5f3c8cee7860b60a262f020c2b98ee1dfc4eba6bb98743fbd8397b73706b087d11dbcfdfe964ed3bced3772bfb20b0ba0d95f73d4fc
@@ -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)
@@ -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
- indices_delta[:delete] ||= {}
179
- indices_delta[:delete][index_name] = from_attrs
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
- indices_delta[:delete] ||= {}
191
- indices_delta[:delete][index_name] = from_attrs
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
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.2.9'
2
+ VERSION = '0.3.0'
3
3
  end
@@ -1,5 +1,5 @@
1
1
  describe 'Ridgepole::Client#diff -> migrate' do
2
- context 'when database is empty' do
2
+ context 'when there is an index of orphans' do
3
3
  let(:actual_dsl) { '' }
4
4
  let(:expected_dsl) {
5
5
  <<-RUBY
@@ -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
@@ -1,5 +1,5 @@
1
1
  describe 'Ridgepole::Client#diff -> migrate' do
2
- context 'when database is empty' do
2
+ context 'when no operation' do
3
3
  let(:actual_dsl) { '' }
4
4
  let(:expected_dsl) {
5
5
  <<-RUBY
@@ -1,5 +1,5 @@
1
1
  describe 'Ridgepole::Client#diff -> migrate' do
2
- context 'when database is empty' do
2
+ context 'when there is an error in the script' do
3
3
  let(:actual_dsl) { '' }
4
4
  let(:expected_dsl) {
5
5
  <<-RUBY
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.2.9
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