Sha256: 35c3ca01685dbf54646503b065b8221e882e4ed40606269551b813f8b1d210d7

Contents?: true

Size: 1.96 KB

Versions: 13

Compression:

Stored size: 1.96 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
  }.freeze
  FLOAT_TYPES = {
    ::Mysql::Field::TYPE_DECIMAL => true,
    ::Mysql::Field::TYPE_FLOAT => true,
    ::Mysql::Field::TYPE_DOUBLE => true
  }.freeze
  TIME_TYPES = {
    ::Mysql::Field::TYPE_DATETIME => true
  }.freeze
  DATE_TYPES = {
    ::Mysql::Field::TYPE_DATE => true
  }.freeze

  # Constructor. This should not be called manually.
  def initialize(driver, result)
    @driver = driver
    @result = result
    @mutex = Mutex.new
    @type_translation = driver.db.opts[:type_translation]

    return unless @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

  # 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
    elsif @type_translation == :string
      fetched.collect!(&:to_s)
    end

    Hash[*@keys.zip(fetched).flatten]
  end

  # Loops over every result yielding it.
  def each
    loop do
      data = fetch

      if data
        yield data
      else
        break
      end
    end
  end

private

  def translate_value_to_type(value, type_no)
    return if 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

Version data entries

13 entries across 13 versions & 1 rubygems

Version Path
baza-0.0.33 lib/baza/driver/mysql/result.rb
baza-0.0.32 lib/baza/driver/mysql/result.rb
baza-0.0.31 lib/baza/driver/mysql/result.rb
baza-0.0.30 lib/baza/driver/mysql/result.rb
baza-0.0.29 lib/baza/driver/mysql/result.rb
baza-0.0.28 lib/baza/driver/mysql/result.rb
baza-0.0.27 lib/baza/driver/mysql/result.rb
baza-0.0.26 lib/baza/driver/mysql/result.rb
baza-0.0.25 lib/baza/driver/mysql/result.rb
baza-0.0.24 lib/baza/driver/mysql/result.rb
baza-0.0.23 lib/baza/driver/mysql/result.rb
baza-0.0.22 lib/baza/driver/mysql/result.rb
baza-0.0.21 lib/baza/driver/mysql/result.rb