Active Record 连接适配器引用
- Q
- T
- U
实例公共方法
quote(value) 链接
引用列值以帮助防止 SQL 注入攻击.
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 12 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 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}'" when ActiveSupport::Duration warn_quote_duration_deprecated value.to_s else raise TypeError, "can't quote #{value.class.name}" end end
quote_bound_value(value) 链接
引用一个值作为未知类型的绑定参数。例如,MySQL
在比较字符串和数字时可能会执行危险的强制转换,因此此方法会将数字强制转换为字符串。
已弃用:请考虑使用 ‘Arel.sql(“… ? …”, value)` 或 sanitize_sql
代替。
来源: 显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 57 def quote_bound_value(value) ActiveRecord.deprecator.warn(<<~MSG.squish) #quote_bound_value is deprecated and will be removed in Rails 7.2. Consider Arel.sql(".. ? ..", value) or #sanitize_sql instead. MSG quote(cast_bound_value(value)) end
quote_column_name(column_name) 链接
引用列名。默认不加引号。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 93 def quote_column_name(column_name) column_name.to_s end
quote_string(s) 链接
引用字符串,转义任何 '(单引号)和 \(反斜杠)字符。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 88 def quote_string(s) s.gsub("\\", '\&\&').gsub("'", "''") # ' (for ruby-mode) end
quote_table_name(table_name) 链接
引用表名。默认使用列名引用。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 98 def quote_table_name(table_name) quote_column_name(table_name) end
quote_table_name_for_assignment(table, attr) 链接
覆盖以返回用于赋值的引用表名。默认使用表引用。
这适用于 MySQL
,其中 table.column 可用于解决歧义。
我们在 sqlite3 和 postgresql 适配器中覆盖了它,以仅使用列名(根据语法要求)。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 110 def quote_table_name_for_assignment(table, attr) quote_table_name("#{table}.#{attr}") end
quoted_date(value) 链接
引用日期/时间值以用于 SQL 输入。如果该值是响应 usec 的 Time
,则包括微秒。
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 141 def quoted_date(value) if value.acts_like?(:time) if default_timezone == :utc value = value.getutc if !value.utc? else value = value.getlocal end end result = value.to_fs(:db) if value.respond_to?(:usec) && value.usec > 0 result << "." << sprintf("%06d", value.usec) else result end end
quoted_false() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 131 def quoted_false "FALSE" end
quoted_true() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 123 def quoted_true "TRUE" end
type_cast(value) 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 36 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
unquoted_false() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 135 def unquoted_false false end
unquoted_true() 链接
来源:显示 | 在 GitHub 上
# File activerecord/lib/active_record/connection_adapters/abstract/quoting.rb, line 127 def unquoted_true true end