ridgepole 0.8.8 → 0.9.0.beta

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 (48) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/test.yml +65 -0
  3. data/.rubocop.yml +11 -36
  4. data/Appraisals +4 -5
  5. data/README.md +27 -17
  6. data/bin/ridgepole +13 -1
  7. data/gemfiles/{activerecord_5.0.gemfile → activerecord_6.1.gemfile} +1 -2
  8. data/lib/ridgepole/client.rb +8 -3
  9. data/lib/ridgepole/default_limit.rb +1 -1
  10. data/lib/ridgepole/delta.rb +16 -1
  11. data/lib/ridgepole/diff.rb +55 -20
  12. data/lib/ridgepole/dsl_parser.rb +3 -4
  13. data/lib/ridgepole/dsl_parser/context.rb +1 -1
  14. data/lib/ridgepole/dsl_parser/table_definition.rb +51 -41
  15. data/lib/ridgepole/execute_expander.rb +10 -1
  16. data/lib/ridgepole/ext/abstract_adapter/disable_table_options.rb +9 -1
  17. data/lib/ridgepole/external_sql_executer.rb +12 -1
  18. data/lib/ridgepole/version.rb +1 -1
  19. data/ridgepole.gemspec +5 -3
  20. data/spec/erb_helper.rb +9 -5
  21. data/spec/mysql/_migrate/migrate_change_table_option_spec.rb +2 -2
  22. data/spec/mysql/cli/ridgepole_spec.rb +35 -1
  23. data/spec/mysql/collation/collation_spec.rb +8 -8
  24. data/spec/mysql/dump/dump_class_method_spec.rb +3 -3
  25. data/spec/mysql/dump/dump_spec.rb +3 -3
  26. data/spec/mysql/dump/dump_unknown_column_type_spec.rb +1 -1
  27. data/spec/mysql/dump/dump_without_table_options_spec.rb +2 -2
  28. data/spec/mysql/fk/migrate_create_fk_spec.rb +79 -10
  29. data/spec/mysql/migrate/migrate_add_column_with_alter_extra_spec.rb +88 -0
  30. data/spec/mysql/migrate/migrate_change_column3_spec.rb +109 -18
  31. data/spec/mysql/migrate/migrate_change_column8_spec.rb +38 -5
  32. data/spec/mysql/migrate/migrate_change_index_spec.rb +7 -1
  33. data/spec/mysql/migrate/migrate_check_relation_column_type_spec.rb +4 -4
  34. data/spec/mysql/migrate/migrate_primary_key_spec.rb +30 -5
  35. data/spec/mysql/migrate/migrate_same_spec.rb +3 -3
  36. data/spec/mysql/text_blob_types/text_blob_types_spec.rb +5 -2
  37. data/spec/postgresql/dump/dump_spec.rb +1 -1
  38. data/spec/postgresql/migrate/migrate_add_column_spec.rb +11 -4
  39. data/spec/postgresql/migrate/migrate_change_column_spec.rb +4 -0
  40. data/spec/postgresql/migrate/migrate_drop_column_spec.rb +11 -4
  41. data/spec/postgresql/migrate/migrate_same_spec.rb +1 -1
  42. data/spec/spec_condition.rb +4 -0
  43. data/spec/spec_helper.rb +2 -1
  44. metadata +43 -20
  45. data/.travis.yml +0 -45
  46. data/lib/ridgepole/ext/abstract_mysql_adapter/use_alter_index.rb +0 -31
  47. data/spec/mysql/migrate_/migrate_create_index_with_alter_spec.rb +0 -141
  48. data/spec/mysql/migrate_/migrate_drop_index_with_alter_spec.rb +0 -141
