Sha256: 8d0c7a13334f24080c0b4943a584fbc8a89c61701a7b3a50485d871f49d8ee85
Contents?: true
Size: 1.92 KB
Versions: 2
Compression:
Stored size: 1.92 KB
Contents
require 'win32ole' module Sequel # The ADO adapter provides connectivity to ADO databases in Windows. ADO # databases can be opened using a URL with the ado schema: # # DB = Sequel.open('ado://mydb') # # or using the Sequel.ado method: # # DB = Sequel.ado('mydb') # module ADO class Database < Sequel::Database set_adapter_scheme :ado def initialize(opts) super(opts) opts[:driver] ||= 'SQL Server' case opts[:driver] when 'SQL Server' require 'sequel_core/adapters/shared/mssql' extend Sequel::MSSQL::DatabaseMethods end end def connect(server) opts = server_opts(server) s = "driver=#{opts[:driver]};server=#{opts[:host]};database=#{opts[:database]}#{";uid=#{opts[:user]};pwd=#{opts[:password]}" if opts[:user]}" handle = WIN32OLE.new('ADODB.Connection') handle.Open(s) handle end def dataset(opts = nil) ADO::Dataset.new(self, opts) end def execute(sql, opts={}) log_info(sql) synchronize(opts[:server]) do |conn| r = conn.Execute(sql) yield(r) if block_given? r end end alias_method :do, :execute private def disconnect_connection(conn) conn.Close end end class Dataset < Sequel::Dataset def fetch_rows(sql) execute(sql) do |s| @columns = s.Fields.extend(Enumerable).map do |column| name = column.Name.empty? ? '(no column name)' : column.Name name.to_sym end unless s.eof s.moveFirst s.getRows.transpose.each {|r| yield hash_row(r)} end end self end private def hash_row(row) @columns.inject({}) do |m, c| m[c] = row.shift m end end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
sequel-2.8.0 | lib/sequel_core/adapters/ado.rb |
sequel-2.9.0 | lib/sequel_core/adapters/ado.rb |