ridgepole 0.6.4.beta → 0.6.4.beta2

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: e1b4733e95ee314eccc6c975becee43463c4c1b0
4
- data.tar.gz: f71fb12dd5737106719cc32636ad2b1c5aba8e14
3
+ metadata.gz: 10801582c0052e986aa30e7b154351eeaa554f15
4
+ data.tar.gz: 1e65cf886879c7b82f5a43db621b0862a1dcec54
5
5
  SHA512:
6
- metadata.gz: fcfaa88a1d5932661259c69b9f8678938cc81c50656401e9fc8b568442833f1231e210c648e74f97eb0978160e9a933aecd8958daf08512e58fce696f40a9249
7
- data.tar.gz: fdfefdfcf6f4fe8723f4c24ab983a5d43e9d4c7bdf67d5c2ee3fc5d20984f3f1d6e1438a848ecb5d3e2deb3df22dd70cc27a19d5b11ccda93be915617f3d8c99
6
+ metadata.gz: 12bdbd42911da4a0a198649aaea81b5f96531f335b5fcabd27895cb455cf0def8eed4ee2d2d73cd2d9151449fe748d8b48e326c2e78687c18a8aec86a7cd2c0b
7
+ data.tar.gz: be1ce63bf98dc8251aac7143743a357b03154f2d82f24db0d6f5833c02a431a29a604dc91d78cfb93f7bb3e3df7e371eb8475480ee8142cfacc737af6af767e5
data/README.md CHANGED
@@ -44,6 +44,8 @@ It defines DB schema using [Rails DSL](http://guides.rubyonrails.org/migrations.
44
44
  * Disable `rename_table_indexes`
45
45
  * `>= 0.6.4`
46
46
  * Execute sql using external script ([pull#56](https://github.com/winebarrel/ridgepole/pull/56))
47
+ * Add `--mysql-use-alter` option
48
+ * Add `--alter-extra` option
47
49
 
48
50
  ## Installation
49
51
 
@@ -69,6 +71,7 @@ Usage: ridgepole [options]
69
71
  -f, --file FILE
70
72
  --dry-run
71
73
  --table-options OPTIONS
74
+ --alter-extra ALTER_SPEC
72
75
  --external-script SCRIPT
73
76
  --bulk-change
74
77
  --default-bool-limit LIMIT
@@ -89,6 +92,7 @@ Usage: ridgepole [options]
89
92
  -t, --tables TABLES
90
93
  --ignore-tables TABLES
91
94
  --enable-mysql-awesome
95
+ --mysql-use-alter
92
96
  --dump-without-table-options
93
97
  --index-removed-drop-column
94
98
  --enable-migration-comments
data/bin/ridgepole CHANGED
@@ -42,12 +42,15 @@ set_mode = proc do |m|
42
42
  mode = m
43
43
  end
44
44
 
45
- def noop_migrate(delta)
45
+ def noop_migrate(delta, options)
46
46
  unless delta.script.empty?
47
47
  puts delta.script + "\n\n"
48
48
  end
49
49
 
50
- migrated, out = delta.migrate(:noop => true)
50
+ migrated, out = delta.migrate(
51
+ :noop => true,
52
+ :alter_extra => options[:alter_extra]
53
+ )
51
54
 
52
55
  if migrated
53
56
  out.each_line do |line|
@@ -71,6 +74,7 @@ ARGV.options do |opt|
71
74
  opt.on('-f', '--file FILE') {|v| file = v }
72
75
  opt.on('', '--dry-run') { options[:dry_run] = true }
73
76
  opt.on('', '--table-options OPTIONS') {|v| options[:table_options] = v }
77
+ opt.on('', '--alter-extra ALTER_SPEC') {|v| options[:alter_extra] = v }
74
78
  opt.on('', '--external-script SCRIPT') {|v| options[:external_script] = v }
75
79
  opt.on('', '--bulk-change') {
76
80
  raise "Cannot use `bulk-change` in `merge`" if options[:merge]
@@ -106,6 +110,7 @@ ARGV.options do |opt|
106
110
  opt.on('-t', '--tables TABLES', Array) {|v| options[:tables] = v }
107
111
  opt.on('', '--ignore-tables TABLES', Array) {|v| options[:ignore_tables] = v.map {|i| Regexp.new(i) } }
108
112
  opt.on('', '--enable-mysql-awesome') { options[:enable_mysql_awesome] = true }
113
+ opt.on('', '--mysql-use-alter') { options[:mysql_use_alter] = true }
109
114
  opt.on('', '--dump-without-table-options') { options[:dump_without_table_options] = true }
110
115
  opt.on('', '--index-removed-drop-column') { options[:index_removed_drop_column] = true }
111
116
  opt.on('', '--enable-migration-comments') { options[:enable_migration_comments] = true }
@@ -196,11 +201,15 @@ begin
196
201
 
197
202
  if options[:dry_run]
198
203
  if differ
199
- differ = noop_migrate(delta)
204
+ differ = noop_migrate(delta, options)
200
205
  end
201
206
  else
202
207
  logger.verbose_info('# Update schema')
203
- differ, out = delta.migrate(:external_script => options[:external_script])
208
+
209
+ differ, out = delta.migrate(
210
+ :external_script => options[:external_script],
211
+ :alter_extra => options[:alter_extra]
212
+ )
204
213
  end
205
214
 
206
215
  unless differ
@@ -235,7 +244,7 @@ begin
235
244
  logger.info('No change')
236
245
  end
237
246
  elsif delta.differ?
238
- differ = noop_migrate(delta)
247
+ differ = noop_migrate(delta, options)
239
248
  exit_code = 1 if differ
240
249
  end
241
250
  end
@@ -25,6 +25,10 @@ class Ridgepole::Client
25
25
 
26
26
  require 'activerecord/mysql/awesome/base'
27
27
  end
28
+
29
+ if @options[:mysql_use_alter]
30
+ require 'ridgepole/ext/abstract_mysql_adapter'
31
+ end
28
32
  end
29
33
 
30
34
  def dump(&block)
@@ -63,8 +63,18 @@ class Ridgepole::Delta
63
63
  buf.puts sql if sql =~ /\A(CREATE|ALTER|DROP|RENAME)\b/i
64
64
  end
65
65
 
66
- Ridgepole::ExecuteExpander.without_operation(callback) do
67
- migrated = eval_script(script, options.merge(:out => buf))
66
+ eval_script_block = proc do
67
+ Ridgepole::ExecuteExpander.without_operation(callback) do
68
+ migrated = eval_script(script, options.merge(:out => buf))
69
+ end
70
+ end
71
+
72
+ if options[:alter_extra]
73
+ Ridgepole::ExecuteExpander.with_alter_extra(options[:alter_extra]) do
74
+ eval_script_block.call
75
+ end
76
+ else
77
+ eval_script_block.call
68
78
  end
69
79
 
70
80
  out = buf.string.strip
@@ -75,6 +85,10 @@ class Ridgepole::Delta
75
85
  Ridgepole::ExecuteExpander.with_script(options[:external_script], Ridgepole::Logger.instance) do
76
86
  migrated = eval_script(script, options)
77
87
  end
88
+ elsif options[:alter_extra]
89
+ Ridgepole::ExecuteExpander.with_alter_extra(options[:alter_extra]) do
90
+ migrated = eval_script(script, options)
91
+ end
78
92
  else
79
93
  migrated = eval_script(script, options)
80
94
  end
@@ -9,6 +9,7 @@ class Ridgepole::ExecuteExpander
9
9
  cattr_accessor :callback, :instance_writer => false, :instance_reader => false
10
10
  cattr_accessor :use_script, :instance_writer => false, :instance_reader => false
11
11
  cattr_accessor :sql_executer, :instance_writer => false, :instance_reader => false
12
+ cattr_accessor :alter_extra, :instance_writer => false, :instance_reader => false
12
13
 
13
14
  class << self
14
15
  def without_operation(callback = nil)
@@ -33,6 +34,15 @@ class Ridgepole::ExecuteExpander
33
34
  end
34
35
  end
35
36
 
37
+ def with_alter_extra(extra)
38
+ begin
39
+ self.alter_extra = extra
40
+ yield
41
+ ensure
42
+ self.alter_extra = nil
43
+ end
44
+ end
45
+
36
46
  def expand_execute(connection)
37
47
  return if connection.respond_to?(:execute_with_ext)
38
48
 
@@ -40,6 +50,7 @@ class Ridgepole::ExecuteExpander
40
50
  def execute_with_ext(sql, name = nil)
41
51
  if Ridgepole::ExecuteExpander.noop
42
52
  if (callback = Ridgepole::ExecuteExpander.callback)
53
+ sql = append_alter_extra(sql)
43
54
  callback.call(sql, name)
44
55
  end
45
56
 
@@ -56,14 +67,26 @@ class Ridgepole::ExecuteExpander
56
67
  if sql =~ /\A(SELECT|SHOW)\b/i
57
68
  execute_without_ext(sql, name)
58
69
  else
70
+ sql = append_alter_extra(sql)
59
71
  Ridgepole::ExecuteExpander.sql_executer.execute(sql)
60
72
  nil
61
73
  end
62
74
  else
75
+ sql = append_alter_extra(sql)
63
76
  execute_without_ext(sql, name)
64
77
  end
65
78
  end
66
79
  alias_method_chain :execute, :ext
80
+
81
+ private
82
+
83
+ def append_alter_extra(sql)
84
+ if Ridgepole::ExecuteExpander.alter_extra and sql =~ /\AALTER\b/i
85
+ sql = sql + ',' + Ridgepole::ExecuteExpander.alter_extra
86
+ end
87
+
88
+ sql
89
+ end
67
90
  end
68
91
  end
69
92
  end # of class methods
@@ -0,0 +1,16 @@
1
+ require 'active_record/connection_adapters/abstract_mysql_adapter'
2
+
3
+ class ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter
4
+ def add_index_with_alter(table_name, column_name, options = {})
5
+ index_name, index_type, index_columns, index_options, index_algorithm, index_using = add_index_options(table_name, column_name, options)
6
+
7
+ # cannot specify index_algorithm
8
+ execute "ALTER TABLE #{quote_table_name(table_name)} ADD #{index_type} INDEX #{quote_column_name(index_name)} #{index_using} (#{index_columns})#{index_options}"
9
+ end
10
+ alias_method_chain :add_index, :alter
11
+
12
+ def remove_index_with_alter!(table_name, index_name)
13
+ execute "ALTER TABLE #{quote_table_name(table_name)} DROP INDEX #{quote_column_name(index_name)}"
14
+ end
15
+ alias_method_chain :remove_index!, :alter
16
+ end
@@ -1,3 +1,3 @@
1
1
  module Ridgepole
2
- VERSION = '0.6.4.beta'
2
+ VERSION = '0.6.4.beta2'
3
3
  end
@@ -17,6 +17,7 @@ describe 'ridgepole' do
17
17
  -f, --file FILE
18
18
  --dry-run
19
19
  --table-options OPTIONS
20
+ --alter-extra ALTER_SPEC
20
21
  --external-script SCRIPT
21
22
  --bulk-change
22
23
  --default-bool-limit LIMIT
@@ -37,6 +38,7 @@ describe 'ridgepole' do
37
38
  -t, --tables TABLES
38
39
  --ignore-tables TABLES
39
40
  --enable-mysql-awesome
41
+ --mysql-use-alter
40
42
  --dump-without-table-options
41
43
  --index-removed-drop-column
42
44
  --enable-migration-comments
@@ -0,0 +1,157 @@
1
+ unless postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when add column' do
4
+ let(:actual_dsl) {
5
+ <<-RUBY
6
+ create_table "clubs"#{unsigned_if_enabled}, 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"#{unsigned_if_enabled}, force: :cascade do |t|
13
+ t.string "dept_name", limit: 40, null: false
14
+ end
15
+
16
+ add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
17
+
18
+ create_table "dept_emp", id: false, force: :cascade do |t|
19
+ t.integer "emp_no", limit: 4, 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: "dept_no", using: :btree
26
+ add_index "dept_emp", ["emp_no"], name: "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", limit: 4, 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: "dept_no", using: :btree
36
+ add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
37
+
38
+ create_table "employee_clubs"#{unsigned_if_enabled}, force: :cascade do |t|
39
+ t.integer "emp_no", limit: 4, null: false
40
+ t.integer "club_id", limit: 4, null: false
41
+ end
42
+
43
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
44
+
45
+ create_table "employees", primary_key: "emp_no"#{unsigned_if_enabled}, 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.string "gender", limit: 1, null: false
50
+ t.date "hire_date", null: false
51
+ end
52
+
53
+ create_table "salaries", id: false, force: :cascade do |t|
54
+ t.integer "emp_no", limit: 4, null: false
55
+ t.integer "salary", limit: 4, null: false
56
+ t.date "from_date", null: false
57
+ t.date "to_date", null: false
58
+ end
59
+
60
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
61
+
62
+ create_table "titles", id: false, force: :cascade do |t|
63
+ t.integer "emp_no", limit: 4, null: false
64
+ t.string "title", limit: 50, null: false
65
+ t.date "from_date", null: false
66
+ t.date "to_date"
67
+ end
68
+
69
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
70
+ RUBY
71
+ }
72
+
73
+ let(:expected_dsl) {
74
+ <<-RUBY
75
+ create_table "clubs"#{unsigned_if_enabled}, force: :cascade do |t|
76
+ t.string "name", limit: 255, default: "", null: false
77
+ end
78
+
79
+ add_index "clubs", ["name"], name: "idx_name", unique: true, using: :btree
80
+
81
+ create_table "departments", primary_key: "dept_no"#{unsigned_if_enabled}, force: :cascade do |t|
82
+ t.string "dept_name", limit: 40, null: false
83
+ end
84
+
85
+ add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
86
+
87
+ create_table "dept_emp", id: false, force: :cascade do |t|
88
+ t.integer "emp_no", limit: 4, null: false
89
+ t.string "dept_no", limit: 4, null: false
90
+ t.date "from_date", null: false
91
+ t.date "to_date", null: false
92
+ end
93
+
94
+ add_index "dept_emp", ["dept_no"], name: "dept_no", using: :btree
95
+ add_index "dept_emp", ["emp_no"], name: "emp_no", using: :btree
96
+
97
+ create_table "dept_manager", id: false, force: :cascade do |t|
98
+ t.string "dept_no", limit: 4, null: false
99
+ t.integer "emp_no", limit: 4, null: false
100
+ t.date "from_date", null: false
101
+ t.date "to_date", null: false
102
+ end
103
+
104
+ add_index "dept_manager", ["dept_no"], name: "dept_no", using: :btree
105
+ add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
106
+
107
+ create_table "employee_clubs"#{unsigned_if_enabled}, force: :cascade do |t|
108
+ t.integer "emp_no", limit: 4, null: false
109
+ t.integer "club_id", limit: 4, null: false
110
+ t.string "any_col", limit: 255, null: false
111
+ end
112
+
113
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
114
+
115
+ create_table "employees", primary_key: "emp_no"#{unsigned_if_enabled}, force: :cascade do |t|
116
+ t.date "birth_date", null: false
117
+ t.string "first_name", limit: 14, null: false
118
+ t.string "last_name", limit: 16, null: false
119
+ t.string "gender", limit: 1, null: false
120
+ t.date "hire_date", null: false
121
+ t.integer "age", limit: 4, null: false
122
+ t.date "updated_at"
123
+ end
124
+
125
+ create_table "salaries", id: false, force: :cascade do |t|
126
+ t.integer "emp_no", limit: 4, null: false
127
+ t.integer "salary", limit: 4, null: false
128
+ t.date "from_date", null: false
129
+ t.date "to_date", null: false
130
+ end
131
+
132
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
133
+
134
+ create_table "titles", id: false, force: :cascade do |t|
135
+ t.integer "emp_no", limit: 4, null: false
136
+ t.string "title", limit: 50, null: false
137
+ t.date "from_date", null: false
138
+ t.date "to_date"
139
+ end
140
+
141
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
142
+ RUBY
143
+ }
144
+
145
+ before { subject.diff(actual_dsl).migrate }
146
+ subject { client }
147
+
148
+ it {
149
+ delta = subject.diff(expected_dsl)
150
+ expect(delta.differ?).to be_truthy
151
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
152
+ delta.migrate(alter_extra: 'FORCE')
153
+ expect(subject.dump).to eq expected_dsl.strip_heredoc.strip
154
+ }
155
+ end
156
+ end
157
+ end
@@ -0,0 +1,93 @@
1
+ unless postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when create index' do
4
+ let(:dsl) {
5
+ <<-RUBY
6
+ create_table "clubs"#{unsigned_if_enabled}, 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"#{unsigned_if_enabled}, force: :cascade do |t|
13
+ t.string "dept_name", limit: 40, null: false
14
+ end
15
+
16
+ add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
17
+
18
+ create_table "dept_emp", id: false, force: :cascade do |t|
19
+ t.integer "emp_no", limit: 4, 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: "dept_no", using: :btree
26
+ add_index "dept_emp", ["emp_no"], name: "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", limit: 4, 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: "dept_no", using: :btree
36
+ add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
37
+
38
+ create_table "employee_clubs"#{unsigned_if_enabled}, force: :cascade do |t|
39
+ t.integer "emp_no", limit: 4, null: false#{unsigned_if_enabled}
40
+ t.integer "club_id", limit: 4, null: false#{unsigned_if_enabled}
41
+ end
42
+
43
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
44
+
45
+ create_table "employees", primary_key: "emp_no"#{unsigned_if_enabled}, 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.string "gender", limit: 1, null: false
50
+ t.date "hire_date", null: false
51
+ end
52
+
53
+ create_table "salaries", id: false, force: :cascade do |t|
54
+ t.integer "emp_no", limit: 4, null: false
55
+ t.integer "salary", limit: 4, null: false
56
+ t.date "from_date", null: false
57
+ t.date "to_date", null: false
58
+ end
59
+
60
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
61
+
62
+ create_table "titles", id: false, force: :cascade do |t|
63
+ t.integer "emp_no", limit: 4, null: false
64
+ t.string "title", limit: 50, null: false
65
+ t.date "from_date", null: false
66
+ t.date "to_date"
67
+ end
68
+
69
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
70
+ RUBY
71
+ }
72
+
73
+ let(:actual_dsl) {
74
+ dsl.delete_add_index('clubs', ['name']).
75
+ delete_add_index('employee_clubs', ['emp_no', 'club_id']).
76
+ delete_add_index('titles', ['emp_no'])
77
+ }
78
+
79
+ let(:expected_dsl) { dsl }
80
+
81
+ before { subject.diff(actual_dsl).migrate }
82
+ subject { client(mysql_use_alter: true) }
83
+
84
+ it {
85
+ delta = subject.diff(expected_dsl)
86
+ expect(delta.differ?).to be_truthy
87
+ expect(subject.dump.delete_empty_lines).to eq actual_dsl.strip_heredoc.strip.delete_empty_lines
88
+ delta.migrate
89
+ expect(subject.dump.delete_empty_lines).to eq expected_dsl.strip_heredoc.strip.delete_empty_lines
90
+ }
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,93 @@
1
+ unless postgresql?
2
+ describe 'Ridgepole::Client#diff -> migrate' do
3
+ context 'when drop index' do
4
+ let(:dsl) {
5
+ <<-RUBY
6
+ create_table "clubs"#{unsigned_if_enabled}, 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"#{unsigned_if_enabled}, force: :cascade do |t|
13
+ t.string "dept_name", limit: 40, null: false
14
+ end
15
+
16
+ add_index "departments", ["dept_name"], name: "dept_name", unique: true, using: :btree
17
+
18
+ create_table "dept_emp", id: false, force: :cascade do |t|
19
+ t.integer "emp_no", limit: 4, 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: "dept_no", using: :btree
26
+ add_index "dept_emp", ["emp_no"], name: "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", limit: 4, 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: "dept_no", using: :btree
36
+ add_index "dept_manager", ["emp_no"], name: "emp_no", using: :btree
37
+
38
+ create_table "employee_clubs"#{unsigned_if_enabled}, force: :cascade do |t|
39
+ t.integer "emp_no", limit: 4, null: false#{unsigned_if_enabled}
40
+ t.integer "club_id", limit: 4, null: false#{unsigned_if_enabled}
41
+ end
42
+
43
+ add_index "employee_clubs", ["emp_no", "club_id"], name: "idx_emp_no_club_id", using: :btree
44
+
45
+ create_table "employees", primary_key: "emp_no"#{unsigned_if_enabled}, 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.string "gender", limit: 1, null: false
50
+ t.date "hire_date", null: false
51
+ end
52
+
53
+ create_table "salaries", id: false, force: :cascade do |t|
54
+ t.integer "emp_no", limit: 4, null: false
55
+ t.integer "salary", limit: 4, null: false
56
+ t.date "from_date", null: false
57
+ t.date "to_date", null: false
58
+ end
59
+
60
+ add_index "salaries", ["emp_no"], name: "emp_no", using: :btree
61
+
62
+ create_table "titles", id: false, force: :cascade do |t|
63
+ t.integer "emp_no", limit: 4, null: false
64
+ t.string "title", limit: 50, null: false
65
+ t.date "from_date", null: false
66
+ t.date "to_date"
67
+ end
68
+
69
+ add_index "titles", ["emp_no"], name: "emp_no", using: :btree
70
+ RUBY
71
+ }
72
+
73
+ let(:actual_dsl) { dsl }
74
+
75
+ let(:expected_dsl) {
76
+ dsl.delete_add_index('clubs', ['name']).
77
+ delete_add_index('employee_clubs', ['emp_no', 'club_id']).
78
+ delete_add_index('titles', ['emp_no'])
79
+ }
80
+
81
+ before { subject.diff(actual_dsl).migrate }
82
+ subject { client(mysql_use_alter: true) }
83
+
84
+ it {
85
+ delta = subject.diff(expected_dsl)
86
+ expect(delta.differ?).to be_truthy
87
+ expect(subject.dump).to eq actual_dsl.strip_heredoc.strip
88
+ delta.migrate
89
+ 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
90
+ }
91
+ end
92
+ end
93
+ 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.6.4.beta
4
+ version: 0.6.4.beta2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Genki Sugawara
@@ -162,6 +162,7 @@ files:
162
162
  - lib/ridgepole/dsl_parser.rb
163
163
  - lib/ridgepole/dumper.rb
164
164
  - lib/ridgepole/execute_expander.rb
165
+ - lib/ridgepole/ext/abstract_mysql_adapter.rb
165
166
  - lib/ridgepole/ext/migration_comments.rb
166
167
  - lib/ridgepole/external_sql_executer.rb
167
168
  - lib/ridgepole/logger.rb
@@ -188,6 +189,7 @@ files:
188
189
  - spec/mysql/migrate/check_orphan_index_spec.rb
189
190
  - spec/mysql/migrate/migrate_add_column2_spec.rb
190
191
  - spec/mysql/migrate/migrate_add_column_spec.rb
192
+ - spec/mysql/migrate/migrate_add_column_with_alter_extra_spec.rb
191
193
  - spec/mysql/migrate/migrate_add_column_with_script_spec.rb
192
194
  - spec/mysql/migrate/migrate_change_column2_spec.rb
193
195
  - spec/mysql/migrate/migrate_change_column3_spec.rb
@@ -228,6 +230,8 @@ files:
228
230
  - spec/mysql/migrate/migrate_with_ignore_tables_spec.rb
229
231
  - spec/mysql/migrate/migrate_with_pre_post_query_spec.rb
230
232
  - spec/mysql/migrate/migrate_with_tables_spec.rb
233
+ - spec/mysql/migrate_/migrate_create_index_with_alter_spec.rb
234
+ - spec/mysql/migrate_/migrate_drop_index_with_alter_spec.rb
231
235
  - spec/mysql/ridgepole_test_database.sql
232
236
  - spec/mysql/ridgepole_test_tables.sql
233
237
  - spec/postgresql/diff/diff_spec.rb
@@ -295,6 +299,7 @@ test_files:
295
299
  - spec/mysql/migrate/check_orphan_index_spec.rb
296
300
  - spec/mysql/migrate/migrate_add_column2_spec.rb
297
301
  - spec/mysql/migrate/migrate_add_column_spec.rb
302
+ - spec/mysql/migrate/migrate_add_column_with_alter_extra_spec.rb
298
303
  - spec/mysql/migrate/migrate_add_column_with_script_spec.rb
299
304
  - spec/mysql/migrate/migrate_change_column2_spec.rb
300
305
  - spec/mysql/migrate/migrate_change_column3_spec.rb
@@ -335,6 +340,8 @@ test_files:
335
340
  - spec/mysql/migrate/migrate_with_ignore_tables_spec.rb
336
341
  - spec/mysql/migrate/migrate_with_pre_post_query_spec.rb
337
342
  - spec/mysql/migrate/migrate_with_tables_spec.rb
343
+ - spec/mysql/migrate_/migrate_create_index_with_alter_spec.rb
344
+ - spec/mysql/migrate_/migrate_drop_index_with_alter_spec.rb
338
345
  - spec/mysql/ridgepole_test_database.sql
339
346
  - spec/mysql/ridgepole_test_tables.sql
340
347
  - spec/postgresql/diff/diff_spec.rb