@@ -1,45 +0,0 @@
1
- dist: trusty
2
- sudo: required
3
- group: edge
4
- language: ruby
5
- cache:
6
- - bundler
7
- rvm:
8
- - 2.4.9
9
- - 2.5.7
10
- - 2.6.5
11
- - 2.7.1
12
- before_script:
13
- - sudo service mysql stop
14
- - sudo service postgresql stop
15
- - for i in {1..60}; do docker-compose up -d && break; sleep 1; done
16
- - function mysql_ping { mysqladmin -u root -h 127.0.0.1 -P 13316 -ppassword ping; }
17
- - function mysql57_ping { mysqladmin -u root -h 127.0.0.1 -P 13317 -ppassword ping; }
18
- - function pg_ping { PGPASSWORD=password pg_isready -U postgres -h 127.0.0.1 -p 15442; }
19
- - for i in {1..60}; do mysql_ping && break; sleep 1; done
20
- - for i in {1..60}; do mysql57_ping && break; sleep 1; done
21
- - for i in {1..60}; do pg_ping && break; sleep 1; done
22
- script:
23
- - bundle exec rake
24
- gemfile:
25
- - gemfiles/activerecord_5.0.gemfile
26
- - gemfiles/activerecord_5.1.gemfile
27
- - gemfiles/activerecord_5.2.gemfile
28
- - gemfiles/activerecord_6.0.gemfile
29
- env:
30
- matrix:
31
- - MYSQL56=1
32
- - MYSQL57=1
33
- - POSTGRESQL=1
34
- services:
35
- - docker
36
- addons:
37
- apt:
38
- packages:
39
- - mysql-client-core-5.6
40
- - mysql-client-5.6
41
- - postgresql-client-9.4
42
- matrix:
43
- exclude:
44
- - rvm: 2.4.9
45
- gemfile: gemfiles/activerecord_6.0.gemfile
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'active_record/connection_adapters/abstract_mysql_adapter'
4
-
5
- module Ridgepole
6
- module Ext
7
- module AbstractMysqlAdapter
8
- module UseAlterIndex
9
- def add_index(table_name, column_name, options = {})
10
- index_name, index_type, index_columns, index_options, _index_algorithm, index_using = add_index_options(table_name, column_name, options)
11
-
12
- # cannot specify index_algorithm
13
- execute "ALTER TABLE #{quote_table_name(table_name)} ADD #{index_type} INDEX #{quote_column_name(index_name)} #{index_using} (#{index_columns})#{index_options}"
14
- end
15
-
16
- def remove_index(table_name, options)
17
- index_name = index_name_for_remove(table_name, options)
18
- execute "ALTER TABLE #{quote_table_name(table_name)} DROP INDEX #{quote_column_name(index_name)}"
19
- end
20
- end
21
- end
22
- end
23
- end
24
-
25
- module ActiveRecord
26
- module ConnectionAdapters
27
- class AbstractMysqlAdapter
28
- prepend Ridgepole::Ext::AbstractMysqlAdapter::UseAlterIndex
29
- end
30
- end
31
- end
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe 'Ridgepole::Client#diff -> migrate' do
4
- context 'when create index' do
5
- let(:dsl) do
6
- erbh(<<-ERB)
7
- create_table "clubs", force: :cascade do |t|
8
- t.string "name", default: "", null: false
9
- t.index ["name"], name: "idx_name", unique: true, <%= i cond(5.0, using: :btree) %>
10
- end
11
-
12
- create_table "departments", primary_key: "dept_no", force: :cascade do |t|
13
- t.string "dept_name", limit: 40, null: false
14
- t.index ["dept_name"], name: "dept_name", unique: true, <%= i cond(5.0, using: :btree) %>
15
- end
16
-
17
- create_table "dept_emp", id: false, force: :cascade do |t|
18
- t.integer "emp_no", null: false
19
- t.string "dept_no", null: false
20
- t.date "from_date", null: false
21
- t.date "to_date", null: false
22
- t.index ["dept_no"], name: "dept_no", <%= i cond(5.0, using: :btree) %>
23
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
24
- end
25
-
26
- create_table "dept_manager", id: false, force: :cascade do |t|
27
- t.string "dept_no", null: false
28
- t.integer "emp_no", null: false
29
- t.date "from_date", null: false
30
- t.date "to_date", null: false
31
- t.index ["dept_no"], name: "dept_no", <%= i cond(5.0, using: :btree) %>
32
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
33
- end
34
-
35
- create_table "employee_clubs", force: :cascade do |t|
36
- t.integer "emp_no", null: false
37
- t.integer "club_id", null: false
38
- t.index ["emp_no", "club_id"], name: "idx_emp_no_club_id", <%= i cond(5.0, using: :btree) %>
39
- end
40
-
41
- create_table "employees", primary_key: "emp_no", force: :cascade do |t|
42
- t.date "birth_date", null: false
43
- t.string "first_name", limit: 14, null: false
44
- t.string "last_name", limit: 16, null: false
45
- t.string "gender", limit: 1, null: false
46
- t.date "hire_date", null: false
47
- end
48
-
49
- create_table "salaries", id: false, force: :cascade do |t|
50
- t.integer "emp_no", null: false
51
- t.integer "salary", null: false
52
- t.date "from_date", null: false
53
- t.date "to_date", null: false
54
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
55
- end
56
-
57
- create_table "titles", id: false, force: :cascade do |t|
58
- t.integer "emp_no", null: false
59
- t.string "title", limit: 50, null: false
60
- t.date "from_date", null: false
61
- t.date "to_date"
62
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
63
- end
64
- ERB
65
- end
66
-
67
- let(:actual_dsl) do
68
- erbh(<<-ERB)
69
- create_table "clubs", force: :cascade do |t|
70
- t.string "name", default: "", null: false
71
- end
72
-
73
- create_table "departments", primary_key: "dept_no", force: :cascade do |t|
74
- t.string "dept_name", limit: 40, null: false
75
- t.index ["dept_name"], name: "dept_name", unique: true, <%= i cond(5.0, using: :btree) %>
76
- end
77
-
78
- create_table "dept_emp", id: false, force: :cascade do |t|
79
- t.integer "emp_no", null: false
80
- t.string "dept_no", null: false
81
- t.date "from_date", null: false
82
- t.date "to_date", null: false
83
- t.index ["dept_no"], name: "dept_no", <%= i cond(5.0, using: :btree) %>
84
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
85
- end
86
-
87
- create_table "dept_manager", id: false, force: :cascade do |t|
88
- t.string "dept_no", null: false
89
- t.integer "emp_no", null: false
90
- t.date "from_date", null: false
91
- t.date "to_date", null: false
92
- t.index ["dept_no"], name: "dept_no", <%= i cond(5.0, using: :btree) %>
93
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
94
- end
95
-
96
- create_table "employee_clubs", force: :cascade do |t|
97
- t.integer "emp_no", null: false
98
- t.integer "club_id", null: false
99
- end
100
-
101
- create_table "employees", primary_key: "emp_no", force: :cascade do |t|
102
- t.date "birth_date", null: false
103
- t.string "first_name", limit: 14, null: false
104
- t.string "last_name", limit: 16, null: false
105
- t.string "gender", limit: 1, null: false
106
- t.date "hire_date", null: false
107
- end
108
-
109
- create_table "salaries", id: false, force: :cascade do |t|
110
- t.integer "emp_no", null: false
111
- t.integer "salary", null: false
112
- t.date "from_date", null: false
113
- t.date "to_date", null: false
114
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
115
- end
116
-
117
- create_table "titles", id: false, force: :cascade do |t|
118
- t.integer "emp_no", null: false
119
- t.string "title", limit: 50, null: false
120
- t.date "from_date", null: false
121
- t.date "to_date"
122
- end
123
- ERB
124
- end
125
-
126
- let(:expected_dsl) { dsl }
127
-
128
- before { subject.diff(actual_dsl).migrate }
129
- subject { client(mysql_use_alter: true) }
130
-
131
- it {
132
- delta = subject.diff(expected_dsl)
133
- expect(delta.differ?).to be_truthy
134
- expect(subject.dump).to match_ruby actual_dsl
135
- _migrated, sql = delta.migrate(noop: true)
136
- expect(sql).to match(/ALTER/)
137
- delta.migrate
138
- expect(subject.dump).to match_ruby expected_dsl
139
- }
140
- end
141
- end
@@ -1,141 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- describe 'Ridgepole::Client#diff -> migrate' do
4
- context 'when drop index' do
5
- let(:dsl) do
6
- erbh(<<-ERB)
7
- create_table "clubs", force: :cascade do |t|
8
- t.string "name", default: "", null: false
9
- t.index ["name"], name: "idx_name", unique: true, <%= i cond(5.0, using: :btree) %>
10
- end
11
-
12
- create_table "departments", primary_key: "dept_no", force: :cascade do |t|
13
- t.string "dept_name", limit: 40, null: false
14
- t.index ["dept_name"], name: "dept_name", unique: true, <%= i cond(5.0, using: :btree) %>
15
- end
16
-
17
- create_table "dept_emp", id: false, force: :cascade do |t|
18
- t.integer "emp_no", null: false
19
- t.string "dept_no", null: false
20
- t.date "from_date", null: false
21
- t.date "to_date", null: false
22
- t.index ["dept_no"], name: "dept_no", <%= i cond(5.0, using: :btree) %>
23
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
24
- end
25
-
26
- create_table "dept_manager", id: false, force: :cascade do |t|
27
- t.string "dept_no", null: false
28
- t.integer "emp_no", null: false
29
- t.date "from_date", null: false
30
- t.date "to_date", null: false
31
- t.index ["dept_no"], name: "dept_no", <%= i cond(5.0, using: :btree) %>
32
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
33
- end
34
-
35
- create_table "employee_clubs", force: :cascade do |t|
36
- t.integer "emp_no", null: false
37
- t.integer "club_id", null: false
38
- t.index ["emp_no", "club_id"], name: "idx_emp_no_club_id", <%= i cond(5.0, using: :btree) %>
39
- end
40
-
41
- create_table "employees", primary_key: "emp_no", force: :cascade do |t|
42
- t.date "birth_date", null: false
43
- t.string "first_name", limit: 14, null: false
44
- t.string "last_name", limit: 16, null: false
45
- t.string "gender", limit: 1, null: false
46
- t.date "hire_date", null: false
47
- end
48
-
49
- create_table "salaries", id: false, force: :cascade do |t|
50
- t.integer "emp_no", null: false
51
- t.integer "salary", null: false
52
- t.date "from_date", null: false
53
- t.date "to_date", null: false
54
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
55
- end
56
-
57
- create_table "titles", id: false, force: :cascade do |t|
58
- t.integer "emp_no", null: false
59
- t.string "title", limit: 50, null: false
60
- t.date "from_date", null: false
61
- t.date "to_date"
62
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
63
- end
64
- ERB
65
- end
66
-
67
- let(:actual_dsl) { dsl }
68
-
69
- let(:expected_dsl) do
70
- erbh(<<-ERB)
71
- create_table "clubs", force: :cascade do |t|
72
- t.string "name", default: "", null: false
73
- end
74
-
75
- create_table "departments", primary_key: "dept_no", force: :cascade do |t|
76
- t.string "dept_name", limit: 40, null: false
77
- t.index ["dept_name"], name: "dept_name", unique: true, <%= i cond(5.0, using: :btree) %>
78
- end
79
-
80
- create_table "dept_emp", id: false, force: :cascade do |t|
81
- t.integer "emp_no", null: false
82
- t.string "dept_no", null: false
83
- t.date "from_date", null: false
84
- t.date "to_date", null: false
85
- t.index ["dept_no"], name: "dept_no", <%= i cond(5.0, using: :btree) %>
86
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
87
- end
88
-
89
- create_table "dept_manager", id: false, force: :cascade do |t|
90
- t.string "dept_no", null: false
91
- t.integer "emp_no", null: false
92
- t.date "from_date", null: false
93
- t.date "to_date", null: false
94
- t.index ["dept_no"], name: "dept_no", <%= i cond(5.0, using: :btree) %>
95
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
96
- end
97
-
98
- create_table "employee_clubs", force: :cascade do |t|
99
- t.integer "emp_no", null: false
100
- t.integer "club_id", null: false
101
- end
102
-
103
- create_table "employees", primary_key: "emp_no", force: :cascade do |t|
104
- t.date "birth_date", null: false
105
- t.string "first_name", limit: 14, null: false
106
- t.string "last_name", limit: 16, null: false
107
- t.string "gender", limit: 1, null: false
108
- t.date "hire_date", null: false
109
- end
110
-
111
- create_table "salaries", id: false, force: :cascade do |t|
112
- t.integer "emp_no", null: false
113
- t.integer "salary", null: false
114
- t.date "from_date", null: false
115
- t.date "to_date", null: false
116
- t.index ["emp_no"], name: "emp_no", <%= i cond(5.0, using: :btree) %>
117
- end
118
-
119
- create_table "titles", id: false, force: :cascade do |t|
120
- t.integer "emp_no", null: false
121
- t.string "title", limit: 50, null: false
122
- t.date "from_date", null: false
123
- t.date "to_date"
124
- end
125
- ERB
126
- end
127
-
128
- before { subject.diff(actual_dsl).migrate }
129
- subject { client(mysql_use_alter: true) }
130
-
131
- it {
132
- delta = subject.diff(expected_dsl)
133
- expect(delta.differ?).to be_truthy
134
- expect(subject.dump).to match_ruby actual_dsl
135
- _migrated, sql = delta.migrate(noop: true)
136
- expect(sql).to match(/ALTER/)
137
- delta.migrate
138
- expect(subject.dump).to match_ruby expected_dsl
139
- }
140
- end
141
- end