Module: ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::Quoting
- Defined in:
- lib/restpack_service/activerecord/postgres_array_patch.rb
Instance Method Summary collapse
-
#quote(value, column = nil) ⇒ Object
:nodoc:.
- #type_cast(value, column, array_member = false) ⇒ Object
Instance Method Details
#quote(value, column = nil) ⇒ Object
:nodoc:
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/restpack_service/activerecord/postgres_array_patch.rb', line 16 def quote(value, column = nil) #:nodoc: return super unless column sql_type = type_to_sql(column.type, column.limit, column.precision, column.scale) case value when Range if /range$/ =~ sql_type "'#{ActiveRecord::ConnectionAdapters::PostgreSQLColumn.range_to_string(value)}'::#{sql_type}" else super end when Array case sql_type when 'point' then super(ActiveRecord::ConnectionAdapters::PostgreSQLColumn.point_to_string(value)) when 'json' then super(ActiveRecord::ConnectionAdapters::PostgreSQLColumn.json_to_string(value)) else if column.array "'#{ActiveRecord::ConnectionAdapters::PostgreSQLColumn.array_to_string(value, column, self).gsub(/'/, "''")}'" else super end end when Hash case sql_type when 'hstore' then super(ActiveRecord::ConnectionAdapters::PostgreSQLColumn.hstore_to_string(value), column) when 'json' then super(ActiveRecord::ConnectionAdapters::PostgreSQLColumn.json_to_string(value), column) else super end when IPAddr case sql_type when 'inet', 'cidr' then super(ActiveRecord::ConnectionAdapters::PostgreSQLColumn.cidr_to_string(value), column) else super end when Float if value.infinite? && column.type == :datetime "'#{value.to_s.downcase}'" elsif value.infinite? || value.nan? "'#{value.to_s}'" else super end when Numeric if sql_type == 'money' || [:string, :text].include?(column.type) # Not truly string input, so doesn't require (or allow) escape string syntax. "'#{value}'" else super end when String case sql_type when 'bytea' then "'#{escape_bytea(value)}'" when 'xml' then "xml '#{quote_string(value)}'" when /^bit/ case value when /^[01]*$/ then "B'#{value}'" # Bit-string notation when /^[0-9A-F]*$/i then "X'#{value}'" # Hexadecimal notation end else super end else super end end |
#type_cast(value, column, array_member = false) ⇒ Object
82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 |
# File 'lib/restpack_service/activerecord/postgres_array_patch.rb', line 82 def type_cast(value, column, array_member = false) return super(value, column) unless column case value when Range return super(value, column) unless /range$/ =~ column.sql_type ActiveRecord::ConnectionAdapters::PostgreSQLColumn.range_to_string(value) when NilClass if column.array && array_member 'NULL' elsif column.array value else super(value, column) end when Array case column.sql_type when 'point' then ActiveRecord::ConnectionAdapters::PostgreSQLColumn.point_to_string(value) when 'json' then ActiveRecord::ConnectionAdapters::PostgreSQLColumn.json_to_string(value) else return super(value, column) unless column.array ActiveRecord::ConnectionAdapters::PostgreSQLColumn.array_to_string(value, column, self) end when String return super(value, column) unless 'bytea' == column.sql_type { :value => value, :format => 1 } when Hash case column.sql_type when 'hstore' then ActiveRecord::ConnectionAdapters::PostgreSQLColumn.hstore_to_string(value) when 'json' then ActiveRecord::ConnectionAdapters::PostgreSQLColumn.json_to_string(value) else super(value, column) end when IPAddr return super(value, column) unless ['inet','cidr'].include? column.sql_type ActiveRecord::ConnectionAdapters::PostgreSQLColumn.cidr_to_string(value) else super(value, column) end end |