class Sequel::MySQL::Dataset
Public Instance Methods
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
Don't allow graphing a dataset that splits multiple statements
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
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
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
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
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 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