модуль ActiveRecord::ConnectionAdapters::Quoting
Общедоступные методы экземпляра
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 11
def quote(value)
if value.is_a?(Base)
ActiveSupport::Deprecation.warn(<<~MSG)
Passing an Active Record object to `quote` directly is deprecated
and will be no longer quoted as id value in Rails 6.2.
MSG
value = value.id_for_database
end
_quote(value)
end Приводит значение столбца к цитируемому виду, чтобы предотвратить атаки SQL-инъекций.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 66 def quote_column_name(column_name) column_name.to_s end
Приводит имя столбца к цитируемому виду. По умолчанию цитирование не используется.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 61
def quote_string(s)
s.gsub('\\', '\&\&').gsub("'", "''") # ' (for ruby-mode)
end Приводит строку к цитируемому виду, экранируя все символы ' (одинарная кавычка) и \ (обратный слэш).
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 71 def quote_table_name(table_name) quote_column_name(table_name) end
Приводит имя таблицы к цитируемому виду. По умолчанию используется цитирование имени столбца.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 83
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 114
def quoted_date(value)
if value.acts_like?(:time)
if ActiveRecord::Base.default_timezone == :utc
value = value.getutc if value.respond_to?(:getutc) && !value.utc?
else
value = value.getlocal if value.respond_to?(:getlocal)
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 104 def quoted_false "FALSE" end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 96 def quoted_true "TRUE" end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 26
def type_cast(value, column = nil)
if value.is_a?(Base)
ActiveSupport::Deprecation.warn(<<~MSG)
Passing an Active Record object to `type_cast` directly is deprecated
and will be no longer type casted as id value in Rails 6.2.
MSG
value = value.id_for_database
end
if column
ActiveSupport::Deprecation.warn(<<~MSG)
Passing a column to `type_cast` is deprecated and will be removed in Rails 6.2.
MSG
type = lookup_cast_type_from_column(column)
value = type.serialize(value)
end
_type_cast(value)
end Преобразует значение value в тип, понятный базе данных. Например, SQLite не понимает даты, поэтому этот метод преобразует Date в String.
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 108 def unquoted_false false end
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 100 def unquoted_true true end
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.