ridgepole 0.2.9 → 0.3.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 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