Skip to content
Browse files

Move `extract_precision` onto type objects

  • Loading branch information...
1 parent 35c1600 commit 55400052186c3b3cb15c86f38ee266e5dafed696 Dan Croak and Sean Griffin committed with croaky May 21, 2014
View
6 activerecord/lib/active_record/connection_adapters/column.rb
@@ -69,15 +69,11 @@ def extract_default(default)
end
private
- delegate :extract_scale, to: :cast_type
+ delegate :extract_scale, :extract_precision, to: :cast_type
def extract_limit(sql_type)
$1.to_i if sql_type =~ /\((.*)\)/
end
-
- def extract_precision(sql_type)
- $2.to_i if sql_type =~ /^(numeric|decimal|number)\((\d+)(,\d+)?\)/i
- end
end
end
# :startdoc:
View
13 activerecord/lib/active_record/connection_adapters/postgresql/column.rb
@@ -35,8 +35,6 @@ class << self
require 'active_record/connection_adapters/postgresql/array_parser'
include PostgreSQL::ArrayParser
end
-
- attr_accessor :money_precision
end
# :startdoc:
@@ -121,17 +119,6 @@ def extract_limit(sql_type)
else super
end
end
-
- # Extracts the precision from PostgreSQL-specific data types.
- def extract_precision(sql_type)
- if sql_type == 'money'
- self.class.money_precision
- elsif sql_type =~ /timestamp/i
- $1.to_i if sql_type =~ /\((\d+)\)/
- else
- super
- end
- end
end
end
end
View
2 activerecord/lib/active_record/connection_adapters/postgresql/oid/money.rb
@@ -5,6 +5,8 @@ module OID # :nodoc:
class Money < Type::Decimal
include Infinity
+ class_attribute :precision
+
def extract_scale(sql_type)
2
end
View
2 activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb
@@ -713,7 +713,7 @@ def connect
# Money type has a fixed precision of 10 in PostgreSQL 8.2 and below, and as of
# PostgreSQL 8.3 it has a fixed precision of 19. PostgreSQLColumn.extract_precision
# should know about this but can't detect it there, so deal with it here.
- PostgreSQLColumn.money_precision = (postgresql_version >= 80300) ? 19 : 10
+ OID::Money.precision = (postgresql_version >= 80300) ? 19 : 10
configure_connection
rescue ::PG::Error => error
View
4 activerecord/lib/active_record/connection_adapters/type/date_time.rb
@@ -8,6 +8,10 @@ def type
:datetime
end
+ def extract_precision(sql_type)
+ $1.to_i if sql_type =~ /\((\d+)\)/
+ end
+
private
def cast_value(string)
View
4 activerecord/lib/active_record/connection_adapters/type/numeric.rb
@@ -14,6 +14,10 @@ def type_cast_for_write(value)
else super
end
end
+
+ def extract_precision(sql_type)
+ $1.to_i if sql_type =~ /\((\d+)(,\d+)?\)/
+ end
end
end
end
View
3 activerecord/lib/active_record/connection_adapters/type/value.rb
@@ -3,8 +3,11 @@ module ConnectionAdapters
module Type
class Value # :nodoc:
def type; end
+
def extract_scale(sql_type); end
+ def extract_precision(sql_type); end
+
def type_cast(value)
cast_value(value) unless value.nil?
end

0 comments on commit 5540005

Please sign in to comment.
Something went wrong with that request. Please try again.