diff options
author | Matthew Draper <matthew@trebex.net> | 2014-07-05 04:10:40 +0930 |
---|---|---|
committer | Matthew Draper <matthew@trebex.net> | 2014-07-05 04:10:40 +0930 |
commit | 2ad1dd24c69e7de0aad0579cfc1a206c2c7f6ecd (patch) | |
tree | ab7b1b2506a12424e0af390bd5499402a9fcc2b6 /activerecord/lib | |
parent | 3f2ec19c219a55842a1c7f52e3b4b2bf7b5dbb7b (diff) | |
download | rails-2ad1dd24c69e7de0aad0579cfc1a206c2c7f6ecd.tar.gz rails-2ad1dd24c69e7de0aad0579cfc1a206c2c7f6ecd.tar.bz2 rails-2ad1dd24c69e7de0aad0579cfc1a206c2c7f6ecd.zip |
Revert "Use a type object for type casting behavior on SQLite3"
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb | 50 |
1 files changed, 13 insertions, 37 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb index 360922dfaa..e6163771e8 100644 --- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb @@ -50,34 +50,6 @@ module ActiveRecord end end - class SQLite3String < Type::String # :nodoc: - def initialize(logger, *args) - @logger = logger - super(*args) - end - - def type_cast_for_database(value) - return unless value - - if value.encoding == Encoding::ASCII_8BIT - @logger.error "Binary data inserted for `string` type" if @logger - value.encode Encoding::UTF_8 - else - value - end - end - - class Factory - def initialize(logger) - @logger = logger - end - - def new(*args) - SQLite3String.new(@logger, *args) - end - end - end - # The SQLite3 adapter works SQLite 3.6.16 or newer # with the sqlite3-ruby drivers (available as gem from https://rubygems.org/gems/sqlite3). # @@ -255,14 +227,6 @@ module ActiveRecord end end - def _type_cast(value) # :nodoc: - if value.is_a?(BigDecimal) - value.to_f - else - super - end - end - def quote_string(s) #:nodoc: @connection.class.quote(s) end @@ -285,6 +249,19 @@ module ActiveRecord end end + def type_cast(value, column) # :nodoc: + return value.to_f if BigDecimal === value + return super unless String === value + return super unless column && value + + value = super + if column.type == :string && value.encoding == Encoding::ASCII_8BIT + logger.error "Binary data inserted for `string` type on column `#{column.name}`" if logger + value = value.encode Encoding::UTF_8 + end + value + end + # DATABASE STATEMENTS ====================================== def explain(arel, binds = []) @@ -526,7 +503,6 @@ module ActiveRecord def initialize_type_map(m) super m.register_type(/binary/i, SQLite3Binary.new) - register_class_with_limit m, %r(char)i, SQLite3String::Factory.new(logger) end def select(sql, name = nil, binds = []) #:nodoc: |