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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3b12f3181a2e03ee7b621f7792ff9eb989b75703
4
- data.tar.gz: b39515cf01e432fa897b8ccf519f71e84bf9b38f
3
+ metadata.gz: fdccd6dd4ac4264484a20ecc96f23604c2f618a3
4
+ data.tar.gz: 6c57e11df4937fb26b2653bf73de9db2b33874ff
5
5
  SHA512:
6
- metadata.gz: d89e181a5b46fc35c8018d24f624c6affc7ca15f6f0653d064f6b3748617ebcab8ec45625427e0a4d8b61d444739f60d218ef023b5c82cdce153616df670330a
7
- data.tar.gz: fe642c65fd73b6387bb5ca9e11d062afedab91820766410984a4c503768b8f47bbe8c7c6773dad9c15d892153fdff5790fde83b6e9cf85f5fecb22b64050c933
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.1)
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.5)
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.13.6
91
+ 1.15.1
@@ -70,7 +70,7 @@ class Convergence::DefaultParameter::MysqlDefaultParameter
70
70
  limit: 255
71
71
  }
72
72
  }
73
- DEFAULT_INDEX_PARAMETERS = { type: 'BTREE' }
73
+ DEFAULT_INDEX_PARAMETERS = { type: 'BTREE', unique: false }
74
74
 
75
75
  def initialize
76
76
  end
@@ -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].each do |index_name, _foreign_key|
32
- results << alter_remove_foreign_key_sql(table_name, index_name)
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].each do |_column_name, column|
38
- results << alter_remove_column_sql(table_name, column)
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].each do |_column_name, column|
41
- results << alter_add_column_sql(table_name, column)
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].each do |_index_name, foreign_key|
50
- results << alter_add_foreign_key_sql(table_name, foreign_key)
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 alter_add_column_sql(table_name, column)
60
- %(ALTER TABLE `#{table_name}` ADD COLUMN #{create_column_sql(column, output_primary_key: true)};)
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 alter_remove_column_sql(table_name, column)
64
- %(ALTER TABLE `#{table_name}` DROP COLUMN `#{column.column_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 alter_remove_foreign_key_sql(table_name, index_name)
108
- sql = %(ALTER TABLE `#{table_name}` DROP FOREIGN KEY `#{index_name}`;\n)
109
- sql += alter_remove_index_sql(table_name, index_name)
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(table_name, foreign_key)
114
- sql = %(ALTER TABLE `#{table_name}` ADD CONSTRAINT `#{foreign_key.key_name}` FOREIGN KEY )
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
 
@@ -1,3 +1,3 @@
1
1
  module Convergence
2
- VERSION = '0.2.1'
2
+ VERSION = '0.2.2'
3
3
  end
@@ -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"
@@ -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('# ALTER TABLE `authors` ADD COLUMN `add_column` varchar(110) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL AFTER `name`;')
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('# ALTER TABLE `authors` DROP COLUMN `name`;')
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.1
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-10 00:00:00.000000000 Z
11
+ date: 2017-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2