class Sequel::ADO::Dataset

Public Instance Methods

fetch_rows(sql) { |h| ... } click to toggle source
# File lib/sequel/adapters/ado.rb, line 233
def fetch_rows(sql)
  execute(sql) do |recordset|
    cols = []
    conversion_procs = db.conversion_procs

    i = -1
    ts_cp = nil
    recordset.Fields.each do |field|
      type = field.Type
      cp = if type == AdDBTimeStamp
        ts_cp ||= if RUBY_VERSION >= '1.9'
          nsec_div = 1000000000.0/(10**(timestamp_precision))
          nsec_mul = 10**(timestamp_precision+3)
          meth = db.method(:to_application_timestamp)
          lambda do |v|
            # Fractional second handling is not correct on ruby <2.2
            meth.call([v.year, v.month, v.day, v.hour, v.min, v.sec, (v.nsec/nsec_div).round * nsec_mul])
          end
        else
          # Ruby 1.8 returns AdDBTimeStamp values as a string
          db.method(:to_application_timestamp)
        end
      else
        conversion_procs[type]
      end
      cols << [output_identifier(field.Name), cp, i+=1]
    end

    self.columns = cols.map(&:first)
    return if recordset.EOF

    recordset.GetRows.transpose.each do |field_values|
      h = {}

      cols.each do |name, cp, i|
        h[name] = if (v = field_values[i]) && cp
          cp[v]
        else
          v
        end
      end
      
      yield h
    end
  end
end
provides_accurate_rows_matched?() click to toggle source

ADO returns nil for all for delete and update statements.

# File lib/sequel/adapters/ado.rb, line 281
def provides_accurate_rows_matched?
  false
end