class Sequel::SqlAnywhere::Dataset

Dataset class for SqlAnywhere datasets accessed via the native driver.

Public Instance Methods

fetch_rows(sql) { |h| ... } 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/sqlanywhere.rb, line 143
def fetch_rows(sql)
  db = @db
  cps = db.conversion_procs
  api = db.api
  execute(sql) do |rs|
    convert = (convert_smallint_to_bool and db.convert_smallint_to_bool)
    col_infos = []
    api.sqlany_num_cols(rs).times do |i|
      _, _, name, _, type = api.sqlany_get_column_info(rs, i)
      cp = if type == 500
        cps[500] if convert
      else
        cps[type]
      end
      col_infos << [i, output_identifier(name), cp]
    end

    @columns = col_infos.map{|a| a[1]}

    if rs
      while api.sqlany_fetch_next(rs) == 1
        h = {}
        col_infos.each do |i, name, cp|
          _, v = api.sqlany_get_column(rs, i)
          h[name] = cp && v ? cp[v] : v
        end
        yield h
      end
    end
  end
  self
end