class Sequel::Dataset::PlaceholderLiteralizer::Recorder

the SQL query.
Records the offsets at which the placeholder arguments are used in

def arg(v=(no_arg_given = true; @argn+=1))

argument for the same receiver.
general you shouldn't mix calls with an argument and calls without an
Return an Argument with the specified position, or the next position. In
def arg(v=(no_arg_given = true; @argn+=1))
  unless no_arg_given
    @argn = v if @argn < v
  end
  Argument.new(self, v)
end

def loader(dataset)

return the dataset that you want to load.
call #arg on the receiver for each placeholder argument, and
Yields the receiver and the dataset to the block, which should
def loader(dataset)
  @argn = -1
  @args = []
  ds = yield self, dataset
  sql = ds.clone(:placeholder_literalizer=>self).sql
  last_offset = 0
  fragments = @args.map do |used_sql, offset, arg, t|
    raise Error, "placeholder literalizer argument literalized into different string than dataset returned" unless used_sql.equal?(sql)
    a = [sql[last_offset...offset], arg, t]
    last_offset = offset
    a
  end
  final_sql = sql[last_offset..-1]
  arity = @argn+1
  PlaceholderLiteralizer.new(ds.clone, fragments, final_sql, arity)
end

def use(sql, arg, transformer)

transforming
Record the offset at which the argument is used in the SQL query, and any
def use(sql, arg, transformer)
  @args << [sql, sql.length, arg, transformer]
end