Sha256: d4869f382ab74a38395b0dbf1439989837867954f04f5bad578b4cf2cac05dc6

Contents?: true

Size: 1.52 KB

Versions: 1

Compression:

Stored size: 1.52 KB

Contents

if !Object.const_defined?('Sequel')
  require File.join(File.dirname(__FILE__), '../sequel')
end

require 'win32ole'

module Sequel
  module ADO
    class Database < Sequel::Database
      set_adapter_scheme :ado
      
      def connect
        dbname = @opts[:database]
        handle = WIN32OLE.new('ADODB.Connection')
        handle.Open(dbname)
        handle
      end
    
      def dataset(opts = nil)
        ADO::Dataset.new(self, opts)
      end
    
      def execute(sql)
        @logger.info(sql) if @logger
        @pool.hold {|conn| conn.Execute(sql)}
      end
      
      alias_method :do, :execute
    end
    
    class Dataset < Sequel::Dataset
      def literal(v)
        case v
        when Time: literal(v.iso8601)
        else
          super
        end
      end

      def fetch_rows(sql, &block)
        @db.synchronize do
          s = @db.execute sql
          
          num_cols = s.Fields.Count
          @columns = Array.new(num_cols)
          0.upto(num_cols-1) {|x| @columns[x] = s.Fields(x).Name.to_sym}
          
          s.getRows.transpose.each {|r| yield hash_row(r) }
        end
        self
      end
      
      def hash_row(row)
        @columns.inject({}) do |m, c|
          m[c] = row.shift
          m
        end
      end
    
      def insert(*values)
        @db.do insert_sql(*values)
      end
    
      def update(values, opts = nil)
        @db.do update_sql(values, opts)
        self
      end
    
      def delete(opts = nil)
        @db.do delete_sql(opts)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
sequel-0.1.9.9 lib/sequel/ado.rb