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:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6e59c90548033df0d06ce497a7adab3c2b921c58
|
4
|
+
data.tar.gz: 626f2ad1f787eb43eb14ed04879bc371098d969a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 48f0400326373ef4948cf104bbf585dc0e3e02e1a2f08da5353ef54b4f776ed36c4a2b6bd994c0b67e04307abfda7f79a8577cfb0c55f6f23f6773a49e6b5f33
|
7
|
+
data.tar.gz: bfb521f59e1cc1cc3599ee0f6df18a55ce54ba9a45fe81728c01fb4080185b28f6efc66e48c14bd572de33138a66118c77e9218e57b4dab18fdda47589886b27
|
data/Gemfile.lock
CHANGED
@@ -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']
|
data/lib/convergence/index.rb
CHANGED
@@ -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.
|
102
|
+
sql += " INDEX `#{index.index_name}` ON `#{table_name}`(#{index.quoted_columns.join(',')});"
|
103
103
|
sql
|
104
104
|
end
|
105
105
|
|
data/lib/convergence/version.rb
CHANGED
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.
|
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-
|
11
|
+
date: 2015-07-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: mysql2
|