aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record
diff options
context:
space:
mode:
authorMatthew Draper <matthew@trebex.net>2014-07-05 04:10:40 +0930
committerMatthew Draper <matthew@trebex.net>2014-07-05 04:10:40 +0930
commit2ad1dd24c69e7de0aad0579cfc1a206c2c7f6ecd (patch)
treeab7b1b2506a12424e0af390bd5499402a9fcc2b6 /activerecord/lib/active_record
parent3f2ec19c219a55842a1c7f52e3b4b2bf7b5dbb7b (diff)
downloadrails-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/active_record')
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb50
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: