Sha256: 7a2197d45491f2f961ac8ab86abe3b17285abb8c7b53c6859184399ef7651eb6
Contents?: true
Size: 1.84 KB
Versions: 2
Compression:
Stored size: 1.84 KB
Contents
#This class controls the results for the normal MySQL-driver. class Baza::Driver::Mysql::Result < Baza::ResultBase INT_TYPES = { ::Mysql::Field::TYPE_DECIMAL => true, ::Mysql::Field::TYPE_TINY => true, ::Mysql::Field::TYPE_LONG => true, ::Mysql::Field::TYPE_YEAR => true } FLOAT_TYPES = { ::Mysql::Field::TYPE_DECIMAL => true, ::Mysql::Field::TYPE_FLOAT => true, ::Mysql::Field::TYPE_DOUBLE => true } TIME_TYPES = { ::Mysql::Field::TYPE_DATETIME => true } DATE_TYPES = { ::Mysql::Field::TYPE_DATE => true } #Constructor. This should not be called manually. def initialize(driver, result) @driver = driver @result = result @mutex = Mutex.new @type_translation = driver.baza.opts[:type_translation] if @result @keys = [] @types = [] if @type_translation @result.fetch_fields.each do |key| @keys << key.name.to_sym @types << key.type if @type_translation end end end #Returns a single result as a hash with symbols as keys. def fetch fetched = nil @mutex.synchronize do fetched = @result.fetch_row end return false unless fetched if @type_translation == true fetched.collect!.with_index do |value, count| translate_value_to_type(value, @types[count]) end end return Hash[*@keys.zip(fetched).flatten] end #Loops over every result yielding it. def each while data = fetch yield data end end private def translate_value_to_type(value, type_no) unless value === nil if INT_TYPES[type_no] return value.to_i elsif FLOAT_TYPES[type_no] return value.to_f elsif TIME_TYPES[type_no] return Time.parse(value) elsif DATE_TYPES[type_no] return Date.parse(value) else return value.to_s end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
baza-0.0.19 | lib/baza/drivers/mysql/result.rb |
baza-0.0.18 | lib/baza/drivers/mysql/result.rb |