method
visit_Arel_Nodes_BoundSqlLiteral
v8.0.0 -
Show latest stable
- Class:
Arel::Visitors::ToSql
visit_Arel_Nodes_BoundSqlLiteral(o, collector)private
No documentation available.
# File activerecord/lib/arel/visitors/to_sql.rb, line 770
def visit_Arel_Nodes_BoundSqlLiteral(o, collector)
collector.retryable = false
bind_index = 0
new_bind = lambda do |value|
if Arel.arel_node?(value)
visit value, collector
elsif value.is_a?(Array)
if value.empty?
collector << @connection.quote(nil)
else
if value.none? { |v| Arel.arel_node?(v) }
collector.add_binds(value.map { |v| @connection.cast_bound_value(v) }, &bind_block)
else
value.each_with_index do |v, i|
collector << ", " unless i == 0
if Arel.arel_node?(v)
visit v, collector
else
collector.add_bind(@connection.cast_bound_value(v), &bind_block)
end
end
end
end
else
collector.add_bind(@connection.cast_bound_value(value), &bind_block)
end
end
if o.positional_binds
o.sql_with_placeholders.scan(/\?|([^?]+)/) do
if $1
collector << $1
else
value = o.positional_binds[bind_index]
bind_index += 1
new_bind.call(value)
end
end
else
o.sql_with_placeholders.scan(/:(?<!::)([a-zA-Z]\w*)|([^:]+|.)/) do
if $2
collector << $2
else
value = o.named_binds[$1.to_sym]
new_bind.call(value)
end
end
end
collector
end