convergence 0.2.1 → 0.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -3
- data/lib/convergence/default_parameter/mysql_default_parameter.rb +1 -1
- data/lib/convergence/dumper/mysql_schema_dumper.rb +1 -2
- data/lib/convergence/sql_generator/mysql_generator.rb +33 -18
- data/lib/convergence/version.rb +1 -1
- data/spec/convergence/dumper/mysql_schema_dumper_spec.rb +11 -2
- data/spec/fixtures/add_columns_to_paper.schema +1 -0
- data/spec/fixtures/add_table.schema +1 -0
- data/spec/fixtures/change_comment_columns_to_paper.schema +1 -0
- data/spec/fixtures/change_foreign_key.schema +1 -0
- data/spec/fixtures/change_table_comment_to_paper.schema +1 -0
- data/spec/fixtures/drop_foreign_key.schema +1 -0
- data/spec/fixtures/drop_table.schema +1 -0
- data/spec/fixtures/remove_columns_to_paper.schema +1 -0
- data/spec/fixtures/test_db.sql +2 -0
- data/spec/integrations/command_dryrun.rb +2 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fdccd6dd4ac4264484a20ecc96f23604c2f618a3
|
4
|
+
data.tar.gz: 6c57e11df4937fb26b2653bf73de9db2b33874ff
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f233f12b82e650eaf5c26fc3977d594e00a884ce2975a4743167ea4e07b428b72eddb40f7fc732e9eddc229f4166abadf745afcb3e7f422c2b6a3b6f6564f8be
|
7
|
+
data.tar.gz: ceb6d83654161df8f3253825b098294f52f5e81b4620a9679c6d720ae556539838a0017f18c3761ed4a09e61600d5e475f4ec093a922c3d08b8a2d2065aac815
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
convergence (0.2.
|
4
|
+
convergence (0.2.2)
|
5
5
|
diff-lcs
|
6
6
|
diffy
|
7
7
|
mysql2
|
@@ -36,7 +36,7 @@ GEM
|
|
36
36
|
rb-inotify (>= 0.9)
|
37
37
|
lumberjack (1.0.9)
|
38
38
|
method_source (0.8.2)
|
39
|
-
mysql2 (0.4.
|
39
|
+
mysql2 (0.4.6)
|
40
40
|
parser (2.2.0.pre.5)
|
41
41
|
ast (>= 1.1, < 3.0)
|
42
42
|
slop (~> 3.4, >= 3.4.5)
|
@@ -88,4 +88,4 @@ DEPENDENCIES
|
|
88
88
|
rubocop
|
89
89
|
|
90
90
|
BUNDLED WITH
|
91
|
-
1.
|
91
|
+
1.15.1
|
@@ -158,8 +158,7 @@ class Convergence::Dumper::MysqlSchemaDumper
|
|
158
158
|
table.columns[column].options = options
|
159
159
|
end
|
160
160
|
when 'INDEX', 'UNIQUE'
|
161
|
-
options = { name: index_name, type: indexes.first['INDEX_TYPE'] }
|
162
|
-
options.merge!(unique: true) if type == 'UNIQUE'
|
161
|
+
options = { name: index_name, type: indexes.first['INDEX_TYPE'], unique: type == 'UNIQUE' }
|
163
162
|
length = indexes.reject { |v| v['SUB_PART'].nil? }.reduce({}) { |a, e| a[e['COLUMN_NAME']] = e['SUB_PART']; a }
|
164
163
|
options.merge!(length: length) unless length.empty?
|
165
164
|
table.index(columns, options)
|
@@ -28,17 +28,17 @@ class SQLGenerator::MysqlGenerator < SQLGenerator
|
|
28
28
|
change_table = delta[:change_table]
|
29
29
|
results = []
|
30
30
|
change_table.each do |table_name, table_delta|
|
31
|
-
table_delta[:remove_foreign_key].
|
32
|
-
results <<
|
31
|
+
unless table_delta[:remove_foreign_key].empty?
|
32
|
+
results << alter_remove_foreign_keys_sql(table_name, table_delta[:remove_foreign_key].keys)
|
33
33
|
end
|
34
34
|
table_delta[:remove_index].each do |index_name, _index|
|
35
35
|
results << alter_remove_index_sql(table_name, index_name)
|
36
36
|
end
|
37
|
-
table_delta[:remove_column].
|
38
|
-
results <<
|
37
|
+
unless table_delta[:remove_column].empty?
|
38
|
+
results << alter_remove_columns_sql(table_name, table_delta[:remove_column].values)
|
39
39
|
end
|
40
|
-
table_delta[:add_column].
|
41
|
-
results <<
|
40
|
+
unless table_delta[:add_column].empty?
|
41
|
+
results << alter_add_columns_sql(table_name, table_delta[:add_column].values)
|
42
42
|
end
|
43
43
|
table_delta[:change_column].each do |column_name, column|
|
44
44
|
results << alter_change_column_sql(table_name, column_name, column, to_table)
|
@@ -46,8 +46,8 @@ class SQLGenerator::MysqlGenerator < SQLGenerator
|
|
46
46
|
table_delta[:add_index].each do |_index_name, index|
|
47
47
|
results << alter_add_index_sql(table_name, index)
|
48
48
|
end
|
49
|
-
table_delta[:add_foreign_key].
|
50
|
-
results <<
|
49
|
+
unless table_delta[:add_foreign_key].empty?
|
50
|
+
results << alter_add_foreign_keys_sql(table_name, table_delta[:add_foreign_key].values)
|
51
51
|
end
|
52
52
|
unless table_delta[:change_table_option].empty?
|
53
53
|
results << alter_change_table_sql(table_name, table_delta[:change_table_option])
|
@@ -56,12 +56,18 @@ class SQLGenerator::MysqlGenerator < SQLGenerator
|
|
56
56
|
results
|
57
57
|
end
|
58
58
|
|
59
|
-
def
|
60
|
-
%(ALTER TABLE `#{table_name}
|
59
|
+
def alter_add_columns_sql(table_name, columns)
|
60
|
+
sql = %(ALTER TABLE `#{table_name}`\n)
|
61
|
+
sql += columns.map { |column| %( ADD COLUMN #{create_column_sql(column, output_primary_key: true)}) }.join(",\n")
|
62
|
+
sql += ';'
|
63
|
+
sql
|
61
64
|
end
|
62
65
|
|
63
|
-
def
|
64
|
-
%(ALTER TABLE `#{table_name}
|
66
|
+
def alter_remove_columns_sql(table_name, columns)
|
67
|
+
sql = %(ALTER TABLE `#{table_name}`\n)
|
68
|
+
sql += columns.map { |column| %( DROP COLUMN `#{column.column_name}`) }.join(",\n")
|
69
|
+
sql += ';'
|
70
|
+
sql
|
65
71
|
end
|
66
72
|
|
67
73
|
def alter_change_column_sql(table_name, column_name, change_column_option, to_table)
|
@@ -104,16 +110,25 @@ class SQLGenerator::MysqlGenerator < SQLGenerator
|
|
104
110
|
sql
|
105
111
|
end
|
106
112
|
|
107
|
-
def
|
108
|
-
sql = %(ALTER TABLE `#{table_name}
|
109
|
-
sql +=
|
113
|
+
def alter_remove_foreign_keys_sql(table_name, index_names)
|
114
|
+
sql = %(ALTER TABLE `#{table_name}`\n)
|
115
|
+
sql += index_names.map { |index_name| %( DROP FOREIGN KEY `#{index_name}`) }.join(",\n")
|
116
|
+
sql += ';'
|
117
|
+
sql += index_names.map { |index_name| alter_remove_index_sql(table_name, index_name) }.join("\n")
|
118
|
+
sql
|
119
|
+
end
|
120
|
+
|
121
|
+
def alter_add_foreign_keys_sql(table_name, foreign_keys)
|
122
|
+
sql = %(ALTER TABLE `#{table_name}`\n)
|
123
|
+
sql += foreign_keys.map { |foreign_key| alter_add_foreign_key_sql(foreign_key) }.join(",\n")
|
124
|
+
sql += ';'
|
110
125
|
sql
|
111
126
|
end
|
112
127
|
|
113
|
-
def alter_add_foreign_key_sql(
|
114
|
-
sql = %(
|
128
|
+
def alter_add_foreign_key_sql(foreign_key)
|
129
|
+
sql = %( ADD CONSTRAINT `#{foreign_key.key_name}` FOREIGN KEY )
|
115
130
|
sql += "(#{[foreign_key.from_columns].join(',')}) REFERENCES `#{foreign_key.to_table}`"
|
116
|
-
sql += "(#{[foreign_key.to_columns].join(',')})
|
131
|
+
sql += "(#{[foreign_key.to_columns].join(',')})"
|
117
132
|
sql
|
118
133
|
end
|
119
134
|
|
data/lib/convergence/version.rb
CHANGED
@@ -39,7 +39,7 @@ describe Convergence::Dumper::MysqlSchemaDumper do
|
|
39
39
|
|
40
40
|
it 'should be dump columns in the correct order' do
|
41
41
|
papers = subject['papers']
|
42
|
-
expect(papers.columns.keys).to eq(%w(id title1 title2 description))
|
42
|
+
expect(papers.columns.keys).to eq(%w(id slug title1 title2 description))
|
43
43
|
end
|
44
44
|
|
45
45
|
describe 'table options' do
|
@@ -75,13 +75,22 @@ describe Convergence::Dumper::MysqlSchemaDumper do
|
|
75
75
|
index = subject['authors'].indexes['index_authors_on_created_at']
|
76
76
|
expect(index).not_to be_nil
|
77
77
|
expect(index.index_columns).to eq(['created_at'])
|
78
|
+
expect(index.options[:unique]).to eq(false)
|
78
79
|
end
|
79
80
|
|
80
|
-
it 'should be dump index of papers' do
|
81
|
+
it 'should be dump unique index of papers' do
|
82
|
+
index = subject['papers'].indexes['index_papers_on_slug']
|
83
|
+
expect(index).not_to be_nil
|
84
|
+
expect(index.index_columns).to eq(['slug'])
|
85
|
+
expect(index.options[:unique]).to eq(true)
|
86
|
+
end
|
87
|
+
|
88
|
+
it 'should be dump non-unique index of papers' do
|
81
89
|
index = subject['papers'].indexes['index_papers_on_title1_title2']
|
82
90
|
expect(index).not_to be_nil
|
83
91
|
expect(index.index_columns).to eq(['title1', 'title2'])
|
84
92
|
expect(index.options[:length]).to eq('title1' => 100, 'title2' => 200)
|
93
|
+
expect(index.options[:unique]).to eq(false)
|
85
94
|
end
|
86
95
|
end
|
87
96
|
|
@@ -11,6 +11,7 @@ end
|
|
11
11
|
|
12
12
|
create_table "papers", collate: "utf8_general_ci", comment: "Paper" do |t|
|
13
13
|
t.int "id", primary_key: true, extra: "auto_increment"
|
14
|
+
t.varchar "slug", comment: "Slug"
|
14
15
|
t.varchar "title1", limit: 300, comment: "Title 1"
|
15
16
|
t.varchar "title2", limit: 300, comment: "Title 2"
|
16
17
|
t.text "description", null: true, comment: "Description"
|
@@ -10,6 +10,7 @@ end
|
|
10
10
|
|
11
11
|
create_table "papers", collate: "utf8_general_ci", comment: "Paper" do |t|
|
12
12
|
t.int "id", primary_key: true, extra: "auto_increment"
|
13
|
+
t.varchar "slug", comment: "Slug"
|
13
14
|
t.varchar "title1", limit: 300, comment: "Title 1"
|
14
15
|
t.varchar "title2", limit: 300, comment: "Title 2"
|
15
16
|
t.text "description", null: true, comment: "Description"
|
@@ -10,6 +10,7 @@ end
|
|
10
10
|
|
11
11
|
create_table "papers", collate: "utf8_general_ci", comment: "Paper" do |t|
|
12
12
|
t.int "id", primary_key: true, extra: "auto_increment"
|
13
|
+
t.varchar "slug", comment: "Slug"
|
13
14
|
t.varchar "title1", limit: 300, comment: "Title 1"
|
14
15
|
t.varchar "title2", limit: 300, comment: "Title 2"
|
15
16
|
t.text "description", null: true, comment: "Description"
|
@@ -10,6 +10,7 @@ end
|
|
10
10
|
|
11
11
|
create_table "papers", collate: "utf8_general_ci", comment: "Paper" do |t|
|
12
12
|
t.int "id", primary_key: true, extra: "auto_increment"
|
13
|
+
t.varchar "slug", comment: "Slug"
|
13
14
|
t.varchar "title1", limit: 300, comment: "Title 1"
|
14
15
|
t.varchar "title2", limit: 300, comment: "Title 2"
|
15
16
|
t.text "description", null: true, comment: "Description"
|
@@ -10,6 +10,7 @@ end
|
|
10
10
|
|
11
11
|
create_table "papers", collate: "utf8_general_ci", comment: "Paper" do |t|
|
12
12
|
t.int "id", primary_key: true, extra: "auto_increment"
|
13
|
+
t.varchar "slug", comment: "Slug"
|
13
14
|
t.varchar "title1", limit: 300, comment: "Title 1"
|
14
15
|
t.varchar "title2", limit: 300, comment: "Title 2"
|
15
16
|
t.text "description", null: true, comment: "Description"
|
@@ -10,6 +10,7 @@ end
|
|
10
10
|
|
11
11
|
create_table "papers", collate: "utf8_general_ci", comment: "Paper" do |t|
|
12
12
|
t.int "id", primary_key: true, extra: "auto_increment"
|
13
|
+
t.varchar "slug", comment: "Slug"
|
13
14
|
t.varchar "title1", limit: 300, comment: "Title 1"
|
14
15
|
t.varchar "title2", limit: 300, comment: "Title 2"
|
15
16
|
t.text "description", null: true, comment: "Description"
|
@@ -10,6 +10,7 @@ end
|
|
10
10
|
|
11
11
|
create_table "papers", collate: "utf8_general_ci", comment: "Paper" do |t|
|
12
12
|
t.int "id", primary_key: true, extra: "auto_increment"
|
13
|
+
t.varchar "slug", comment: "Slug"
|
13
14
|
t.varchar "title1", limit: 300, comment: "Title 1"
|
14
15
|
t.varchar "title2", limit: 300, comment: "Title 2"
|
15
16
|
t.text "description", null: true, comment: "Description"
|
@@ -9,6 +9,7 @@ end
|
|
9
9
|
|
10
10
|
create_table "papers", collate: "utf8_general_ci", comment: "Paper" do |t|
|
11
11
|
t.int "id", primary_key: true, extra: "auto_increment"
|
12
|
+
t.varchar "slug", comment: "Slug"
|
12
13
|
t.varchar "title1", limit: 300, comment: "Title 1"
|
13
14
|
t.varchar "title2", limit: 300, comment: "Title 2"
|
14
15
|
t.text "description", null: true, comment: "Description"
|
data/spec/fixtures/test_db.sql
CHANGED
@@ -4,10 +4,12 @@ DROP TABLE IF EXISTS `authors`;
|
|
4
4
|
|
5
5
|
CREATE TABLE `papers` (
|
6
6
|
`id` int(11) NOT NULL AUTO_INCREMENT,
|
7
|
+
`slug` varchar(255) NOT NULL COMMENT 'Slug',
|
7
8
|
`title1` varchar(300) NOT NULL COMMENT 'Title 1',
|
8
9
|
`title2` varchar(300) NOT NULL COMMENT 'Title 2',
|
9
10
|
`description` text COMMENT 'Description',
|
10
11
|
PRIMARY KEY (`id`),
|
12
|
+
UNIQUE KEY `index_papers_on_slug` (`slug`),
|
11
13
|
KEY `index_papers_on_title1_title2` (`title1` (100), `title2` (200))
|
12
14
|
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='Paper';
|
13
15
|
|
@@ -49,7 +49,7 @@ describe 'Command::Dryrun#execute' do
|
|
49
49
|
|
50
50
|
it 'should be output alter add column query' do
|
51
51
|
result = execute(exec_dsl)
|
52
|
-
expect(result).to be_include(
|
52
|
+
expect(result).to be_include("# ALTER TABLE `authors`\n# ADD COLUMN `add_column` varchar(110) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL AFTER `name`;")
|
53
53
|
end
|
54
54
|
end
|
55
55
|
|
@@ -58,7 +58,7 @@ describe 'Command::Dryrun#execute' do
|
|
58
58
|
|
59
59
|
it 'should be output alter drop column query' do
|
60
60
|
result = execute(exec_dsl)
|
61
|
-
expect(result).to be_include(
|
61
|
+
expect(result).to be_include("# ALTER TABLE `authors`\n# DROP COLUMN `name`;")
|
62
62
|
end
|
63
63
|
end
|
64
64
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: convergence
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Shinsuke Nishio
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04
|
11
|
+
date: 2017-07-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mysql2
|