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 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