method
exec_cache
rails latest stable - Class:
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
exec_cache(sql, name, binds, async:, allow_retry:, materialize_transactions:)private
No documentation available.
# File activerecord/lib/active_record/connection_adapters/postgresql_adapter.rb, line 901
def exec_cache(sql, name, binds, async,, allow_retry,, materialize_transactions))
mark_transaction_written_if_write(sql)
update_typemap_for_default_timezone
with_raw_connection do |conn|
stmt_key = prepare_statement(sql, binds, conn)
type_casted_binds = type_casted_binds(binds)
log(sql, name, binds, type_casted_binds, stmt_key, async: async) do
result = conn.exec_prepared(stmt_key, type_casted_binds)
verified!
result
end
end
rescue ActiveRecord::StatementInvalid => e
raise unless is_cached_plan_failure?(e)
# Nothing we can do if we are in a transaction because all commands
# will raise InFailedSQLTransaction
if in_transaction?
raise ActiveRecord::PreparedStatementCacheExpired.new(e.cause.message)
else
@lock.synchronize do
# outside of transactions we can simply flush this query and retry
@statements.delete sql_key(sql)
end
retry
end
end