Spec-Zone.ru › Ruby on Rails 7.0

модуль ActiveRecord::ConnectionAdapters::Quoting

Публичные методы экземпляров

quote(value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 11
def quote(value)
  case value
  when String, Symbol, ActiveSupport::Multibyte::Chars
    "'#{quote_string(value.to_s)}'"
  when true       then quoted_true
  when false      then quoted_false
  when nil        then "NULL"
  # BigDecimals need to be put in a non-normalized form and quoted.
  when BigDecimal then value.to_s("F")
  when Numeric, ActiveSupport::Duration then value.to_s
  when Type::Binary::Data then quoted_binary(value)
  when Type::Time::Value then "'#{quoted_time(value)}'"
  when Date, Time then "'#{quoted_date(value)}'"
  when Class      then "'#{value}'"
  else raise TypeError, "can't quote #{value.class.name}"
  end
end

Приводит значение столбца к кавычкам, чтобы предотвратить атаки SQL-инъекций.

quote_bound_value(value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 50
def quote_bound_value(value)
  quote(value)
end

Приводит значение к кавычкам для использования в качестве параметра привязки неизвестного типа. Например, MySQL может выполнить опасное приведение типов при сравнении строки с числом, поэтому этот метод преобразует числа в строки.

quote_column_name(column_name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 74
def quote_column_name(column_name)
  column_name.to_s
end

Приводит имя столбца к кавычкам. По умолчанию кавычки не используются.

quote_string(s) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 69
def quote_string(s)
  s.gsub("\\", '\&\&').gsub("'", "''") # ' (for ruby-mode)
end

Приводит строку к кавычкам, экранируя символы ' (одинарная кавычка) и \ (обратный слэш).

quote_table_name(table_name) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 79
def quote_table_name(table_name)
  quote_column_name(table_name)
end

Приводит имя таблицы к кавычкам. По умолчанию используется цитирование имени столбца.

quote_table_name_for_assignment(table, attr) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 91
def quote_table_name_for_assignment(table, attr)
  quote_table_name("#{table}.#{attr}")
end

Переопределить для возврата имени цитированной таблицы для присваивания. По умолчанию используется цитирование имени таблицы.

Это работает для mysql2, где table.column может использоваться для разрешения неоднозначностей.

Мы переопределяем это в адаптерах sqlite3 и postgresql для использования только имени столбца (в соответствии с требованиями синтаксиса).

quoted_date(value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 122
def quoted_date(value)
  if value.acts_like?(:time)
    if ActiveRecord.default_timezone == :utc
      value = value.getutc if !value.utc?
    else
      value = value.getlocal
    end
  end

  result = value.to_formatted_s(:db)
  if value.respond_to?(:usec) && value.usec > 0
    result << "." << sprintf("%06d", value.usec)
  else
    result
  end
end

Приводит значения даты/времени к кавычкам для использования в SQL-вводе. Включает микросекунды, если значение является объектом Time , поддерживающим usec.

quoted_false() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 112
def quoted_false
  "FALSE"
end
quoted_true() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 104
def quoted_true
  "TRUE"
end
type_cast(value) Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 32
def type_cast(value)
  case value
  when Symbol, ActiveSupport::Multibyte::Chars, Type::Binary::Data
    value.to_s
  when true       then unquoted_true
  when false      then unquoted_false
  # BigDecimals need to be put in a non-normalized form and quoted.
  when BigDecimal then value.to_s("F")
  when nil, Numeric, String then value
  when Type::Time::Value then quoted_time(value)
  when Date, Time then quoted_date(value)
  else raise TypeError, "can't cast #{value.class.name}"
  end
end

Приведение типа value к типу, понятному для базы данных. Например, SQLite не понимает даты, поэтому этот метод преобразует Date в String.

unquoted_false() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 116
def unquoted_false
  false
end
unquoted_true() Показать исходный код
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 108
def unquoted_true
  true
end

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API