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,62 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when change fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "parent", force: :cascade do |t|
7
+ end
8
+
9
+ create_table "child", force: :cascade do |t|
10
+ t.integer "parent_id"
11
+ end
12
+
13
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
14
+
15
+ add_foreign_key "child", "parent", name: "child_ibfk_1", on_delete: :cascade
16
+ RUBY
17
+ }
18
+
19
+ let(:sorted_actual_dsl) {
20
+ <<-RUBY
21
+ create_table "child", force: :cascade do |t|
22
+ t.integer "parent_id"
23
+ end
24
+
25
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
26
+
27
+ create_table "parent", force: :cascade do |t|
28
+ end
29
+
30
+ add_foreign_key "child", "parent", name: "child_ibfk_1", on_delete: :cascade
31
+ RUBY
32
+ }
33
+
34
+ let(:expected_dsl) {
35
+ <<-RUBY
36
+ create_table "child", force: :cascade do |t|
37
+ t.integer "parent_id"
38
+ end
39
+
40
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
41
+
42
+ create_table "parent", force: :cascade do |t|
43
+ end
44
+
45
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
46
+ RUBY
47
+ }
48
+
49
+ before { subject.diff(actual_dsl).migrate }
50
+
51
+ subject { client(enable_foreigner: true) }
52
+
53
+ it {
54
+ delta = subject.diff(expected_dsl)
55
+ expect(delta.differ?).to be_truthy
56
+ expect(subject.dump.delete_empty_lines).to eq sorted_actual_dsl.strip_heredoc.strip.delete_empty_lines
57
+ delta.migrate
58
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
59
+ }
60
+ end
61
+ end
62
+ end
@@ -0,0 +1,173 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when create fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "child", force: :cascade do |t|
7
+ t.integer "parent_id"
8
+ end
9
+
10
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
11
+
12
+ create_table "parent", force: :cascade do |t|
13
+ end
14
+ RUBY
15
+ }
16
+
17
+ let(:expected_dsl) {
18
+ actual_dsl + (<<-RUBY)
19
+
20
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
21
+ RUBY
22
+ }
23
+
24
+ before { subject.diff(actual_dsl).migrate }
25
+ subject { client }
26
+
27
+ it {
28
+ delta = subject.diff(expected_dsl)
29
+ expect(delta.differ?).to be_truthy
30
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
31
+ delta.migrate
32
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
33
+ }
34
+
35
+ it {
36
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4)
37
+ expect(delta.differ?).to be_truthy
38
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
39
+ remove_foreign_key("child", {:name=>"child_ibfk_1"})
40
+ RUBY
41
+ }
42
+
43
+ it {
44
+ delta = client(bulk_change: true).diff(expected_dsl)
45
+ expect(delta.differ?).to be_truthy
46
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
47
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
48
+ add_foreign_key("child", "parent", {:name=>"child_ibfk_1"})
49
+ RUBY
50
+ delta.migrate
51
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
52
+ }
53
+ end
54
+
55
+ context 'when create fk when create table' do
56
+ let(:dsl) {
57
+ <<-RUBY
58
+ # Define parent before child
59
+ create_table "parent", force: :cascade do |t|
60
+ end
61
+
62
+ create_table "child", force: :cascade do |t|
63
+ t.integer "parent_id", unsigned: true
64
+ end
65
+
66
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
67
+
68
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
69
+ RUBY
70
+ }
71
+
72
+ let(:sorted_dsl) {
73
+ <<-RUBY
74
+ create_table "child", force: :cascade do |t|
75
+ t.integer "parent_id"
76
+ end
77
+
78
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
79
+
80
+ create_table "parent", force: :cascade do |t|
81
+ end
82
+
83
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
84
+ RUBY
85
+ }
86
+
87
+ before { client.diff('').migrate }
88
+ subject { client }
89
+
90
+ it {
91
+ delta = subject.diff(dsl)
92
+ expect(delta.differ?).to be_truthy
93
+ expect(subject.dump.strip).to eq ''
94
+ delta.migrate
95
+ expect(subject.dump.delete_empty_lines).to eq sorted_dsl.strip_heredoc.strip.delete_empty_lines
96
+ }
97
+ end
98
+
99
+ context 'already defined' do
100
+ let(:dsl) {
101
+ <<-RUBY
102
+ # Define parent before child
103
+ create_table "parent", force: :cascade do |t|
104
+ end
105
+
106
+ create_table "child", force: :cascade do |t|
107
+ t.integer "parent_id", unsigned: true
108
+ end
109
+
110
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
111
+
112
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
113
+
114
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
115
+ RUBY
116
+ }
117
+
118
+ subject { client }
119
+
120
+ it {
121
+ expect {
122
+ subject.diff(dsl)
123
+ }.to raise_error('Foreign Key `child(child_ibfk_1)` already defined')
124
+ }
125
+ end
126
+
127
+ context 'no name' do
128
+ let(:dsl) {
129
+ <<-RUBY
130
+ # Define parent before child
131
+ create_table "parent", force: :cascade do |t|
132
+ end
133
+
134
+ create_table "child", force: :cascade do |t|
135
+ t.integer "parent_id", unsigned: true
136
+ end
137
+
138
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
139
+
140
+ add_foreign_key "child", "parent"
141
+ RUBY
142
+ }
143
+
144
+ subject { client }
145
+
146
+ it {
147
+ expect {
148
+ subject.diff(dsl)
149
+ }.to raise_error('Foreign key name in `child` is undefined')
150
+ }
151
+ end
152
+
153
+ context 'orphan fk' do
154
+ let(:dsl) {
155
+ <<-RUBY
156
+ # Define parent before child
157
+ create_table "parent", force: :cascade do |t|
158
+ end
159
+
160
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
161
+ RUBY
162
+ }
163
+
164
+ subject { client }
165
+
166
+ it {
167
+ expect {
168
+ subject.diff(dsl)
169
+ }.to raise_error('Table `child` to create the foreign key is not defined: child_ibfk_1')
170
+ }
171
+ end
172
+ end
173
+ end
@@ -0,0 +1,114 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when drop fk' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "parent", force: :cascade do |t|
7
+ end
8
+
9
+ create_table "child", force: :cascade do |t|
10
+ t.integer "parent_id"
11
+ end
12
+
13
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
14
+
15
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
16
+ RUBY
17
+ }
18
+
19
+ let(:sorted_actual_dsl) {
20
+ expected_dsl + (<<-RUBY)
21
+
22
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
23
+ RUBY
24
+ }
25
+
26
+ let(:expected_dsl) {
27
+ <<-RUBY
28
+ create_table "child", force: :cascade do |t|
29
+ t.integer "parent_id"
30
+ end
31
+
32
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
33
+
34
+ create_table "parent", force: :cascade do |t|
35
+ end
36
+ RUBY
37
+ }
38
+
39
+ before { subject.diff(actual_dsl).migrate }
40
+ subject { client }
41
+
42
+ it {
43
+ delta = subject.diff(expected_dsl)
44
+ expect(delta.differ?).to be_truthy
45
+ expect(subject.dump).to eq sorted_actual_dsl.strip_heredoc.strip
46
+ delta.migrate
47
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.strip_heredoc.strip.each_line.select {|i| i !~ /\A\Z/ }.join
48
+ }
49
+
50
+ it {
51
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true, default_int_limit: 4)
52
+ expect(delta.differ?).to be_truthy
53
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
54
+ add_foreign_key("child", "parent", {:name=>"child_ibfk_1"})
55
+ RUBY
56
+ }
57
+
58
+ it {
59
+ delta = client(bulk_change: true).diff(expected_dsl)
60
+ expect(delta.differ?).to be_truthy
61
+ expect(subject.dump).to eq sorted_actual_dsl.strip_heredoc.strip
62
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
63
+ remove_foreign_key("child", {:name=>"child_ibfk_1"})
64
+ RUBY
65
+ delta.migrate
66
+ expect(subject.dump.each_line.select {|i| i !~ /\A\Z/ }.join).to eq expected_dsl.strip_heredoc.strip.each_line.select {|i| i !~ /\A\Z/ }.join
67
+ }
68
+ end
69
+
70
+ context 'when drop fk when drop table' do
71
+ let(:dsl) {
72
+ <<-RUBY
73
+ create_table "parent", force: :cascade do |t|
74
+ end
75
+
76
+
77
+ create_table "child", force: :cascade do |t|
78
+ t.integer "parent_id", unsigned: true
79
+ end
80
+
81
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
82
+
83
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
84
+ RUBY
85
+ }
86
+
87
+ let(:sorted_dsl) {
88
+ <<-RUBY
89
+ create_table "child", force: :cascade do |t|
90
+ t.integer "parent_id"
91
+ end
92
+
93
+ add_index "child", ["parent_id"], name: "par_id", using: :btree
94
+
95
+ create_table "parent", force: :cascade do |t|
96
+ end
97
+
98
+ add_foreign_key "child", "parent", name: "child_ibfk_1"
99
+ RUBY
100
+ }
101
+
102
+ before { subject.diff(dsl).migrate }
103
+ subject { client }
104
+
105
+ it {
106
+ delta = subject.diff('')
107
+ expect(delta.differ?).to be_truthy
108
+ expect(subject.dump).to eq sorted_dsl.strip_heredoc.strip
109
+ delta.migrate
110
+ expect(subject.dump.strip).to eq ''
111
+ }
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,220 @@
1
+ if postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when add 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", null: false
105
+ t.string "any_col", limit: 255, null: false
106
+ end
107
+
108
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_employee_clubs_emp_no_club_id", using: :btree
109
+
110
+ create_table "employees", primary_key: "emp_no", force: :cascade do |t|
111
+ t.date "birth_date", null: false
112
+ t.string "first_name", limit: 14, null: false
113
+ t.string "last_name", limit: 16, null: false
114
+ t.date "hire_date", null: false
115
+ t.integer "age", null: false
116
+ t.date "updated_at"
117
+ end
118
+
119
+ create_table "salaries", id: false, force: :cascade do |t|
120
+ t.integer "emp_no", null: false
121
+ t.integer "salary", null: false
122
+ t.date "from_date", null: false
123
+ t.date "to_date", null: false
124
+ end
125
+
126
+ add_index "salaries", ["emp_no"], name: "idx_salaries_emp_no", using: :btree
127
+
128
+ create_table "titles", id: false, force: :cascade do |t|
129
+ t.integer "emp_no", null: false
130
+ t.string "title", limit: 50, null: false
131
+ t.date "from_date", null: false
132
+ t.date "to_date"
133
+ end
134
+
135
+ add_index "titles", ["emp_no"], name: "idx_titles_emp_no", using: :btree
136
+ RUBY
137
+ }
138
+
139
+ before { subject.diff(actual_dsl).migrate }
140
+ subject { client }
141
+
142
+ it {
143
+ delta = subject.diff(expected_dsl)
144
+ expect(delta.differ?).to be_truthy
145
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
146
+ delta.migrate
147
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
148
+ }
149
+
150
+ it {
151
+ delta = Ridgepole::Client.diff(actual_dsl, expected_dsl, reverse: true)
152
+ expect(delta.differ?).to be_truthy
153
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
154
+ remove_column("employee_clubs", "any_col")
155
+
156
+ remove_column("employees", "age")
157
+ remove_column("employees", "updated_at")
158
+ RUBY
159
+ }
160
+
161
+ it {
162
+ delta = client(:bulk_change => true).diff(expected_dsl)
163
+ expect(delta.differ?).to be_truthy
164
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
165
+ expect(delta.script).to eq <<-RUBY.strip_heredoc.strip
166
+ change_table("employee_clubs", {:bulk => true}) do |t|
167
+ t.column("any_col", :string, {:limit=>255, :null=>false, :after=>"club_id"})
168
+ end
169
+
170
+ change_table("employees", {:bulk => true}) do |t|
171
+ t.column("age", :integer, {:null=>false, :after=>"hire_date"})
172
+ t.column("updated_at", :date, {:after=>"age"})
173
+ end
174
+ RUBY
175
+ delta.migrate
176
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
177
+ }
178
+ end
179
+
180
+ context 'when add column (int/noop)' do
181
+ let(:actual_dsl) {
182
+ <<-RUBY
183
+ create_table "dept_emp", id: false, force: :cascade do |t|
184
+ t.integer "emp_no", null: false
185
+ t.string "dept_no", limit: 4, null: false
186
+ t.date "from_date", null: false
187
+ t.date "to_date", null: false
188
+ end
189
+ RUBY
190
+ }
191
+
192
+ let(:expected_dsl) {
193
+ <<-RUBY
194
+ create_table "dept_emp", id: false, force: :cascade do |t|
195
+ t.integer "emp_no", null: false
196
+ t.integer "emp_no2", null: false
197
+ t.string "dept_no", limit: 4, null: false
198
+ t.date "from_date", null: false
199
+ t.date "to_date", null: false
200
+ end
201
+ RUBY
202
+ }
203
+
204
+ before { subject.diff(actual_dsl).migrate }
205
+ subject { client }
206
+
207
+ it {
208
+ delta = subject.diff(expected_dsl)
209
+ expect(delta.differ?).to be_truthy
210
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
211
+ migrated, sql = delta.migrate(:noop => true)
212
+ expect(migrated).to be_truthy
213
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
214
+
215
+ sql = sql.each_line.map {|i| i.strip }.join("\n")
216
+ expect(sql).to eq("ALTER TABLE \"dept_emp\" ADD \"emp_no2\" integer NOT NULL")
217
+ }
218
+ end
219
+ end
220
+ end