提交 55400052 编写于 作者: D Dan Croak and Sean Griffin 提交者: Dan Croak

Move `extract_precision` onto type objects

上级 35c16006
......@@ -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:
......
......@@ -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
......@@ -5,6 +5,8 @@ module OID # :nodoc:
class Money < Type::Decimal
include Infinity
class_attribute :precision
def extract_scale(sql_type)
2
end
......
......@@ -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
......
......@@ -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)
......
......@@ -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
......
......@@ -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
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册