convergence 0.2.1 → 0.2.2
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 +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
|