модуль ActiveRecord::ConnectionAdapters::Quoting
Открытые методы экземпляров
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 67
def fetch_type_metadata(sql_type)
cast_type = lookup_cast_type(sql_type)
SqlTypeMetadata.new(
sql_type: sql_type,
type: cast_type.type,
limit: cast_type.limit,
precision: cast_type.precision,
scale: cast_type.scale,
)
end # File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 9
def quote(value, column = nil)
# records are quoted as their primary key
return value.quoted_id if value.respond_to?(:quoted_id)
if column
ActiveSupport::Deprecation.warn(" Passing a column to `quote` has been deprecated. It is only used
for type casting, which should be handled elsewhere. See
https://github.com/rails/arel/commit/6160bfbda1d1781c3b08a33ec4955f170e95be11
for more information.
".squish)
value = type_cast_from_column(column, value)
end
_quote(value)
end Приводит значение столбца к кавычкам, чтобы предотвратить атаки SQL-инъекций.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 85 def quote_column_name(column_name) column_name.to_s end
Приводит имя столбца к кавычкам. По умолчанию кавычки не используются.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 80
def quote_string(s)
s.gsub('\'.freeze, '\&\&'.freeze).gsub("'".freeze, "''".freeze) # ' (for ruby-mode)
end Приводит строку к кавычкам, экранируя символы ' (одинарная кавычка) и \ (обратный слэш).
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 90 def quote_table_name(table_name) quote_column_name(table_name) end
Приводит имя таблицы к кавычкам. По умолчанию используется цитирование имен столбцов.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 102
def quote_table_name_for_assignment(table, attr)
quote_table_name("#{table}.#{attr}")
end Переопределяет метод для возвращения имени таблицы в кавычках для присваивания. По умолчанию используется цитирование имен таблиц.
Это работает для mysql2, где table.column может использоваться для разрешения неоднозначности.
Мы переопределяем это в адаптерах sqlite3 и postgresql, чтобы использовать только имя столбца (в соответствии с требованиями синтаксиса).
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 133
def quoted_date(value)
if value.acts_like?(:time)
zone_conversion_method = ActiveRecord::Base.default_timezone == :utc ? :getutc : :getlocal
if value.respond_to?(zone_conversion_method)
value = value.send(zone_conversion_method)
end
end
result = value.to_s(:db)
if value.respond_to?(:usec) && value.usec > 0
"#{result}.#{sprintf("%06d", value.usec)}"
else
result
end
end Приводит значения даты/времени к кавычкам для использования в SQL-вводе. Включает микросекунды, если значение является объектом Time и реагирует на usec.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 123 def quoted_false "'f'".freeze end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 115 def quoted_true "'t'".freeze end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 29
def type_cast(value, column = nil)
if value.respond_to?(:quoted_id) && value.respond_to?(:id)
return value.id
end
if column
value = type_cast_from_column(column, value)
end
_type_cast(value)
rescue TypeError
to_type = column ? " to #{column.type}" : ""
raise TypeError, "can't cast #{value.class}#{to_type}"
end Преобразует значение к типу, понятому базой данных. Например, SQLite не понимает даты, поэтому этот метод преобразует Date в String.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 127 def unquoted_false 'f'.freeze end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 119 def unquoted_true 't'.freeze end
© 2004–2018 David Heinemeier Hansson
Licensed under the MIT License.