method
to_sql_and_binds
v8.1.1 -
Show latest stable
- Class:
ActiveRecord::ConnectionAdapters::DatabaseStatements
to_sql_and_binds(arel_or_sql_string, binds = [], preparable = nil, allow_retry = false)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb, line 17
def to_sql_and_binds(arel_or_sql_string, binds = [], preparable = nil, allow_retry = false) # :nodoc:
# Arel::TreeManager -> Arel::Node
if arel_or_sql_string.respond_to?(:ast)
arel_or_sql_string = arel_or_sql_string.ast
end
if Arel.arel_node?(arel_or_sql_string) && !(String === arel_or_sql_string)
unless binds.empty?
raise "Passing bind parameters with an arel AST is forbidden. " "The values must be stored on the AST directly"
end
collector = collector()
collector.retryable = true
if prepared_statements
collector.preparable = true
sql, binds = visitor.compile(arel_or_sql_string, collector)
if binds.length > bind_params_length
unprepared_statement do
return to_sql_and_binds(arel_or_sql_string)
end
end
preparable = collector.preparable
else
sql = visitor.compile(arel_or_sql_string, collector)
end
allow_retry = collector.retryable
[sql.freeze, binds, preparable, allow_retry]
else
arel_or_sql_string = arel_or_sql_string.dup.freeze unless arel_or_sql_string.frozen?
[arel_or_sql_string, binds, preparable, allow_retry]
end
end