convergence 0.1.0 → 0.1.1

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: 250c3b5fc317a0e1cefe3cec1e0db3bcaf5909b4
4
- data.tar.gz: 89758911b5fbbb7273f8bca63f077afd38c4aa1d
3
+ metadata.gz: 6e59c90548033df0d06ce497a7adab3c2b921c58
4
+ data.tar.gz: 626f2ad1f787eb43eb14ed04879bc371098d969a
5
5
  SHA512:
6
- metadata.gz: e7a1d469158863a27d516ab7e8af3f19dbbd7031bc6f122233a4a6e5978431c784c6aa69e4a492c8d25a212d8910ef55fb8365d84b6aa4ae132a76917af6c317
7
- data.tar.gz: 8bd402c806647e1e8c72c200e381a82a206094be6db93b3e15ba108e4ca82c81a38964100cfc8c720b34c9c7b854cc993d3f73c61ec0f4996237109ede345b62
6
+ metadata.gz: 48f0400326373ef4948cf104bbf585dc0e3e02e1a2f08da5353ef54b4f776ed36c4a2b6bd994c0b67e04307abfda7f79a8577cfb0c55f6f23f6773a49e6b5f33
7
+ data.tar.gz: bfb521f59e1cc1cc3599ee0f6df18a55ce54ba9a45fe81728c01fb4080185b28f6efc66e48c14bd572de33138a66118c77e9218e57b4dab18fdda47589886b27
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- convergence (0.1.0)
4
+ convergence (0.1.1)
5
5
  diff-lcs
6
6
  diffy
7
7
  mysql2
@@ -54,7 +54,7 @@ class Convergence::Dumper::MysqlSchemaDumper
54
54
  def select_index_definitions(database_name)
55
55
  mysql.query("
56
56
  SELECT
57
- DISTINCT S.TABLE_NAME, S.COLUMN_NAME, S.NON_UNIQUE, S.INDEX_NAME, S.SEQ_IN_INDEX, S.INDEX_TYPE,
57
+ DISTINCT S.TABLE_NAME, S.COLUMN_NAME, S.SUB_PART, S.NON_UNIQUE, S.INDEX_NAME, S.SEQ_IN_INDEX, S.INDEX_TYPE,
58
58
  IF(TC.CONSTRAINT_TYPE IS NULL, 'INDEX', TC.CONSTRAINT_TYPE) CONSTRAINT_TYPE,
59
59
  KCU.REFERENCED_TABLE_NAME, KCU.REFERENCED_COLUMN_NAME
60
60
  FROM
@@ -132,6 +132,8 @@ class Convergence::Dumper::MysqlSchemaDumper
132
132
  when 'INDEX', 'UNIQUE'
133
133
  options = { name: index_name, type: indexes.first['INDEX_TYPE'] }
134
134
  options.merge!(unique: true) if type == 'UNIQUE'
135
+ length = indexes.reject { |v| v['SUB_PART'].nil? }.reduce({}) { |a, e| a[e['COLUMN_NAME']] = e['SUB_PART']; a }
136
+ options.merge!(length: length) unless length.empty?
135
137
  table.index(columns, options)
136
138
  when 'FOREIGN KEY'
137
139
  to_table = indexes.first['REFERENCED_TABLE_NAME']
@@ -5,5 +5,31 @@ class Convergence::Index
5
5
  @index_name = index_name
6
6
  @index_columns = [index_columns].flatten.map(&:to_s)
7
7
  @options = { name: @index_name }.merge(options)
8
+ length = @options[:length]
9
+ case length
10
+ when Hash
11
+ @options[:length] = Hash[length.map { |k, v| [k.to_s, v] }]
12
+ when Fixnum
13
+ @options[:length] = Hash[@index_columns.map { |col| [col, length] }]
14
+ end
15
+ end
16
+
17
+ def quoted_columns
18
+ option_strings = Hash[@index_columns.map { |name| [name, ''] }]
19
+ option_strings = add_index_length(option_strings, @index_columns, @options)
20
+ @index_columns.map { |name| quote_column_name(name) + option_strings[name] }
21
+ end
22
+
23
+ private
24
+
25
+ def quote_column_name(name)
26
+ "`#{name.to_s.gsub('`', '``')}`"
27
+ end
28
+
29
+ def add_index_length(option_strings, column_names, options = {})
30
+ if length = options[:length]
31
+ column_names.each { |name| option_strings[name] += "(#{length[name]})" if length.has_key?(name) && !length[name].nil? }
32
+ end
33
+ option_strings
8
34
  end
9
35
  end
@@ -99,7 +99,7 @@ class SQLGenerator::MysqlGenerator < SQLGenerator
99
99
  def alter_add_index_sql(table_name, index)
100
100
  sql = 'CREATE'
101
101
  sql += ' UNIQUE' if index.options[:unique]
102
- sql += " INDEX `#{index.index_name}` ON `#{table_name}`(#{index.index_columns.join(',')});"
102
+ sql += " INDEX `#{index.index_name}` ON `#{table_name}`(#{index.quoted_columns.join(',')});"
103
103
  sql
104
104
  end
105
105
 
@@ -1,3 +1,3 @@
1
1
  module Convergence
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
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.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shinsuke Nishio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-10 00:00:00.000000000 Z
11
+ date: 2015-07-09 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2