activerecord-mysql-unsigned 0.0.3 → 0.1.0
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/README.md +1 -1
- data/activerecord-mysql-unsigned.gemspec +2 -2
- data/lib/activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract/schema_dumper.rb +36 -0
- data/lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_definitions.rb +40 -0
- data/lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_dumper.rb +35 -0
- data/lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_statements.rb +35 -0
- data/lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract_mysql_adapter.rb +83 -0
- data/lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/mysql2_adapter.rb +22 -0
- data/lib/activerecord-mysql-unsigned/base.rb +8 -1
- data/lib/activerecord-mysql-unsigned/version.rb +1 -1
- metadata +20 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d6986cc447a7c7abec51a46bcf834c5b5e775a17
|
4
|
+
data.tar.gz: a3936fb361b69df48c1d147cbcd61c657e346105
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16b5249d0028891abc806b1f292df3f86c06f734c51c9d815f5a25fa97b5fc4e02bfa41db5830ed77cd21a30633394f42c29d805bf672ffa6021f993e8e93a68
|
7
|
+
data.tar.gz: a74d7a96a632d0bdf5a3e0dc4daefc9aa42fc9ce9dc2af87ecdf208e1aa96428d89bcdb389f1dedd52735c87fa91f6eceacee2f3ea530d95b6c94a01d1d9357f
|
data/README.md
CHANGED
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.add_development_dependency "rake"
|
23
23
|
spec.add_development_dependency "rspec"
|
24
24
|
spec.add_development_dependency "database_cleaner"
|
25
|
-
spec.add_runtime_dependency "activesupport", ">= 3.2"
|
26
|
-
spec.add_runtime_dependency "activerecord", ">= 3.2"
|
25
|
+
spec.add_runtime_dependency "activesupport", ">= 3.2", "<= 4.1"
|
26
|
+
spec.add_runtime_dependency "activerecord", ">= 3.2", "<= 4.1"
|
27
27
|
spec.add_runtime_dependency "mysql2"
|
28
28
|
end
|
data/lib/activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract/schema_dumper.rb
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
require 'active_record/connection_adapters/abstract/schema_dumper'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters # :nodoc:
|
5
|
+
|
6
|
+
module ColumnDumper
|
7
|
+
|
8
|
+
def prepare_column_options(column, types)
|
9
|
+
spec = {}
|
10
|
+
#binding.pry if column.name.include?("ip")
|
11
|
+
spec[:name] = column.name.inspect
|
12
|
+
|
13
|
+
# AR has an optimization which handles zero-scale decimals as integers. This
|
14
|
+
# code ensures that the dumper still dumps the column as a decimal.
|
15
|
+
spec[:type] = if column.type == :integer && /^(numeric|decimal)/ =~ column.sql_type
|
16
|
+
'decimal'
|
17
|
+
else
|
18
|
+
column.type.to_s
|
19
|
+
end
|
20
|
+
spec[:limit] = column.limit.inspect if column.limit != types[column.type][:limit] && spec[:type] != 'decimal'
|
21
|
+
spec[:precision] = column.precision.inspect if column.precision
|
22
|
+
spec[:scale] = column.scale.inspect if column.scale
|
23
|
+
spec[:null] = 'false' unless column.null
|
24
|
+
spec[:unsigned] = 'true' if column.unsigned
|
25
|
+
spec[:default] = default_string(column.default) if column.has_default?
|
26
|
+
spec
|
27
|
+
end
|
28
|
+
# Lists the valid migration options
|
29
|
+
def migration_keys
|
30
|
+
[:name, :limit, :precision, :unsigned, :scale, :default, :null]
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'active_record/connection_adapters/abstract/schema_definitions'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters
|
5
|
+
class ColumnDefinition
|
6
|
+
|
7
|
+
def unsigned=(value)
|
8
|
+
@unsigned = value
|
9
|
+
end
|
10
|
+
|
11
|
+
def unsigned
|
12
|
+
@unsigned
|
13
|
+
end
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
class TableDefinition
|
18
|
+
|
19
|
+
def new_column_definition(name, type, options)
|
20
|
+
column = create_column_definition name, type
|
21
|
+
limit = options.fetch(:limit) do
|
22
|
+
native[type][:limit] if native[type].is_a?(Hash)
|
23
|
+
end
|
24
|
+
|
25
|
+
column.limit = limit
|
26
|
+
column.array = options[:array] if column.respond_to?(:array)
|
27
|
+
column.precision = options[:precision]
|
28
|
+
column.scale = options[:scale]
|
29
|
+
column.unsigned = options[:unsigned]
|
30
|
+
column.default = options[:default]
|
31
|
+
column.null = options[:null]
|
32
|
+
column.first = options[:first]
|
33
|
+
column.after = options[:after]
|
34
|
+
column.primary_key = type == :primary_key || options[:primary_key]
|
35
|
+
column
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'active_record/connection_adapters/abstract/schema_dumper'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters # :nodoc:
|
5
|
+
module ColumnDumper
|
6
|
+
|
7
|
+
def prepare_column_options(column, types)
|
8
|
+
spec = {}
|
9
|
+
#binding.pry if column.name.include?("ip")
|
10
|
+
spec[:name] = column.name.inspect
|
11
|
+
|
12
|
+
# AR has an optimization which handles zero-scale decimals as integers. This
|
13
|
+
# code ensures that the dumper still dumps the column as a decimal.
|
14
|
+
spec[:type] = if column.type == :integer && /^(numeric|decimal)/ =~ column.sql_type
|
15
|
+
'decimal'
|
16
|
+
else
|
17
|
+
column.type.to_s
|
18
|
+
end
|
19
|
+
spec[:limit] = column.limit.inspect if column.limit != types[column.type][:limit] && spec[:type] != 'decimal'
|
20
|
+
spec[:precision] = column.precision.inspect if column.precision
|
21
|
+
spec[:scale] = column.scale.inspect if column.scale
|
22
|
+
spec[:null] = 'false' unless column.null
|
23
|
+
spec[:unsigned] = 'true' if column.unsigned
|
24
|
+
spec[:default] = default_string(column.default) if column.has_default?
|
25
|
+
spec
|
26
|
+
end
|
27
|
+
|
28
|
+
# Lists the valid migration options
|
29
|
+
def migration_keys
|
30
|
+
[:name, :limit, :precision, :unsigned, :scale, :default, :null]
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'active_record/connection_adapters/abstract/schema_statements'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters
|
5
|
+
module SchemaStatements
|
6
|
+
|
7
|
+
def type_to_sql(type, limit = nil, precision = nil, scale = nil, unsigned = nil)
|
8
|
+
if native = native_database_types[type.to_sym]
|
9
|
+
column_type_sql = (native.is_a?(Hash) ? native[:name] : native).dup
|
10
|
+
|
11
|
+
if type == :decimal
|
12
|
+
scale ||= native[:scale]
|
13
|
+
|
14
|
+
if precision ||= native[:precision]
|
15
|
+
if scale
|
16
|
+
column_type_sql << "(#{precision},#{scale})"
|
17
|
+
else
|
18
|
+
column_type_sql << "(#{precision})"
|
19
|
+
end
|
20
|
+
elsif scale
|
21
|
+
raise ArgumentError, "Error adding decimal column: precision cannot be empty if scale is specified"
|
22
|
+
end
|
23
|
+
elsif (type != :primary_key) && (limit ||= native.is_a?(Hash) && native[:limit])
|
24
|
+
column_type_sql << "(#{limit})"
|
25
|
+
end
|
26
|
+
|
27
|
+
column_type_sql
|
28
|
+
else
|
29
|
+
type
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'active_record/connection_adapters/abstract_mysql_adapter'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters
|
5
|
+
class AbstractMysqlAdapter < AbstractAdapter
|
6
|
+
|
7
|
+
class SchemaCreation < AbstractAdapter::SchemaCreation
|
8
|
+
|
9
|
+
def visit_AddColumn(o)
|
10
|
+
sql_type = type_to_sql(o.type.to_sym, o.limit, o.precision, o.scale, o.unsigned)
|
11
|
+
sql = "ADD #{quote_column_name(o.name)} #{sql_type}"
|
12
|
+
add_column_options!(sql, column_options(o))
|
13
|
+
end
|
14
|
+
|
15
|
+
def visit_ChangeColumnDefinition(o)
|
16
|
+
column = o.column
|
17
|
+
options = o.options
|
18
|
+
sql_type = type_to_sql(o.type, options[:limit], options[:precision], options[:scale], options[:unsigned])
|
19
|
+
change_column_sql = "CHANGE #{quote_column_name(column.name)} #{quote_column_name(options[:name])} #{sql_type}"
|
20
|
+
add_column_options!(change_column_sql, options)
|
21
|
+
add_column_position!(change_column_sql, options)
|
22
|
+
end
|
23
|
+
|
24
|
+
def visit_ColumnDefinition(o)
|
25
|
+
sql_type = type_to_sql(o.type.to_sym, o.limit, o.precision, o.scale, o.unsigned)
|
26
|
+
column_sql = "#{quote_column_name(o.name)} #{sql_type}"
|
27
|
+
add_column_options!(column_sql, column_options(o)) unless o.primary_key?
|
28
|
+
column_sql
|
29
|
+
end
|
30
|
+
|
31
|
+
def type_to_sql(type, limit, precision, scale, unsigned)
|
32
|
+
@conn.type_to_sql type.to_sym, limit, precision, scale, unsigned
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
NATIVE_DATABASE_TYPES.merge!(
|
37
|
+
:primary_key => "int(10) unsigned DEFAULT NULL auto_increment PRIMARY KEY"
|
38
|
+
)
|
39
|
+
|
40
|
+
# Maps logical Rails types to MySQL-specific data types.
|
41
|
+
def type_to_sql(type, limit = nil, precision = nil, scale = nil, unsigned = false)
|
42
|
+
case type.to_s
|
43
|
+
when 'binary'
|
44
|
+
case limit
|
45
|
+
when 0..0xfff; "varbinary(#{limit})"
|
46
|
+
when nil; "blob"
|
47
|
+
when 0x1000..0xffffffff; "blob(#{limit})"
|
48
|
+
else raise(ActiveRecordError, "No binary type has character length #{limit}")
|
49
|
+
end
|
50
|
+
when 'integer'
|
51
|
+
case limit
|
52
|
+
when 1
|
53
|
+
'tinyint' + (unsigned ? ' unsigned' : '')
|
54
|
+
when 2
|
55
|
+
'smallint' + (unsigned ? ' unsigned' : '')
|
56
|
+
when 3
|
57
|
+
'mediumint' + (unsigned ? ' unsigned' : '')
|
58
|
+
when nil, 4, 11 # compatibility with MySQL default
|
59
|
+
if unsigned
|
60
|
+
'int(10) unsigned'
|
61
|
+
else
|
62
|
+
'int(10)'
|
63
|
+
end
|
64
|
+
when 5..8
|
65
|
+
'bigint' + (unsigned ? ' unsigned' : '')
|
66
|
+
else raise(ActiveRecordError, "No integer type has byte size #{limit}")
|
67
|
+
end
|
68
|
+
when 'text'
|
69
|
+
case limit
|
70
|
+
when 0..0xff; 'tinytext'
|
71
|
+
when nil, 0x100..0xffff; 'text'
|
72
|
+
when 0x10000..0xffffff; 'mediumtext'
|
73
|
+
when 0x1000000..0xffffffff; 'longtext'
|
74
|
+
else raise(ActiveRecordError, "No text type has character length #{limit}")
|
75
|
+
end
|
76
|
+
else
|
77
|
+
super
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'active_record/connection_adapters/mysql2_adapter'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module ConnectionAdapters
|
5
|
+
class Mysql2Adapter < AbstractMysqlAdapter
|
6
|
+
|
7
|
+
class Column < AbstractMysqlAdapter::Column
|
8
|
+
attr_reader :unsigned
|
9
|
+
|
10
|
+
def initialize(name, default, sql_type = nil, null = true, collation = nil, strict = false, extra = "")
|
11
|
+
if sql_type.present?
|
12
|
+
@unsigned = sql_type.include? "unsigned"
|
13
|
+
else
|
14
|
+
@unsigned = false
|
15
|
+
end
|
16
|
+
super(name, default, sql_type, null, collation, strict, extra)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,6 +1,13 @@
|
|
1
|
-
if ActiveRecord::VERSION::MAJOR == 4
|
1
|
+
if ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 1
|
2
|
+
require 'activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_definitions'
|
3
|
+
require 'activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_statements'
|
4
|
+
require 'activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_dumper'
|
5
|
+
require 'activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract_mysql_adapter'
|
6
|
+
require 'activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/mysql2_adapter'
|
7
|
+
elsif ActiveRecord::VERSION::MAJOR == 4 && ActiveRecord::VERSION::MINOR == 0
|
2
8
|
require 'activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract/schema_definitions'
|
3
9
|
require 'activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract/schema_statements'
|
10
|
+
require 'activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract/schema_dumper'
|
4
11
|
require 'activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract_adapter'
|
5
12
|
require 'activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract_mysql_adapter'
|
6
13
|
require 'activerecord-mysql-unsigned/active_record/v4/connection_adapters/mysql2_adapter'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: activerecord-mysql-unsigned
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yo_waka
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -73,6 +73,9 @@ dependencies:
|
|
73
73
|
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
75
|
version: '3.2'
|
76
|
+
- - "<="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '4.1'
|
76
79
|
type: :runtime
|
77
80
|
prerelease: false
|
78
81
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -80,6 +83,9 @@ dependencies:
|
|
80
83
|
- - ">="
|
81
84
|
- !ruby/object:Gem::Version
|
82
85
|
version: '3.2'
|
86
|
+
- - "<="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: '4.1'
|
83
89
|
- !ruby/object:Gem::Dependency
|
84
90
|
name: activerecord
|
85
91
|
requirement: !ruby/object:Gem::Requirement
|
@@ -87,6 +93,9 @@ dependencies:
|
|
87
93
|
- - ">="
|
88
94
|
- !ruby/object:Gem::Version
|
89
95
|
version: '3.2'
|
96
|
+
- - "<="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '4.1'
|
90
99
|
type: :runtime
|
91
100
|
prerelease: false
|
92
101
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -94,6 +103,9 @@ dependencies:
|
|
94
103
|
- - ">="
|
95
104
|
- !ruby/object:Gem::Version
|
96
105
|
version: '3.2'
|
106
|
+
- - "<="
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '4.1'
|
97
109
|
- !ruby/object:Gem::Dependency
|
98
110
|
name: mysql2
|
99
111
|
requirement: !ruby/object:Gem::Requirement
|
@@ -128,10 +140,16 @@ files:
|
|
128
140
|
- lib/activerecord-mysql-unsigned/active_record/v3/connection_adapters/abstract_mysql_adapter.rb
|
129
141
|
- lib/activerecord-mysql-unsigned/active_record/v3/connection_adapters/mysql2_adapter.rb
|
130
142
|
- lib/activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract/schema_definitions.rb
|
143
|
+
- lib/activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract/schema_dumper.rb
|
131
144
|
- lib/activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract/schema_statements.rb
|
132
145
|
- lib/activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract_adapter.rb
|
133
146
|
- lib/activerecord-mysql-unsigned/active_record/v4/connection_adapters/abstract_mysql_adapter.rb
|
134
147
|
- lib/activerecord-mysql-unsigned/active_record/v4/connection_adapters/mysql2_adapter.rb
|
148
|
+
- lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_definitions.rb
|
149
|
+
- lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_dumper.rb
|
150
|
+
- lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract/schema_statements.rb
|
151
|
+
- lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/abstract_mysql_adapter.rb
|
152
|
+
- lib/activerecord-mysql-unsigned/active_record/v4_1/connection_adapters/mysql2_adapter.rb
|
135
153
|
- lib/activerecord-mysql-unsigned/base.rb
|
136
154
|
- lib/activerecord-mysql-unsigned/railtie.rb
|
137
155
|
- lib/activerecord-mysql-unsigned/version.rb
|