ridgepole 0.6.0.beta2 → 0.6.0.beta3

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.
Files changed (84) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +5 -0
  3. data/README.md +2 -0
  4. data/bin/ridgepole +16 -16
  5. data/lib/ridgepole/client.rb +6 -9
  6. data/lib/ridgepole/default_limit.rb +26 -0
  7. data/lib/ridgepole/delta.rb +2 -8
  8. data/lib/ridgepole/diff.rb +14 -10
  9. data/lib/ridgepole/version.rb +1 -1
  10. data/lib/ridgepole.rb +2 -10
  11. data/ridgepole.gemspec +1 -0
  12. data/spec/{bigint_pk → mysql/bigint_pk}/bigint_pkspec.rb +0 -0
  13. data/spec/{cli → mysql/cli}/config_spec.rb +3 -1
  14. data/spec/{cli → mysql/cli}/ridgepole_spec.rb +3 -0
  15. data/spec/{collation → mysql/collation}/collation_spec.rb +2 -0
  16. data/spec/{diff → mysql/diff}/diff2_spec.rb +2 -0
  17. data/spec/{diff → mysql/diff}/diff_spec.rb +2 -0
  18. data/spec/{dump → mysql/dump}/dump_class_method_spec.rb +2 -0
  19. data/spec/{dump → mysql/dump}/dump_some_tables_spec.rb +2 -0
  20. data/spec/{dump → mysql/dump}/dump_spec.rb +2 -0
  21. data/spec/{dump → mysql/dump}/dump_without_table_options_spec.rb +2 -0
  22. data/spec/{migrate_0 → mysql/fk}/migrate_change_fk_spec.rb +5 -3
  23. data/spec/{migrate_0 → mysql/fk}/migrate_create_fk_spec.rb +7 -5
  24. data/spec/{migrate_0 → mysql/fk}/migrate_drop_fk_spec.rb +6 -4
  25. data/spec/{migrate → mysql/migrate}/check_orphan_index_spec.rb +2 -0
  26. data/spec/{migrate → mysql/migrate}/migrate_add_column2_spec.rb +2 -0
  27. data/spec/{migrate → mysql/migrate}/migrate_add_column_spec.rb +2 -0
  28. data/spec/{migrate → mysql/migrate}/migrate_change_column2_spec.rb +2 -0
  29. data/spec/{migrate → mysql/migrate}/migrate_change_column3_spec.rb +2 -0
  30. data/spec/mysql/migrate/migrate_change_column4_spec.rb +83 -0
  31. data/spec/{migrate → mysql/migrate}/migrate_change_column_float_spec.rb +2 -0
  32. data/spec/{migrate → mysql/migrate}/migrate_change_column_spec.rb +2 -0
  33. data/spec/{migrate → mysql/migrate}/migrate_change_index2_spec.rb +2 -0
  34. data/spec/{migrate → mysql/migrate}/migrate_change_index3_spec.rb +2 -0
  35. data/spec/{migrate → mysql/migrate}/migrate_change_index4_spec.rb +2 -0
  36. data/spec/mysql/migrate/migrate_change_index5_spec.rb +78 -0
  37. data/spec/{migrate → mysql/migrate}/migrate_change_index_spec.rb +2 -0
  38. data/spec/{migrate → mysql/migrate}/migrate_change_table_option_spec.rb +2 -0
  39. data/spec/{migrate → mysql/migrate}/migrate_create_index_spec.rb +2 -0
  40. data/spec/{migrate → mysql/migrate}/migrate_create_table_spec.rb +2 -0
  41. data/spec/{migrate → mysql/migrate}/migrate_create_table_with_options_spec.rb +2 -0
  42. data/spec/{migrate → mysql/migrate}/migrate_drop_column_and_index_2_spec.rb +2 -0
  43. data/spec/{migrate → mysql/migrate}/migrate_drop_column_and_index_spec.rb +2 -0
  44. data/spec/{migrate → mysql/migrate}/migrate_drop_column_spec.rb +2 -0
  45. data/spec/{migrate → mysql/migrate}/migrate_drop_index_spec.rb +2 -0
  46. data/spec/{migrate → mysql/migrate}/migrate_drop_table_spec.rb +2 -0
  47. data/spec/{migrate → mysql/migrate}/migrate_duplicate_index_spec.rb +2 -0
  48. data/spec/{migrate → mysql/migrate}/migrate_duplicate_table_spec.rb +2 -0
  49. data/spec/{migrate → mysql/migrate}/migrate_empty_spec.rb +2 -0
  50. data/spec/{migrate → mysql/migrate}/migrate_execute_spec.rb +2 -0
  51. data/spec/{migrate → mysql/migrate}/migrate_merge_mode_spec.rb +2 -0
  52. data/spec/{migrate → mysql/migrate}/migrate_noop_spec.rb +2 -0
  53. data/spec/{migrate → mysql/migrate}/migrate_rename_column_spec.rb +2 -0
  54. data/spec/{migrate → mysql/migrate}/migrate_rename_table_spec.rb +2 -0
  55. data/spec/{migrate → mysql/migrate}/migrate_same_default_null_spec.rb +2 -0
  56. data/spec/{migrate → mysql/migrate}/migrate_same_spec.rb +2 -0
  57. data/spec/{migrate → mysql/migrate}/migrate_script_error_spec.rb +2 -0
  58. data/spec/{migrate → mysql/migrate}/migrate_skip_rename_column_spec.rb +2 -0
  59. data/spec/{migrate → mysql/migrate}/migrate_skip_rename_table_spec.rb +2 -0
  60. data/spec/{migrate → mysql/migrate}/migrate_with_ignore_tables_spec.rb +2 -0
  61. data/spec/{migrate → mysql/migrate}/migrate_with_pre_post_query_spec.rb +2 -0
  62. data/spec/{migrate → mysql/migrate}/migrate_with_tables_spec.rb +2 -0
  63. data/spec/{ridgepole_test_database.sql → mysql/ridgepole_test_database.sql} +0 -0
  64. data/spec/{ridgepole_test_tables.sql → mysql/ridgepole_test_tables.sql} +0 -0
  65. data/spec/postgresql/diff/diff_spec.rb +153 -0
  66. data/spec/postgresql/dump/dump_spec.rb +76 -0
  67. data/spec/postgresql/fk/migrate_change_fk_spec.rb +62 -0
  68. data/spec/postgresql/fk/migrate_create_fk_spec.rb +173 -0
  69. data/spec/postgresql/fk/migrate_drop_fk_spec.rb +114 -0
  70. data/spec/postgresql/migrate/migrate_add_column_spec.rb +220 -0
  71. data/spec/postgresql/migrate/migrate_change_column_spec.rb +203 -0
  72. data/spec/postgresql/migrate/migrate_change_index_spec.rb +193 -0
  73. data/spec/postgresql/migrate/migrate_create_table_spec.rb +103 -0
  74. data/spec/postgresql/migrate/migrate_drop_column_spec.rb +185 -0
  75. data/spec/postgresql/migrate/migrate_drop_column_with_index_spec.rb +180 -0
  76. data/spec/postgresql/migrate/migrate_drop_index_spec.rb +125 -0
  77. data/spec/postgresql/migrate/migrate_drop_table_spec.rb +116 -0
  78. data/spec/postgresql/migrate/migrate_rename_column_spec.rb +179 -0
  79. data/spec/postgresql/migrate/migrate_rename_table_spec.rb +199 -0
  80. data/spec/postgresql/migrate/migrate_same_spec.rb +84 -0
  81. data/spec/postgresql/ridgepole_test_database.sql +15 -0
  82. data/spec/postgresql/ridgepole_test_tables.sql +74 -0
  83. data/spec/spec_helper.rb +63 -7
  84. metadata +159 -104
