ridgepole 0.4.1 → 0.4.2
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/README.md +1 -0
- data/bin/ridgepole +3 -0
- data/lib/ridgepole/delta.rb +8 -0
- data/lib/ridgepole/dsl_parser.rb +16 -0
- data/lib/ridgepole/version.rb +1 -1
- data/ridgepole.gemspec +1 -1
- data/spec/migrate/migrate_add_column2_spec.rb +118 -0
- data/spec/migrate/migrate_change_column3_spec.rb +272 -0
- data/spec/migrate/migrate_noop_spec.rb +111 -8
- metadata +9 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a09898d122a3138706ad9e835a0e0941a56749be
|
4
|
+
data.tar.gz: e0bd6aa6ba825488ef7e53fcd68db3267dcde79a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ecf91300412d185e49794b4a894180d70747783b88a641856d3af20e35b668aa24201c4a5188cbeb68e2f1c83177dccf19eddafb66a4ad61f807e5f688ac569c
|
7
|
+
data.tar.gz: 9f83de31e8549e7956b79b0c3033208354a4e823901384406ca171295f33a5ea98f8c9f4f224af917a4854ae395d05a6112d81b00aac3267b88ac6266f41bfff
|
data/README.md
CHANGED
data/bin/ridgepole
CHANGED
@@ -51,6 +51,9 @@ ARGV.options do |opt|
|
|
51
51
|
raise "Cannot use `bulk-change` in `merge`" if options[:merge]
|
52
52
|
options[:bulk_change] = true
|
53
53
|
}
|
54
|
+
opt.on('', '--default-int-limit LIMIT', Integer) {|v|
|
55
|
+
options[:default_int_limit] = v
|
56
|
+
}
|
54
57
|
opt.on('', '--pre-query QUERY') {|v| options[:pre_query] = v }
|
55
58
|
opt.on('', '--post-query QUERY') {|v| options[:post_query] = v }
|
56
59
|
opt.on('-e', '--export') { set_mode[:export] }
|
data/lib/ridgepole/delta.rb
CHANGED
@@ -153,6 +153,10 @@ create_table(#{table_name.inspect}, #{options.inspect}) do |t|
|
|
153
153
|
column_type = column_attrs.fetch(:type)
|
154
154
|
column_options = column_attrs[:options] || {}
|
155
155
|
|
156
|
+
if @options[:default_int_limit] and column_type == :integer
|
157
|
+
column_options[:limit] ||= @options[:default_int_limit]
|
158
|
+
end
|
159
|
+
|
156
160
|
buf.puts(<<-EOS)
|
157
161
|
t.#{column_type}(#{column_name.inspect}, #{column_options.inspect})
|
158
162
|
EOS
|
@@ -226,6 +230,10 @@ drop_table(#{table_name.inspect})
|
|
226
230
|
type = attrs.fetch(:type)
|
227
231
|
options = attrs[:options] || {}
|
228
232
|
|
233
|
+
if @options[:default_int_limit] and type == :integer
|
234
|
+
options[:limit] ||= @options[:default_int_limit]
|
235
|
+
end
|
236
|
+
|
229
237
|
if @options[:bulk_change]
|
230
238
|
buf.puts(<<-EOS)
|
231
239
|
t.column(#{column_name.inspect}, #{type.inspect}, #{options.inspect})
|
data/lib/ridgepole/dsl_parser.rb
CHANGED
@@ -37,6 +37,22 @@ class Ridgepole::DSLParser
|
|
37
37
|
column_names.each {|name| column(name, column_type, options) }
|
38
38
|
end
|
39
39
|
end
|
40
|
+
|
41
|
+
def timestamps(*args)
|
42
|
+
options = { :null => false }.merge(args.extract_options!)
|
43
|
+
column(:created_at, :datetime, options.dup)
|
44
|
+
column(:updated_at, :datetime, options.dup)
|
45
|
+
end
|
46
|
+
|
47
|
+
def references(*args)
|
48
|
+
options = args.extract_options!
|
49
|
+
polymorphic = options.delete(:polymorphic)
|
50
|
+
args.each do |col|
|
51
|
+
column("#{col}_id", :integer, options.dup)
|
52
|
+
column("#{col}_type", :string, polymorphic.is_a?(Hash) ? polymorphic : options.dup) unless polymorphic.nil?
|
53
|
+
end
|
54
|
+
end
|
55
|
+
alias :belongs_to :references
|
40
56
|
end
|
41
57
|
|
42
58
|
attr_reader :__definition
|
data/lib/ridgepole/version.rb
CHANGED
data/ridgepole.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ['lib']
|
20
20
|
|
21
21
|
spec.add_dependency 'activerecord'
|
22
|
-
spec.add_dependency 'activerecord-mysql-unsigned', '
|
22
|
+
spec.add_dependency 'activerecord-mysql-unsigned', '>= 0.2.0'
|
23
23
|
spec.add_development_dependency 'bundler'
|
24
24
|
spec.add_development_dependency 'rake'
|
25
25
|
spec.add_development_dependency 'rspec', '>= 3.0.0'
|
@@ -0,0 +1,118 @@
|
|
1
|
+
describe 'Ridgepole::Client#diff -> migrate' do
|
2
|
+
context 'when add column (int/noop) (1)' do
|
3
|
+
let(:actual_dsl) {
|
4
|
+
<<-RUBY
|
5
|
+
create_table "dept_emp", id: false, force: true do |t|
|
6
|
+
t.integer "emp_no", null: false
|
7
|
+
t.string "dept_no", limit: 4, null: false
|
8
|
+
t.date "from_date", null: false
|
9
|
+
t.date "to_date", null: false
|
10
|
+
end
|
11
|
+
RUBY
|
12
|
+
}
|
13
|
+
|
14
|
+
let(:expected_dsl) {
|
15
|
+
<<-RUBY
|
16
|
+
create_table "dept_emp", id: false, force: true do |t|
|
17
|
+
t.integer "emp_no", null: false
|
18
|
+
t.integer "emp_no2", 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
|
+
RUBY
|
24
|
+
}
|
25
|
+
|
26
|
+
before { subject.diff(actual_dsl).migrate }
|
27
|
+
subject { client }
|
28
|
+
|
29
|
+
it {
|
30
|
+
delta = subject.diff(expected_dsl)
|
31
|
+
expect(delta.differ?).to be_truthy
|
32
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
33
|
+
sql = delta.migrate(:noop => true)
|
34
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
35
|
+
|
36
|
+
sql = sql.each_line.map {|i| i.strip }.join("\n")
|
37
|
+
expect(sql).to eq("ALTER TABLE `dept_emp` ADD `emp_no2` int(4) NOT NULL AFTER `emp_no`")
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
context 'when add column (int/noop) (2)' do
|
42
|
+
let(:actual_dsl) {
|
43
|
+
<<-RUBY
|
44
|
+
create_table "dept_emp", id: false, force: true do |t|
|
45
|
+
t.integer "emp_no", null: false
|
46
|
+
t.string "dept_no", limit: 4, null: false
|
47
|
+
t.date "from_date", null: false
|
48
|
+
t.date "to_date", null: false
|
49
|
+
end
|
50
|
+
RUBY
|
51
|
+
}
|
52
|
+
|
53
|
+
let(:expected_dsl) {
|
54
|
+
<<-RUBY
|
55
|
+
create_table "dept_emp", id: false, force: true do |t|
|
56
|
+
t.integer "emp_no", null: false
|
57
|
+
t.integer "emp_no2", null: false
|
58
|
+
t.string "dept_no", limit: 4, null: false
|
59
|
+
t.date "from_date", null: false
|
60
|
+
t.date "to_date", null: false
|
61
|
+
end
|
62
|
+
RUBY
|
63
|
+
}
|
64
|
+
|
65
|
+
before { subject.diff(actual_dsl).migrate }
|
66
|
+
subject { client(:default_int_limit => 11) }
|
67
|
+
|
68
|
+
it {
|
69
|
+
delta = subject.diff(expected_dsl)
|
70
|
+
expect(delta.differ?).to be_truthy
|
71
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
72
|
+
sql = delta.migrate(:noop => true)
|
73
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
74
|
+
|
75
|
+
sql = sql.each_line.map {|i| i.strip }.join("\n")
|
76
|
+
expect(sql).to eq("ALTER TABLE `dept_emp` ADD `emp_no2` int(11) NOT NULL AFTER `emp_no`")
|
77
|
+
}
|
78
|
+
end
|
79
|
+
|
80
|
+
context 'when add column (int/noop) (3)' do
|
81
|
+
let(:actual_dsl) {
|
82
|
+
<<-RUBY
|
83
|
+
create_table "dept_emp", id: false, force: true do |t|
|
84
|
+
t.integer "emp_no", null: false
|
85
|
+
t.string "dept_no", limit: 4, null: false
|
86
|
+
t.date "from_date", null: false
|
87
|
+
t.date "to_date", null: false
|
88
|
+
end
|
89
|
+
RUBY
|
90
|
+
}
|
91
|
+
|
92
|
+
let(:expected_dsl) {
|
93
|
+
<<-RUBY
|
94
|
+
create_table "dept_emp", id: false, force: true do |t|
|
95
|
+
t.integer "emp_no", null: false
|
96
|
+
t.integer "emp_no2", limit: 4, null: false
|
97
|
+
t.string "dept_no", limit: 4, null: false
|
98
|
+
t.date "from_date", null: false
|
99
|
+
t.date "to_date", null: false
|
100
|
+
end
|
101
|
+
RUBY
|
102
|
+
}
|
103
|
+
|
104
|
+
before { subject.diff(actual_dsl).migrate }
|
105
|
+
subject { client(:default_int_limit => 11) }
|
106
|
+
|
107
|
+
it {
|
108
|
+
delta = subject.diff(expected_dsl)
|
109
|
+
expect(delta.differ?).to be_truthy
|
110
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
111
|
+
sql = delta.migrate(:noop => true)
|
112
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
113
|
+
|
114
|
+
sql = sql.each_line.map {|i| i.strip }.join("\n")
|
115
|
+
expect(sql).to eq("ALTER TABLE `dept_emp` ADD `emp_no2` int(4) NOT NULL AFTER `emp_no`")
|
116
|
+
}
|
117
|
+
end
|
118
|
+
end
|
@@ -0,0 +1,272 @@
|
|
1
|
+
describe 'Ridgepole::Client#diff -> migrate' do
|
2
|
+
context 'when use timestamps (no change)' do
|
3
|
+
let(:actual_dsl) {
|
4
|
+
<<-RUBY
|
5
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
6
|
+
t.date "birth_date", null: false
|
7
|
+
t.string "first_name", limit: 14, null: false
|
8
|
+
t.string "last_name", limit: 16, null: false
|
9
|
+
t.string "gender", limit: 1, null: false
|
10
|
+
t.date "hire_date", null: false
|
11
|
+
t.datetime "created_at", null: false
|
12
|
+
t.datetime "updated_at", null: false
|
13
|
+
end
|
14
|
+
RUBY
|
15
|
+
}
|
16
|
+
|
17
|
+
let(:expected_dsl) {
|
18
|
+
<<-RUBY
|
19
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
20
|
+
t.date "birth_date", null: false
|
21
|
+
t.string "first_name", limit: 14, null: false
|
22
|
+
t.string "last_name", limit: 16, null: false
|
23
|
+
t.string "gender", limit: 1, null: false
|
24
|
+
t.date "hire_date", null: false
|
25
|
+
t.timestamps
|
26
|
+
end
|
27
|
+
RUBY
|
28
|
+
}
|
29
|
+
|
30
|
+
before { subject.diff(actual_dsl).migrate }
|
31
|
+
subject { client }
|
32
|
+
|
33
|
+
it {
|
34
|
+
delta = subject.diff(expected_dsl)
|
35
|
+
expect(delta.differ?).to be_falsey
|
36
|
+
}
|
37
|
+
end
|
38
|
+
|
39
|
+
context 'when use timestamps (change)' do
|
40
|
+
let(:actual_dsl) {
|
41
|
+
<<-RUBY
|
42
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
43
|
+
t.date "birth_date", null: false
|
44
|
+
t.string "first_name", limit: 14, null: false
|
45
|
+
t.string "last_name", limit: 16, null: false
|
46
|
+
t.string "gender", limit: 1, null: false
|
47
|
+
t.date "hire_date", null: false
|
48
|
+
end
|
49
|
+
RUBY
|
50
|
+
}
|
51
|
+
|
52
|
+
let(:dsl) {
|
53
|
+
<<-RUBY
|
54
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
55
|
+
t.date "birth_date", null: false
|
56
|
+
t.string "first_name", limit: 14, null: false
|
57
|
+
t.string "last_name", limit: 16, null: false
|
58
|
+
t.string "gender", limit: 1, null: false
|
59
|
+
t.date "hire_date", null: false
|
60
|
+
t.timestamps
|
61
|
+
end
|
62
|
+
RUBY
|
63
|
+
}
|
64
|
+
|
65
|
+
let(:expected_dsl) {
|
66
|
+
<<-RUBY
|
67
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
68
|
+
t.date "birth_date", null: false
|
69
|
+
t.string "first_name", limit: 14, null: false
|
70
|
+
t.string "last_name", limit: 16, null: false
|
71
|
+
t.string "gender", limit: 1, null: false
|
72
|
+
t.date "hire_date", null: false
|
73
|
+
t.datetime "created_at", null: false
|
74
|
+
t.datetime "updated_at", null: false
|
75
|
+
end
|
76
|
+
RUBY
|
77
|
+
}
|
78
|
+
|
79
|
+
before { subject.diff(actual_dsl).migrate }
|
80
|
+
subject { client }
|
81
|
+
|
82
|
+
it {
|
83
|
+
delta = subject.diff(dsl)
|
84
|
+
expect(delta.differ?).to be_truthy
|
85
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
86
|
+
delta.migrate
|
87
|
+
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip.gsub(/(\s*,\s*unsigned: false)?\s*,\s*null: true/, '')
|
88
|
+
}
|
89
|
+
end
|
90
|
+
|
91
|
+
context 'when use references (no change)' do
|
92
|
+
let(:actual_dsl) {
|
93
|
+
<<-RUBY
|
94
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
95
|
+
t.date "birth_date", null: false
|
96
|
+
t.string "first_name", limit: 14, null: false
|
97
|
+
t.string "last_name", limit: 16, null: false
|
98
|
+
t.string "gender", limit: 1, null: false
|
99
|
+
t.date "hire_date", null: false
|
100
|
+
t.integer "products_id"
|
101
|
+
t.integer "user_id"
|
102
|
+
end
|
103
|
+
RUBY
|
104
|
+
}
|
105
|
+
|
106
|
+
let(:expected_dsl) {
|
107
|
+
<<-RUBY
|
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
|
+
t.string "last_name", limit: 16, null: false
|
112
|
+
t.string "gender", limit: 1, null: false
|
113
|
+
t.date "hire_date", null: false
|
114
|
+
t.references :products, :user
|
115
|
+
end
|
116
|
+
RUBY
|
117
|
+
}
|
118
|
+
|
119
|
+
before { subject.diff(actual_dsl).migrate }
|
120
|
+
subject { client }
|
121
|
+
|
122
|
+
it {
|
123
|
+
delta = subject.diff(expected_dsl)
|
124
|
+
expect(delta.differ?).to be_falsey
|
125
|
+
}
|
126
|
+
end
|
127
|
+
|
128
|
+
context 'when use references with polymorphic (no change)' do
|
129
|
+
let(:actual_dsl) {
|
130
|
+
<<-RUBY
|
131
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
132
|
+
t.date "birth_date", null: false
|
133
|
+
t.string "first_name", limit: 14, null: false
|
134
|
+
t.string "last_name", limit: 16, null: false
|
135
|
+
t.string "gender", limit: 1, null: false
|
136
|
+
t.date "hire_date", null: false
|
137
|
+
t.integer "products_id"
|
138
|
+
t.string "products_type"
|
139
|
+
t.integer "user_id"
|
140
|
+
t.string "user_type"
|
141
|
+
end
|
142
|
+
RUBY
|
143
|
+
}
|
144
|
+
|
145
|
+
let(:expected_dsl) {
|
146
|
+
<<-RUBY
|
147
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
148
|
+
t.date "birth_date", null: false
|
149
|
+
t.string "first_name", limit: 14, null: false
|
150
|
+
t.string "last_name", limit: 16, null: false
|
151
|
+
t.string "gender", limit: 1, null: false
|
152
|
+
t.date "hire_date", null: false
|
153
|
+
t.references :products, :user, polymorphic: true
|
154
|
+
end
|
155
|
+
RUBY
|
156
|
+
}
|
157
|
+
|
158
|
+
before { subject.diff(actual_dsl).migrate }
|
159
|
+
subject { client }
|
160
|
+
|
161
|
+
it {
|
162
|
+
delta = subject.diff(expected_dsl)
|
163
|
+
expect(delta.differ?).to be_falsey
|
164
|
+
}
|
165
|
+
end
|
166
|
+
|
167
|
+
context 'when use references (change)' do
|
168
|
+
let(:actual_dsl) {
|
169
|
+
<<-RUBY
|
170
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
171
|
+
t.date "birth_date", null: false
|
172
|
+
t.string "first_name", limit: 14, null: false
|
173
|
+
t.string "last_name", limit: 16, null: false
|
174
|
+
t.string "gender", limit: 1, null: false
|
175
|
+
t.date "hire_date", null: false
|
176
|
+
end
|
177
|
+
RUBY
|
178
|
+
}
|
179
|
+
|
180
|
+
let(:dsl) {
|
181
|
+
<<-RUBY
|
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
|
+
t.references :products, :user
|
189
|
+
end
|
190
|
+
RUBY
|
191
|
+
}
|
192
|
+
|
193
|
+
let(:expected_dsl) {
|
194
|
+
<<-RUBY
|
195
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
196
|
+
t.date "birth_date", null: false
|
197
|
+
t.string "first_name", limit: 14, null: false
|
198
|
+
t.string "last_name", limit: 16, null: false
|
199
|
+
t.string "gender", limit: 1, null: false
|
200
|
+
t.date "hire_date", null: false
|
201
|
+
t.integer "products_id"
|
202
|
+
t.integer "user_id"
|
203
|
+
end
|
204
|
+
RUBY
|
205
|
+
}
|
206
|
+
|
207
|
+
before { subject.diff(actual_dsl).migrate }
|
208
|
+
subject { client }
|
209
|
+
|
210
|
+
it {
|
211
|
+
delta = subject.diff(dsl)
|
212
|
+
expect(delta.differ?).to be_truthy
|
213
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
214
|
+
delta.migrate
|
215
|
+
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip.gsub(/(\s*,\s*unsigned: false)?\s*,\s*null: true/, '')
|
216
|
+
}
|
217
|
+
end
|
218
|
+
|
219
|
+
context 'when use references with polymorphic (change)' do
|
220
|
+
let(:actual_dsl) {
|
221
|
+
<<-RUBY
|
222
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
223
|
+
t.date "birth_date", null: false
|
224
|
+
t.string "first_name", limit: 14, null: false
|
225
|
+
t.string "last_name", limit: 16, null: false
|
226
|
+
t.string "gender", limit: 1, null: false
|
227
|
+
t.date "hire_date", null: false
|
228
|
+
end
|
229
|
+
RUBY
|
230
|
+
}
|
231
|
+
|
232
|
+
let(:dsl) {
|
233
|
+
<<-RUBY
|
234
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
235
|
+
t.date "birth_date", null: false
|
236
|
+
t.string "first_name", limit: 14, null: false
|
237
|
+
t.string "last_name", limit: 16, null: false
|
238
|
+
t.string "gender", limit: 1, null: false
|
239
|
+
t.date "hire_date", null: false
|
240
|
+
t.references :products, :user, polymorphic: true
|
241
|
+
end
|
242
|
+
RUBY
|
243
|
+
}
|
244
|
+
|
245
|
+
let(:expected_dsl) {
|
246
|
+
<<-RUBY
|
247
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
248
|
+
t.date "birth_date", null: false
|
249
|
+
t.string "first_name", limit: 14, null: false
|
250
|
+
t.string "last_name", limit: 16, null: false
|
251
|
+
t.string "gender", limit: 1, null: false
|
252
|
+
t.date "hire_date", null: false
|
253
|
+
t.integer "products_id"
|
254
|
+
t.string "products_type"
|
255
|
+
t.integer "user_id"
|
256
|
+
t.string "user_type"
|
257
|
+
end
|
258
|
+
RUBY
|
259
|
+
}
|
260
|
+
|
261
|
+
before { subject.diff(actual_dsl).migrate }
|
262
|
+
subject { client }
|
263
|
+
|
264
|
+
it {
|
265
|
+
delta = subject.diff(dsl)
|
266
|
+
expect(delta.differ?).to be_truthy
|
267
|
+
expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
|
268
|
+
delta.migrate
|
269
|
+
expect(subject.dump).to eq expected_dsl.strip_heredoc.strip.gsub(/(\s*,\s*unsigned: false)?\s*,\s*null: true/, '')
|
270
|
+
}
|
271
|
+
end
|
272
|
+
end
|
@@ -85,18 +85,18 @@ describe 'Ridgepole::Client#diff -> migrate' do
|
|
85
85
|
CREATE UNIQUE INDEX `idx_name` USING btree ON `clubs` (`name`)
|
86
86
|
CREATE TABLE `departments` (`dept_no` int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY, `dept_name` varchar(40) NOT NULL) ENGINE=InnoDB
|
87
87
|
CREATE UNIQUE INDEX `dept_name` USING btree ON `departments` (`dept_name`)
|
88
|
-
CREATE TABLE `dept_emp` (`emp_no` int(
|
88
|
+
CREATE TABLE `dept_emp` (`emp_no` int(4) NOT NULL, `dept_no` varchar(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
89
89
|
CREATE INDEX `dept_no` USING btree ON `dept_emp` (`dept_no`)
|
90
90
|
CREATE INDEX `emp_no` USING btree ON `dept_emp` (`emp_no`)
|
91
|
-
CREATE TABLE `dept_manager` (`dept_no` varchar(4) NOT NULL, `emp_no` int(
|
91
|
+
CREATE TABLE `dept_manager` (`dept_no` varchar(4) NOT NULL, `emp_no` int(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
92
92
|
CREATE INDEX `dept_no` USING btree ON `dept_manager` (`dept_no`)
|
93
93
|
CREATE INDEX `emp_no` USING btree ON `dept_manager` (`emp_no`)
|
94
94
|
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
|
95
95
|
CREATE INDEX `idx_emp_no_club_id` USING btree ON `employee_clubs` (`emp_no`, `club_id`)
|
96
96
|
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
|
97
|
-
CREATE TABLE `salaries` (`emp_no` int(
|
97
|
+
CREATE TABLE `salaries` (`emp_no` int(4) NOT NULL, `salary` int(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
98
98
|
CREATE INDEX `emp_no` USING btree ON `salaries` (`emp_no`)
|
99
|
-
CREATE TABLE `titles` (`emp_no` int(
|
99
|
+
CREATE TABLE `titles` (`emp_no` int(4) NOT NULL, `title` varchar(50) NOT NULL, `from_date` date NOT NULL, `to_date` date) ENGINE=InnoDB
|
100
100
|
CREATE INDEX `emp_no` USING btree ON `titles` (`emp_no`)
|
101
101
|
SQL
|
102
102
|
}
|
@@ -114,18 +114,121 @@ describe 'Ridgepole::Client#diff -> migrate' do
|
|
114
114
|
ALTER TABLE `clubs` ADD UNIQUE INDEX idx_name (`name`)
|
115
115
|
CREATE TABLE `departments` (`dept_no` int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY, `dept_name` varchar(40) NOT NULL) ENGINE=InnoDB
|
116
116
|
ALTER TABLE `departments` ADD UNIQUE INDEX dept_name (`dept_name`)
|
117
|
-
CREATE TABLE `dept_emp` (`emp_no` int(
|
117
|
+
CREATE TABLE `dept_emp` (`emp_no` int(4) NOT NULL, `dept_no` varchar(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
118
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(
|
119
|
+
CREATE TABLE `dept_manager` (`dept_no` varchar(4) NOT NULL, `emp_no` int(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
120
120
|
ALTER TABLE `dept_manager` ADD INDEX dept_no (`dept_no`), ADD INDEX emp_no (`emp_no`)
|
121
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
122
|
ALTER TABLE `employee_clubs` ADD INDEX idx_emp_no_club_id (`emp_no`, `club_id`)
|
123
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(
|
124
|
+
CREATE TABLE `salaries` (`emp_no` int(4) NOT NULL, `salary` int(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
125
125
|
ALTER TABLE `salaries` ADD INDEX emp_no (`emp_no`)
|
126
|
-
CREATE TABLE `titles` (`emp_no` int(
|
126
|
+
CREATE TABLE `titles` (`emp_no` int(4) NOT NULL, `title` varchar(50) NOT NULL, `from_date` date NOT NULL, `to_date` date) ENGINE=InnoDB
|
127
127
|
ALTER TABLE `titles` ADD INDEX emp_no (`emp_no`)
|
128
128
|
SQL
|
129
129
|
}
|
130
130
|
end
|
131
|
+
|
132
|
+
context 'when no operation' do
|
133
|
+
let(:actual_dsl) { '' }
|
134
|
+
let(:expected_dsl) {
|
135
|
+
<<-RUBY
|
136
|
+
create_table "clubs", force: true do |t|
|
137
|
+
t.string "name", default: "", null: false
|
138
|
+
end
|
139
|
+
|
140
|
+
add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
|
141
|
+
|
142
|
+
create_table "departments", primary_key: "dept_no", force: true do |t|
|
143
|
+
t.string "dept_name", limit: 40, null: false
|
144
|
+
end
|
145
|
+
|
146
|
+
add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
|
147
|
+
|
148
|
+
create_table "dept_emp", id: false, force: true do |t|
|
149
|
+
t.integer "emp_no", null: false
|
150
|
+
t.string "dept_no", limit: 4, null: false
|
151
|
+
t.date "from_date", null: false
|
152
|
+
t.date "to_date", null: false
|
153
|
+
end
|
154
|
+
|
155
|
+
add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
|
156
|
+
add_index "dept_emp", ["emp_no"], name: "emp_no", using: :btree
|
157
|
+
|
158
|
+
create_table "dept_manager", id: false, force: true do |t|
|
159
|
+
t.string "dept_no", limit: 4, null: false
|
160
|
+
t.integer "emp_no", limit: 4, null: false
|
161
|
+
t.date "from_date", null: false
|
162
|
+
t.date "to_date", null: false
|
163
|
+
end
|
164
|
+
|
165
|
+
add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
|
166
|
+
add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
|
167
|
+
|
168
|
+
create_table "employee_clubs", force: true do |t|
|
169
|
+
t.integer "emp_no", unsigned: true, null: false
|
170
|
+
t.integer "club_id", unsigned: true, null: false
|
171
|
+
end
|
172
|
+
|
173
|
+
add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
|
174
|
+
|
175
|
+
create_table "employees", primary_key: "emp_no", force: true do |t|
|
176
|
+
t.date "birth_date", null: false
|
177
|
+
t.string "first_name", limit: 14, null: false
|
178
|
+
t.string "last_name", limit: 16, null: false
|
179
|
+
t.string "gender", limit: 1, null: false
|
180
|
+
t.date "hire_date", null: false
|
181
|
+
end
|
182
|
+
|
183
|
+
create_table "salaries", id: false, force: true do |t|
|
184
|
+
t.integer "emp_no", null: false
|
185
|
+
t.integer "salary", null: false
|
186
|
+
t.date "from_date", null: false
|
187
|
+
t.date "to_date", null: false
|
188
|
+
end
|
189
|
+
|
190
|
+
add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
|
191
|
+
|
192
|
+
create_table "titles", id: false, force: true do |t|
|
193
|
+
t.integer "emp_no", null: false
|
194
|
+
t.string "title", limit: 50, null: false
|
195
|
+
t.date "from_date", null: false
|
196
|
+
t.date "to_date"
|
197
|
+
end
|
198
|
+
|
199
|
+
add_index "titles", ["emp_no"], name: "emp_no", using: :btree
|
200
|
+
RUBY
|
201
|
+
}
|
202
|
+
|
203
|
+
subject { client(:default_int_limit => 11) }
|
204
|
+
|
205
|
+
it {
|
206
|
+
delta = subject.diff(expected_dsl)
|
207
|
+
expect(delta.differ?).to be_truthy
|
208
|
+
sql = delta.migrate(:noop => true)
|
209
|
+
expect(subject.dump).to eq actual_dsl
|
210
|
+
|
211
|
+
sql = sql.each_line.map {|i| i.strip }.join("\n")
|
212
|
+
|
213
|
+
expect(sql).to eq <<-SQL.strip_heredoc.strip
|
214
|
+
CREATE TABLE `clubs` (`id` int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY, `name` varchar(255) DEFAULT '' NOT NULL) ENGINE=InnoDB
|
215
|
+
CREATE UNIQUE INDEX `idx_name` USING btree ON `clubs` (`name`)
|
216
|
+
CREATE TABLE `departments` (`dept_no` int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY, `dept_name` varchar(40) NOT NULL) ENGINE=InnoDB
|
217
|
+
CREATE UNIQUE INDEX `dept_name` USING btree ON `departments` (`dept_name`)
|
218
|
+
CREATE TABLE `dept_emp` (`emp_no` int(11) NOT NULL, `dept_no` varchar(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
219
|
+
CREATE INDEX `dept_no` USING btree ON `dept_emp` (`dept_no`)
|
220
|
+
CREATE INDEX `emp_no` USING btree ON `dept_emp` (`emp_no`)
|
221
|
+
CREATE TABLE `dept_manager` (`dept_no` varchar(4) NOT NULL, `emp_no` int(4) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
222
|
+
CREATE INDEX `dept_no` USING btree ON `dept_manager` (`dept_no`)
|
223
|
+
CREATE INDEX `emp_no` USING btree ON `dept_manager` (`emp_no`)
|
224
|
+
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
|
225
|
+
CREATE INDEX `idx_emp_no_club_id` USING btree ON `employee_clubs` (`emp_no`, `club_id`)
|
226
|
+
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
|
227
|
+
CREATE TABLE `salaries` (`emp_no` int(11) NOT NULL, `salary` int(11) NOT NULL, `from_date` date NOT NULL, `to_date` date NOT NULL) ENGINE=InnoDB
|
228
|
+
CREATE INDEX `emp_no` USING btree ON `salaries` (`emp_no`)
|
229
|
+
CREATE TABLE `titles` (`emp_no` int(11) NOT NULL, `title` varchar(50) NOT NULL, `from_date` date NOT NULL, `to_date` date) ENGINE=InnoDB
|
230
|
+
CREATE INDEX `emp_no` USING btree ON `titles` (`emp_no`)
|
231
|
+
SQL
|
232
|
+
}
|
233
|
+
end
|
131
234
|
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.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: activerecord-mysql-unsigned
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - '>='
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 0.
|
33
|
+
version: 0.2.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - '>='
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 0.
|
40
|
+
version: 0.2.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,8 +129,10 @@ files:
|
|
129
129
|
- spec/dump/dump_some_tables_spec.rb
|
130
130
|
- spec/dump/dump_spec.rb
|
131
131
|
- spec/migrate/check_orphan_index_spec.rb
|
132
|
+
- spec/migrate/migrate_add_column2_spec.rb
|
132
133
|
- spec/migrate/migrate_add_column_spec.rb
|
133
134
|
- spec/migrate/migrate_change_column2_spec.rb
|
135
|
+
- spec/migrate/migrate_change_column3_spec.rb
|
134
136
|
- spec/migrate/migrate_change_column_spec.rb
|
135
137
|
- spec/migrate/migrate_change_index2_spec.rb
|
136
138
|
- spec/migrate/migrate_change_index_spec.rb
|
@@ -194,8 +196,10 @@ test_files:
|
|
194
196
|
- spec/dump/dump_some_tables_spec.rb
|
195
197
|
- spec/dump/dump_spec.rb
|
196
198
|
- spec/migrate/check_orphan_index_spec.rb
|
199
|
+
- spec/migrate/migrate_add_column2_spec.rb
|
197
200
|
- spec/migrate/migrate_add_column_spec.rb
|
198
201
|
- spec/migrate/migrate_change_column2_spec.rb
|
202
|
+
- spec/migrate/migrate_change_column3_spec.rb
|
199
203
|
- spec/migrate/migrate_change_column_spec.rb
|
200
204
|
- spec/migrate/migrate_change_index2_spec.rb
|
201
205
|
- spec/migrate/migrate_change_index_spec.rb
|