Module: Pipeloader::Trace
- Defined in:
- lib/pipeloader.rb
Overview
Stash the active dataloader on the connection for the whole response phase, and clear it at the end. This is done at multiplex scope, not per-query, because under Dataloader resolution is deferred to the multiplex’s fiber run loop — a per-query hook would clear the stash before resolvers ever run.
Instance Method Summary collapse
Instance Method Details
#execute_multiplex(multiplex:) ⇒ Object
86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/pipeloader.rb', line 86 def execute_multiplex(multiplex:) Pipeloader.reset_stats! conn = ActiveRecord::Base.connection pg = nil # Raises on an unsupported adapter; on SQLite, leaves the stash unset so # select_all never pipelines (column projection still applies). if Pipeloader.pipelining_supported?(conn) conn.pipeloader_dataloader = multiplex.dataloader pg = conn.raw_connection Pipeloader.begin_request!(pg) end super ensure conn.pipeloader_dataloader = nil if conn Pipeloader.end_request!(pg) if pg end |