Class: Pipeloader::Source

Inherits:
GraphQL::Dataloader::Source
  • Object
show all
Defined in:
lib/pipeloader/source.rb

Overview

A GraphQL::Dataloader source that gathers every SELECT parked at a fiber tick and runs them as one pipelined burst, returning an ActiveRecord::Result per query (so AR builds models normally).

Instance Method Summary collapse

Constructor Details

#initialize(pg) ⇒ Source

Returns a new instance of Source.



6
7
8
# File 'lib/pipeloader/source.rb', line 6

def initialize(pg)
  @pg = pg
end

Instance Method Details

#fetch(keys) ⇒ Object

keys: array of [sql, params], deduplicated by Dataloader. Must return one result per key, in order.



12
13
14
15
16
17
# File 'lib/pipeloader/source.rb', line 12

def fetch(keys)
  batch = Pipeliner.pipeline_batch(@pg, keys)
  Pipeloader.round_trips += 1
  Pipeloader.queries += keys.size
  batch.map { |columns, rows| ActiveRecord::Result.new(columns, rows) }
end