Module: ActiveRecord::ConnectionAdapters::MySQL::Quoting

Included in:
AbstractMysqlAdapter
Defined in:
lib/active_record/connection_adapters/mysql/quoting.rb

Overview

:nodoc:

Constant Summary collapse

QUOTED_COLUMN_NAMES =

:nodoc:

Concurrent::Map.new
QUOTED_TABLE_NAMES =

:nodoc:

Concurrent::Map.new

Instance Method Summary collapse

Instance Method Details

#column_name_matcherObject



85
86
87
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 85

def column_name_matcher
  COLUMN_NAME
end

#column_name_with_order_matcherObject



89
90
91
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 89

def column_name_with_order_matcher
  COLUMN_NAME_WITH_ORDER
end

#quote_bound_value(value) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 12

def quote_bound_value(value)
  case value
  when Rational
    quote(value.to_f.to_s)
  when Numeric, ActiveSupport::Duration
    quote(value.to_s)
  when BigDecimal
    quote(value.to_s("F"))
  when true
    "'1'"
  when false
    "'0'"
  else
    quote(value)
  end
end

#quote_column_name(name) ⇒ Object



29
30
31
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 29

def quote_column_name(name)
  QUOTED_COLUMN_NAMES[name] ||= "`#{super.gsub('`', '``')}`"
end

#quote_table_name(name) ⇒ Object



33
34
35
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 33

def quote_table_name(name)
  QUOTED_TABLE_NAMES[name] ||= super.gsub(".", "`.`").freeze
end

#quoted_binary(value) ⇒ Object



53
54
55
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 53

def quoted_binary(value)
  "x'#{value.hex}'"
end

#quoted_date(value) ⇒ Object



45
46
47
48
49
50
51
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 45

def quoted_date(value)
  if supports_datetime_with_precision?
    super
  else
    super.sub(/\.\d{6}\z/, "")
  end
end

#type_cast(value) ⇒ Object

Override type_cast we pass to mysql2 Date and Time objects instead of Strings since mysql2 is able to handle those classes more efficiently.



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 67

def type_cast(value) # :nodoc:
  case value
  when ActiveSupport::TimeWithZone
    # We need to check explicitly for ActiveSupport::TimeWithZone because
    # we need to transform it to Time objects but we don't want to
    # transform Time objects to themselves.
    if ActiveRecord.default_timezone == :utc
      value.getutc
    else
      value.getlocal
    end
  when Date, Time
    value
  else
    super
  end
end

#unquote_identifier(identifier) ⇒ Object



57
58
59
60
61
62
63
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 57

def unquote_identifier(identifier)
  if identifier && identifier.start_with?("`")
    identifier[1..-2]
  else
    identifier
  end
end

#unquoted_falseObject



41
42
43
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 41

def unquoted_false
  0
end

#unquoted_trueObject



37
38
39
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 37

def unquoted_true
  1
end