@@ -0,0 +1,203 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when change column' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "clubs", force: :cascade do |t|
7
+ t.string "name", limit: 255, default: "", null: false
8
+ end
9
+
10
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
11
+
12
+ create_table "departments", primary_key: "dept_no", force: :cascade do |t|
13
+ t.string "dept_name", limit: 40, null: false
14
+ end
15
+
16
+ create_table "dept_emp", id: false, force: :cascade do |t|
17
+ t.integer "emp_no", null: false
18
+ t.string "dept_no", limit: 4, null: false
19
+ t.date "from_date", null: false
20
+ t.date "to_date", null: false
21
+ end
22
+
23
+ add_index "dept_emp", ["dept_no"], name: "idx_dept_emp_dept_no", using: :btree
24
+ add_index "dept_emp", ["emp_no"], name: "idx_dept_emp_emp_no", using: :btree
25
+
26
+ create_table "dept_manager", id: false, force: :cascade do |t|
27
+ t.string "dept_no", limit: 4, null: false
28
+ t.integer "emp_no", null: false
29
+ t.date "from_date", null: false
30
+ t.date "to_date", null: false
31
+ end
32
+
33
+ add_index "dept_manager", ["dept_no"], name: "idx_dept_manager_dept_no", using: :btree
34
+ add_index "dept_manager", ["emp_no"], name: "idx_dept_manager_emp_no", using: :btree
35
+
36
+ create_table "employee_clubs", force: :cascade do |t|
37
+ t.integer "emp_no", null: false
38
+ t.integer "club_id", null: false
39
+ end
40
+
41
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_employee_clubs_emp_no_club_id", using: :btree
42
+
43
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
44
+ t.date "birth_date", null: false
45
+ t.string "first_name", limit: 14, null: false
46
+ t.string "last_name", limit: 16, null: false
47
+ t.date "hire_date", null: false
48
+ end
49
+
50
+ create_table "salaries", id: false, force: :cascade do |t|
51
+ t.integer "emp_no", null: false
52
+ t.integer "salary", null: false
53
+ t.date "from_date", null: false
54
+ t.date "to_date", null: false
55
+ end
56
+
57
+ add_index "salaries", ["emp_no"], name: "idx_salaries_emp_no", using: :btree
58
+
59
+ create_table "titles", id: false, force: :cascade do |t|
60
+ t.integer "emp_no", null: false
61
+ t.string "title", limit: 50, null: false
62
+ t.date "from_date", null: false
63
+ t.date "to_date"
64
+ end
65
+
66
+ add_index "titles", ["emp_no"], name: "idx_titles_emp_no", using: :btree
67
+ RUBY
68
+ }
69
+
70
+ let(:expected_dsl) {
71
+ <<-RUBY
72
+ create_table "clubs", force: :cascade do |t|
73
+ t.string "name", limit: 255, default: "", null: false
74
+ end
75
+
76
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
77
+
78
+ create_table "departments", primary_key: "dept_no", force: :cascade do |t|
79
+ t.string "dept_name", limit: 40, null: false
80
+ end
81
+
82
+ create_table "dept_emp", id: false, force: :cascade do |t|
83
+ t.integer "emp_no", null: false
84
+ t.string "dept_no", limit: 4, null: false
85
+ t.date "from_date", null: false
86
+ t.date "to_date", null: false
87
+ end
88
+
89
+ add_index "dept_emp", ["dept_no"], name: "idx_dept_emp_dept_no", using: :btree
90
+ add_index "dept_emp", ["emp_no"], name: "idx_dept_emp_emp_no", using: :btree
91
+
92
+ create_table "dept_manager", id: false, force: :cascade do |t|
93
+ t.string "dept_no", limit: 4, null: false
94
+ t.integer "emp_no", null: false
95
+ t.date "from_date", null: false
96
+ t.date "to_date", null: false
97
+ end
98
+
99
+ add_index "dept_manager", ["dept_no"], name: "idx_dept_manager_dept_no", using: :btree
100
+ add_index "dept_manager", ["emp_no"], name: "idx_dept_manager_emp_no", using: :btree
101
+
102
+ create_table "employee_clubs", force: :cascade do |t|
103
+ t.integer "emp_no", null: false
104
+ t.integer "club_id"
105
+ end
106
+
107
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_employee_clubs_emp_no_club_id", using: :btree
108
+
109
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
110
+ t.date "birth_date", null: false
111
+ t.string "first_name", limit: 14, null: false
112
+ t.string "last_name", limit: 20, default: "XXX", null: false
113
+ t.date "hire_date", null: false
114
+ end
115
+
116
+ create_table "salaries", id: false, force: :cascade do |t|
117
+ t.integer "emp_no", null: false
118
+ t.integer "salary", null: false
119
+ t.date "from_date", null: false
120
+ t.date "to_date", null: false
121
+ end
122
+
123
+ add_index "salaries", ["emp_no"], name: "idx_salaries_emp_no", using: :btree
124
+
125
+ create_table "titles", id: false, force: :cascade do |t|
126
+ t.integer "emp_no", null: false
127
+ t.string "title", limit: 50, null: false
128
+ t.date "from_date", null: false
129
+ t.date "to_date"
130
+ end
131
+
132
+ add_index "titles", ["emp_no"], name: "idx_titles_emp_no", using: :btree
133
+ RUBY
134
+ }
135
+
136
+ before { subject.diff(actual_dsl).migrate }
137
+ subject { client }
138
+
139
+ it {
140
+ delta = subject.diff(expected_dsl)
141
+ expect(delta.differ?).to be_truthy
142
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
143
+ delta.migrate
144
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip.gsub(/(\s*,\s*unsigned: false)?\s*,\s*null: true/, '')
145
+ }
146
+
147
+ it {
148
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, enable_mysql_unsigned: true)
149
+ expect(delta.differ?).to be_truthy
150
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
151
+ change_column("employee_clubs", "club_id", :integer, {:null=>false})
152
+
153
+ change_column("employees", "last_name", :string, {:limit=>16, :null=>false})
154
+ RUBY
155
+ }
156
+
157
+ it {
158
+ delta = client(:bulk_change => true).diff(expected_dsl)
159
+ expect(delta.differ?).to be_truthy
160
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
161
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
162
+ change_table("employee_clubs", {:bulk => true}) do |t|
163
+ t.change("club_id", :integer, {:null=>true, :default=>nil})
164
+ end
165
+
166
+ change_table("employees", {:bulk => true}) do |t|
167
+ t.change("last_name", :string, {:limit=>20, :default=>"XXX", :null=>false})
168
+ end
169
+ RUBY
170
+ delta.migrate
171
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip.gsub(/(\s*,\s*unsigned: false)?\s*,\s*null: true/, '')
172
+ }
173
+ end
174
+
175
+ context 'when string/text without limit (no change)' do
176
+ let(:actual_dsl) {
177
+ <<-RUBY
178
+ create_table "clubs", force: :cascade do |t|
179
+ t.string "name", default: "", null: false
180
+ t.text "desc"
181
+ end
182
+ RUBY
183
+ }
184
+
185
+ let(:expected_dsl) {
186
+ <<-RUBY
187
+ create_table "clubs", force: :cascade do |t|
188
+ t.string "name", default: "", null: false
189
+ t.text "desc"
190
+ end
191
+ RUBY
192
+ }
193
+
194
+ before { subject.diff(actual_dsl).migrate }
195
+ subject { client }
196
+
197
+ it {
198
+ delta = subject.diff(expected_dsl)
199
+ expect(delta.differ?).to be_falsey
200
+ }
201
+ end
202
+ end
203
+ end
@@ -0,0 +1,193 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when change index' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "clubs", force: :cascade do |t|
7
+ t.string "name", limit: 255, default: "", null: false
8
+ end
9
+
10
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
11
+
12
+ create_table "departments", primary_key: "dept_no", force: :cascade do |t|
13
+ t.string "dept_name", limit: 40, null: false
14
+ end
15
+
16
+ add_index "departments", ["dept_name"], name: "idx_dept_name", unique: true, using: :btree
17
+
18
+ create_table "dept_emp", id: false, force: :cascade do |t|
19
+ t.integer "emp_no", null: false
20
+ t.string "dept_no", limit: 4, null: false
21
+ t.date "from_date", null: false
22
+ t.date "to_date", null: false
23
+ end
24
+
25
+ add_index "dept_emp", ["dept_no"], name: "idx_dept_emp_dept_no", using: :btree
26
+ add_index "dept_emp", ["emp_no"], name: "idx_dept_emp_emp_no", using: :btree
27
+
28
+ create_table "dept_manager", id: false, force: :cascade do |t|
29
+ t.string "dept_no", limit: 4, null: false
30
+ t.integer "emp_no", null: false
31
+ t.date "from_date", null: false
32
+ t.date "to_date", null: false
33
+ end
34
+
35
+ add_index "dept_manager", ["dept_no"], name: "idx_dept_manager_dept_no", using: :btree
36
+ add_index "dept_manager", ["emp_no"], name: "idx_dept_manager_emp_no", using: :btree
37
+
38
+ create_table "employee_clubs", force: :cascade do |t|
39
+ t.integer "emp_no", null: false
40
+ t.integer "club_id", null: false
41
+ end
42
+
43
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_employee_clubs_emp_no_club_id", using: :btree
44
+
45
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
46
+ t.date "birth_date", null: false
47
+ t.string "first_name", limit: 14, null: false
48
+ t.string "last_name", limit: 16, null: false
49
+ t.date "hire_date", null: false
50
+ end
51
+
52
+ create_table "salaries", id: false, force: :cascade 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: "idx_salaries_emp_no", using: :btree
60
+
61
+ create_table "titles", id: false, force: :cascade 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: "idx_titles_emp_no", using: :btree
69
+ RUBY
70
+ }
71
+
72
+ let(:expected_dsl) {
73
+ <<-RUBY
74
+ create_table "clubs", force: :cascade do |t|
75
+ t.string "name", limit: 255, 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: :cascade do |t|
81
+ t.string "dept_name", limit: 40, null: false
82
+ end
83
+
84
+ add_index "departments", ["dept_name"], name: "idx_dept_name", unique: true, using: :btree
85
+
86
+ create_table "dept_emp", id: false, force: :cascade 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: "idx_dept_emp_dept_no", using: :btree
94
+ add_index "dept_emp", ["from_date"], name: "idx_dept_emp_emp_no", using: :btree
95
+
96
+ create_table "dept_manager", id: false, force: :cascade 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: "idx_dept_manager_dept_no", using: :btree
104
+ add_index "dept_manager", ["from_date"], name: "idx_dept_manager_emp_no", using: :btree
105
+
106
+ create_table "employee_clubs", force: :cascade do |t|
107
+ t.integer "emp_no", null: false
108
+ t.integer "club_id", null: false
109
+ end
110
+
111
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_employee_clubs_emp_no_club_id", using: :btree
112
+
113
+ create_table "employees", primary_key: "emp_no", force: :cascade 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.date "hire_date", null: false
118
+ end
119
+
120
+ create_table "salaries", id: false, force: :cascade do |t|
121
+ t.integer "emp_no", null: false
122
+ t.integer "salary", null: false
123
+ t.date "from_date", null: false
124
+ t.date "to_date", null: false
125
+ end
126
+
127
+ add_index "salaries", ["from_date"], name: "idx_salaries_emp_no", using: :btree
128
+
129
+ create_table "titles", id: false, force: :cascade do |t|
130
+ t.integer "emp_no", null: false
131
+ t.string "title", limit: 50, null: false
132
+ t.date "from_date", null: false
133
+ t.date "to_date"
134
+ end
135
+
136
+ add_index "titles", ["emp_no"], name: "idx_titles_emp_no", using: :btree
137
+ RUBY
138
+ }
139
+
140
+ before { subject.diff(actual_dsl).migrate }
141
+ subject { client }
142
+
143
+ it {
144
+ delta = subject.diff(expected_dsl)
145
+ expect(delta.differ?).to be_truthy
146
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
147
+ delta.migrate
148
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
149
+ }
150
+
151
+ it {
152
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
153
+ expect(delta.differ?).to be_truthy
154
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
155
+ remove_index("dept_emp", {:name=>"idx_dept_emp_emp_no"})
156
+ add_index("dept_emp", ["emp_no"], {:name=>"idx_dept_emp_emp_no", :using=>:btree, :unique=>false})
157
+
158
+ remove_index("dept_manager", {:name=>"idx_dept_manager_emp_no"})
159
+ add_index("dept_manager", ["emp_no"], {:name=>"idx_dept_manager_emp_no", :using=>:btree, :unique=>false})
160
+
161
+ remove_index("salaries", {:name=>"idx_salaries_emp_no"})
162
+ add_index("salaries", ["emp_no"], {:name=>"idx_salaries_emp_no", :using=>:btree, :unique=>false})
163
+ RUBY
164
+ }
165
+
166
+ it {
167
+ delta = client(:bulk_change => true).diff(expected_dsl)
168
+ expect(delta.differ?).to be_truthy
169
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
170
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
171
+ change_table("dept_emp", {:bulk => true}) do |t|
172
+ t.remove_index({:name=>"idx_dept_emp_emp_no"})
173
+ t.index(["from_date"], {:name=>"idx_dept_emp_emp_no", :using=>:btree, :unique=>false})
174
+ end
175
+
176
+ change_table("dept_manager", {:bulk => true}) do |t|
177
+ t.remove_index({:name=>"idx_dept_manager_emp_no"})
178
+ t.index(["from_date"], {:name=>"idx_dept_manager_emp_no", :using=>:btree, :unique=>false})
179
+ end
180
+
181
+ change_table("salaries", {:bulk => true}) do |t|
182
+ t.remove_index({:name=>"idx_salaries_emp_no"})
183
+ t.index(["from_date"], {:name=>"idx_salaries_emp_no", :using=>:btree, :unique=>false})
184
+ end
185
+ RUBY
186
+
187
+ expect {
188
+ delta.migrate
189
+ }.to_not raise_error
190
+ }
191
+ end
192
+ end
193
+ end
@@ -0,0 +1,103 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when create table' do
4
+ let(:dsl) {
5
+ <<-RUBY
6
+ create_table "clubs", force: :cascade do |t|
7
+ t.string "name", limit: 255, default: "", null: false
8
+ end
9
+
10
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
11
+
12
+ create_table "departments", primary_key: "dept_no", force: :cascade do |t|
13
+ t.string "dept_name", limit: 40, null: false
14
+ end
15
+
16
+ create_table "dept_emp", id: false, force: :cascade do |t|
17
+ t.integer "emp_no", null: false
18
+ t.string "dept_no", limit: 4, null: false
19
+ t.date "from_date", null: false
20
+ t.date "to_date", null: false
21
+ end
22
+
23
+ add_index "dept_emp", ["dept_no"], name: "idx_dept_emp_dept_no", using: :btree
24
+ add_index "dept_emp", ["emp_no"], name: "idx_dept_emp_emp_no", using: :btree
25
+
26
+ create_table "dept_manager", id: false, force: :cascade do |t|
27
+ t.string "dept_no", limit: 4, null: false
28
+ t.integer "emp_no", null: false
29
+ t.date "from_date", null: false
30
+ t.date "to_date", null: false
31
+ end
32
+
33
+ add_index "dept_manager", ["dept_no"], name: "idx_dept_manager_dept_no", using: :btree
34
+ add_index "dept_manager", ["emp_no"], name: "idx_dept_manager_emp_no", using: :btree
35
+
36
+ create_table "employee_clubs", force: :cascade do |t|
37
+ t.integer "emp_no", null: false
38
+ t.integer "club_id", null: false
39
+ end
40
+
41
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_employee_clubs_emp_no_club_id", using: :btree
42
+
43
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
44
+ t.date "birth_date", null: false
45
+ t.string "first_name", limit: 14, null: false
46
+ t.string "last_name", limit: 16, null: false
47
+ t.date "hire_date", null: false
48
+ end
49
+
50
+ create_table "salaries", id: false, force: :cascade do |t|
51
+ t.integer "emp_no", null: false
52
+ t.integer "salary", null: false
53
+ t.date "from_date", null: false
54
+ t.date "to_date", null: false
55
+ end
56
+
57
+ add_index "salaries", ["emp_no"], name: "idx_salaries_emp_no", using: :btree
58
+
59
+ create_table "titles", id: false, force: :cascade do |t|
60
+ t.integer "emp_no", null: false
61
+ t.string "title", limit: 50, null: false
62
+ t.date "from_date", null: false
63
+ t.date "to_date"
64
+ end
65
+
66
+ add_index "titles", ["emp_no"], name: "idx_titles_emp_no", using: :btree
67
+ RUBY
68
+ }
69
+
70
+ let(:actual_dsl) {
71
+ dsl.delete_create_table('clubs')
72
+ .delete_create_table('employee_clubs')
73
+ .delete_create_table('employees')
74
+ }
75
+
76
+ let(:expected_dsl) { dsl }
77
+
78
+ before { subject.diff(actual_dsl).migrate }
79
+ subject { client }
80
+
81
+ it {
82
+ delta = subject.diff(expected_dsl)
83
+ expect(delta.differ?).to be_truthy
84
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
85
+ delta.migrate
86
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
87
+ }
88
+
89
+ it {
90
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
91
+ expect(delta.differ?).to be_truthy
92
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
93
+ drop_table("clubs")
94
+
95
+ drop_table("employee_clubs")
96
+
97
+ drop_table("employees")
98
+ RUBY
99
+ }
100
+ end
101
+ end
102
+ end
103
+
@@ -0,0 +1,185 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when drop column' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "clubs", force: :cascade do |t|
7
+ t.string "name", limit: 255, default: "", null: false
8
+ end
9
+
10
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
11
+
12
+ create_table "departments", primary_key: "dept_no", force: :cascade do |t|
13
+ t.string "dept_name", limit: 40, null: false
14
+ end
15
+
16
+ add_index "departments", ["dept_name"], name: "idx_dept_name", unique: true, using: :btree
17
+
18
+ create_table "dept_emp", id: false, force: :cascade do |t|
19
+ t.integer "emp_no", null: false
20
+ t.string "dept_no", limit: 4, null: false
21
+ t.date "from_date", null: false
22
+ t.date "to_date", null: false
23
+ end
24
+
25
+ add_index "dept_emp", ["dept_no"], name: "idx_dept_emp_dept_no", using: :btree
26
+ add_index "dept_emp", ["emp_no"], name: "idx_dept_emp_emp_no", using: :btree
27
+
28
+ create_table "dept_manager", id: false, force: :cascade do |t|
29
+ t.string "dept_no", limit: 4, null: false
30
+ t.integer "emp_no", null: false
31
+ t.date "from_date", null: false
32
+ t.date "to_date", null: false
33
+ end
34
+
35
+ add_index "dept_manager", ["dept_no"], name: "idx_dept_manager_dept_no", using: :btree
36
+ add_index "dept_manager", ["emp_no"], name: "idx_dept_manager_emp_no", using: :btree
37
+
38
+ create_table "employee_clubs", force: :cascade do |t|
39
+ t.integer "emp_no", null: false
40
+ t.integer "club_id", null: false
41
+ end
42
+
43
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_employee_clubs_emp_no_club_id", using: :btree
44
+
45
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
46
+ t.date "birth_date", null: false
47
+ t.string "first_name", limit: 14, null: false
48
+ t.string "last_name", limit: 16, null: false
49
+ t.date "hire_date", null: false
50
+ end
51
+
52
+ create_table "salaries", id: false, force: :cascade 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: "idx_salaries_emp_no", using: :btree
60
+
61
+ create_table "titles", id: false, force: :cascade 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: "idx_titles_emp_no", using: :btree
69
+ RUBY
70
+ }
71
+
72
+ let(:expected_dsl) {
73
+ <<-RUBY
74
+ create_table "clubs", force: :cascade do |t|
75
+ t.string "name", limit: 255, 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: :cascade do |t|
81
+ t.string "dept_name", limit: 40, null: false
82
+ end
83
+
84
+ add_index "departments", ["dept_name"], name: "idx_dept_name", unique: true, using: :btree
85
+
86
+ create_table "dept_emp", id: false, force: :cascade do |t|
87
+ t.integer "emp_no", null: false
88
+ t.string "dept_no", limit: 4, null: false
89
+ end
90
+
91
+ add_index "dept_emp", ["dept_no"], name: "idx_dept_emp_dept_no", using: :btree
92
+ add_index "dept_emp", ["emp_no"], name: "idx_dept_emp_emp_no", using: :btree
93
+
94
+ create_table "dept_manager", id: false, force: :cascade do |t|
95
+ t.string "dept_no", limit: 4, null: false
96
+ t.integer "emp_no", null: false
97
+ end
98
+
99
+ add_index "dept_manager", ["dept_no"], name: "idx_dept_manager_dept_no", using: :btree
100
+ add_index "dept_manager", ["emp_no"], name: "idx_dept_manager_emp_no", using: :btree
101
+
102
+ create_table "employee_clubs", force: :cascade do |t|
103
+ t.integer "emp_no", null: false
104
+ t.integer "club_id", null: false
105
+ end
106
+
107
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_employee_clubs_emp_no_club_id", using: :btree
108
+
109
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
110
+ t.date "birth_date", null: false
111
+ t.string "first_name", limit: 14, null: false
112
+ end
113
+
114
+ create_table "salaries", id: false, force: :cascade do |t|
115
+ t.integer "emp_no", null: false
116
+ t.integer "salary", null: false
117
+ t.date "from_date", null: false
118
+ t.date "to_date", null: false
119
+ end
120
+
121
+ add_index "salaries", ["emp_no"], name: "idx_salaries_emp_no", using: :btree
122
+
123
+ create_table "titles", id: false, force: :cascade do |t|
124
+ t.integer "emp_no", null: false
125
+ t.string "title", limit: 50, null: false
126
+ t.date "from_date", null: false
127
+ t.date "to_date"
128
+ end
129
+
130
+ add_index "titles", ["emp_no"], name: "idx_titles_emp_no", using: :btree
131
+ RUBY
132
+ }
133
+
134
+ before { subject.diff(actual_dsl).migrate }
135
+ subject { client }
136
+
137
+ it {
138
+ delta = subject.diff(expected_dsl)
139
+ expect(delta.differ?).to be_truthy
140
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
141
+ delta.migrate
142
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
143
+ }
144
+
145
+ it {
146
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
147
+ expect(delta.differ?).to be_truthy
148
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
149
+ add_column("dept_emp", "from_date", :date, {:null=>false, :after=>"dept_no"})
150
+ add_column("dept_emp", "to_date", :date, {:null=>false, :after=>"from_date"})
151
+
152
+ add_column("dept_manager", "from_date", :date, {:null=>false, :after=>"emp_no"})
153
+ add_column("dept_manager", "to_date", :date, {:null=>false, :after=>"from_date"})
154
+
155
+ add_column("employees", "last_name", :string, {:limit=>16, :null=>false, :after=>"first_name"})
156
+ add_column("employees", "hire_date", :date, {:null=>false, :after=>"last_name"})
157
+ RUBY
158
+ }
159
+
160
+ it {
161
+ delta = client(:bulk_change => true).diff(expected_dsl)
162
+ expect(delta.differ?).to be_truthy
163
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
164
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
165
+ change_table("dept_emp", {:bulk => true}) do |t|
166
+ t.remove("from_date")
167
+ t.remove("to_date")
168
+ end
169
+
170
+ change_table("dept_manager", {:bulk => true}) do |t|
171
+ t.remove("from_date")
172
+ t.remove("to_date")
173
+ end
174
+
175
+ change_table("employees", {:bulk => true}) do |t|
176
+ t.remove("last_name")
177
+ t.remove("hire_date")
178
+ end
179
+ RUBY
180
+ delta.migrate
181
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
182
+ }
183
+ end
184
+ end
185
+ end