1
1
# frozen_string_literal: true
2
2
3
3
require "active_support/core_ext/big_decimal/conversions"
4
- require "active_support/multibyte/chars"
5
4
6
5
module ActiveRecord
7
6
module ConnectionAdapters # :nodoc:
@@ -72,7 +71,7 @@ def quote_table_name(table_name)
72
71
# {SQL injection attacks}[https://en.wikipedia.org/wiki/SQL_injection].
73
72
def quote ( value )
74
73
case value
75
- when String , Symbol , ActiveSupport :: Multibyte :: Chars
74
+ when String , Symbol
76
75
"'#{ quote_string ( value . to_s ) } '"
77
76
when true then quoted_true
78
77
when false then quoted_false
@@ -84,7 +83,12 @@ def quote(value)
84
83
when Type ::Time ::Value then "'#{ quoted_time ( value ) } '"
85
84
when Date , Time then "'#{ quoted_date ( value ) } '"
86
85
when Class then "'#{ value } '"
87
- else raise TypeError , "can't quote #{ value . class . name } "
86
+ else
87
+ if value . class . name == "ActiveSupport::Multibyte::Chars"
88
+ "'#{ quote_string ( value . to_s ) } '"
89
+ else
90
+ raise TypeError , "can't quote #{ value . class . name } "
91
+ end
88
92
end
89
93
end
90
94
@@ -93,7 +97,7 @@ def quote(value)
93
97
# to a String.
94
98
def type_cast ( value )
95
99
case value
96
- when Symbol , ActiveSupport :: Multibyte :: Chars , Type ::Binary ::Data
100
+ when Symbol , Type ::Binary ::Data
97
101
value . to_s
98
102
when true then unquoted_true
99
103
when false then unquoted_false
@@ -102,7 +106,12 @@ def type_cast(value)
102
106
when nil , Numeric , String then value
103
107
when Type ::Time ::Value then quoted_time ( value )
104
108
when Date , Time then quoted_date ( value )
105
- else raise TypeError , "can't cast #{ value . class . name } "
109
+ else
110
+ if value . class . name == "ActiveSupport::Multibyte::Chars"
111
+ value . to_s
112
+ else
113
+ raise TypeError , "can't cast #{ value . class . name } "
114
+ end
106
115
end
107
116
end
108
117
0 commit comments