class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter

def exec_cache(sql, name, binds, async: false)

Experimental RBS support (using type sampling data from the type_fusion project).

def exec_cache: (String sql, String name, Array[ActiveRecord::Relation::QueryAttribute] binds, async: false) -> PG::Result

This signature was generated using 1 sample from 1 application.

def exec_cache(sql, name, binds, async: false)
  materialize_transactions
  mark_transaction_written_if_write(sql)
  update_typemap_for_default_timezone
  stmt_key = prepare_statement(sql, binds)
  type_casted_binds = type_casted_binds(binds)
  log(sql, name, binds, type_casted_binds, stmt_key, async: async) do
    ActiveSupport::Dependencies.interlock.permit_concurrent_loads do
      @connection.exec_prepared(stmt_key, type_casted_binds)
    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