module Sequel::ADO::Access::DatabaseMethods

  1. lib/sequel/adapters/ado/access.rb
Parent: Access

Constants

DECIMAL_TYPE_RE = /decimal/io  
LAST_INSERT_ID = "SELECT @@IDENTITY".freeze  

Public Instance methods

alter_table (name, *)

Remove cached schema after altering a table, since otherwise it can be cached incorrectly in the rename column case.

[show source]
# File lib/sequel/adapters/ado/access.rb, line 96
def alter_table(name, *)
  super
  remove_cached_schema(name)
  nil
end
disconnect_connection (conn)

Access doesn't let you disconnect if inside a transaction, so try rolling back an existing transaction first.

[show source]
# File lib/sequel/adapters/ado/access.rb, line 104
def disconnect_connection(conn)
  conn.RollbackTrans rescue nil
  super
end
execute_insert (sql, opts=OPTS)
[show source]
# File lib/sequel/adapters/ado/access.rb, line 109
def execute_insert(sql, opts=OPTS)
  synchronize(opts[:server]) do |conn|
    begin
      r = log_yield(sql){conn.Execute(sql)}
      res = log_yield(LAST_INSERT_ID){conn.Execute(LAST_INSERT_ID)}
      res.getRows.transpose.each{|r| return r.shift}
    rescue ::WIN32OLERuntimeError => e
      raise_error(e)
    end
  end
  nil
end
foreign_key_list (table, opts=OPTS)

Note OpenSchema returns compound foreign key relationships as multiple rows

[show source]
# File lib/sequel/adapters/ado/access.rb, line 148
def foreign_key_list(table, opts=OPTS)
  m = output_identifier_meth
  fks = ado_schema_foreign_keys(table).inject({}) do |memo, fk|
    name = m.call(fk['FK_NAME'])
    specs = memo[name] ||= {
      :columns => [],
      :table   => m.call(fk['PK_TABLE_NAME']),
      :key     => [],
      :deferrable => fk['DEFERRABILITY'],
      :name    => name,
      :on_delete => fk['DELETE_RULE'],
      :on_update => fk['UPDATE_RULE']
    }
    specs[:columns] << m.call(fk['FK_COLUMN_NAME'])
    specs[:key]     << m.call(fk['PK_COLUMN_NAME'])
    memo
  end
  fks.values
end
indexes (table_name,opts=OPTS)

Note OpenSchema returns compound indexes as multiple rows

[show source]
# File lib/sequel/adapters/ado/access.rb, line 133
def indexes(table_name,opts=OPTS)
  m = output_identifier_meth
  idxs = ado_schema_indexes(table_name).inject({}) do |memo, idx|
    unless idx["PRIMARY_KEY"]
      index = memo[m.call(idx["INDEX_NAME"])] ||= {
        :columns=>[], :unique=>idx["UNIQUE"]
      }
      index[:columns] << m.call(idx["COLUMN_NAME"])
    end
    memo
  end
  idxs
end
tables (opts=OPTS)
[show source]
# File lib/sequel/adapters/ado/access.rb, line 122
def tables(opts=OPTS)
  m = output_identifier_meth
  ado_schema_tables.map {|tbl| m.call(tbl['TABLE_NAME'])}
end
views (opts=OPTS)
[show source]
# File lib/sequel/adapters/ado/access.rb, line 127
def views(opts=OPTS)
  m = output_identifier_meth
  ado_schema_views.map {|tbl| m.call(tbl['TABLE_NAME'])}
end