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

#cast_bound_value(value) ⇒ Object



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

def cast_bound_value(value)
  case value
  when Rational
    value.to_f.to_s
  when Numeric
    value.to_s
  when BigDecimal
    value.to_s("F")
  when true
    "1"
  when false
    "0"
  when ActiveSupport::Duration
    warn_quote_duration_deprecated
    value.to_s
  else
    value
  end
end

#column_name_matcherObject



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

def column_name_matcher
  COLUMN_NAME
end

#column_name_with_order_matcherObject



92
93
94
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 92

def column_name_with_order_matcher
  COLUMN_NAME_WITH_ORDER
end

#quote_column_name(name) ⇒ Object



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

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

#quote_table_name(name) ⇒ Object



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

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

#quoted_binary(value) ⇒ Object



56
57
58
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 56

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

#quoted_date(value) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 48

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 MySQL adapters are able to handle those classes more efficiently.



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

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 default_timezone == :utc
      value.getutc
    else
      value.getlocal
    end
  when Date, Time
    value
  else
    super
  end
end

#unquote_identifier(identifier) ⇒ Object



60
61
62
63
64
65
66
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 60

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

#unquoted_falseObject



44
45
46
# File 'lib/active_record/connection_adapters/mysql/quoting.rb', line 44

def unquoted_false
  0
end

#unquoted_trueObject



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

def unquoted_true
  1
end