class Sequel::MySQL::Dataset

Public Instance Methods

fetch_rows(sql) { |s| ... } click to toggle source

Yield all rows matching this dataset. If the dataset is set to split multiple statements, yield arrays of hashes one per statement instead of yielding results for all statements as hashes.

    # File lib/sequel/adapters/mysql.rb
281 def fetch_rows(sql)
282   execute(sql) do |r|
283     i = -1
284     cps = db.conversion_procs
285     cols = r.fetch_fields.map do |f| 
286       # Pretend tinyint is another integer type if its length is not 1, to
287       # avoid casting to boolean if convert_tinyint_to_bool is set.
288       type_proc = f.type == 1 && cast_tinyint_integer?(f) ? cps[2] : cps[f.type]
289       [output_identifier(f.name), type_proc, i+=1]
290     end
291     self.columns = cols.map(&:first)
292     if opts[:split_multiple_result_sets]
293       s = []
294       yield_rows(r, cols){|h| s << h}
295       yield s
296     else
297       yield_rows(r, cols){|h| yield h}
298     end
299   end
300   self
301 end
graph(*) click to toggle source

Don't allow graphing a dataset that splits multiple statements

Calls superclass method Sequel::Dataset#graph
    # File lib/sequel/adapters/mysql.rb
304 def graph(*)
305   raise(Error, "Can't graph a dataset that splits multiple result sets") if opts[:split_multiple_result_sets]
306   super
307 end
split_multiple_result_sets() click to toggle source

Makes each yield arrays of rows, with each array containing the rows for a given result set. Does not work with graphing. So you can submit SQL with multiple statements and easily determine which statement returned which results.

Modifies the row_proc of the returned dataset so that it still works as expected (running on the hashes instead of on the arrays of hashes). If you modify the row_proc afterward, note that it will receive an array of hashes instead of a hash.

    # File lib/sequel/adapters/mysql.rb
318 def split_multiple_result_sets
319   raise(Error, "Can't split multiple statements on a graphed dataset") if opts[:graph]
320   ds = clone(:split_multiple_result_sets=>true)
321   ds = ds.with_row_proc(proc{|x| x.map{|h| row_proc.call(h)}}) if row_proc
322   ds
323 end

Private Instance Methods

cast_tinyint_integer?(field) click to toggle source

Whether a tinyint field should be casted as an integer. By default, casts to integer if the field length is not 1. Can be overwritten to make tinyint casting dataset dependent.

    # File lib/sequel/adapters/mysql.rb
330 def cast_tinyint_integer?(field)
331   field.length != 1
332 end
execute(sql, opts=OPTS) click to toggle source
Calls superclass method Sequel::Dataset#execute
    # File lib/sequel/adapters/mysql.rb
334 def execute(sql, opts=OPTS)
335   opts = Hash[opts]
336   opts[:type] = :select
337   super
338 end
literal_string_append(sql, v) click to toggle source

Handle correct quoting of strings using ::MySQL.quote.

    # File lib/sequel/adapters/mysql.rb
341 def literal_string_append(sql, v)
342   sql << "'" << ::Mysql.quote(v) << "'"
343 end
yield_rows(r, cols) { |h| ... } click to toggle source

Yield each row of the given result set r with columns cols as a hash with symbol keys

    # File lib/sequel/adapters/mysql.rb
347 def yield_rows(r, cols)
348   while row = r.fetch_row
349     h = {}
350     cols.each{|n, p, i| v = row[i]; h[n] = (v && p) ? p.call(v) : v}
351     yield h
352   end
353 end