class Sequel::IBMDB::Database

  1. lib/sequel/adapters/ibmdb.rb
Parent: IBMDB

Included modules

  1. Sequel::DB2::DatabaseMethods

Attributes

conversion_procs [R]

Hash of connection procs for converting

Public Instance methods

alter_table (name, generator=nil)

REORG the related table whenever it is altered. This is not always required, but it is necessary for compatibilty with other Sequel code in many cases.

[show source]
# File lib/sequel/adapters/ibmdb.rb, line 188
def alter_table(name, generator=nil)
  res = super
  reorg(name)
  res
end
connect (server)

Create a new connection object for the given server.

[show source]
# File lib/sequel/adapters/ibmdb.rb, line 195
def connect(server)
  opts = server_opts(server)
  
  # use uncataloged connection so that host and port can be supported
  connection_string = (              'Driver={IBM DB2 ODBC DRIVER};'              "Database=#{opts[:database]};"              "Hostname=#{opts[:host]};"              "Port=#{opts[:port] || 50000};"              'Protocol=TCPIP;'              "Uid=#{opts[:user]};"              "Pwd=#{opts[:password]};"          )

  Connection.new(connection_string)
end
execute (sql, opts=OPTS, &block)

Execute the given SQL on the database.

[show source]
# File lib/sequel/adapters/ibmdb.rb, line 213
def execute(sql, opts=OPTS, &block)
  if sql.is_a?(Symbol)
    execute_prepared_statement(sql, opts, &block)
  else
    synchronize(opts[:server]){|c| _execute(c, sql, opts, &block)}
  end
rescue Connection::Error => e
  raise_error(e)
end
execute_insert (sql, opts=OPTS)

Execute the given SQL on the database, returning the last inserted identity value.

[show source]
# File lib/sequel/adapters/ibmdb.rb, line 225
def execute_insert(sql, opts=OPTS)
  synchronize(opts[:server]) do |c|
    if sql.is_a?(Symbol)
      execute_prepared_statement(sql, opts)
    else
      _execute(c, sql, opts)
    end
    _execute(c, "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1", opts){|stmt| i = stmt.fetch_array.first.to_i; i}
  end
rescue Connection::Error => e
  raise_error(e)
end
execute_prepared_statement (ps_name, opts)

Execute a prepared statement named by name on the database.

[show source]
# File lib/sequel/adapters/ibmdb.rb, line 239
def execute_prepared_statement(ps_name, opts)
  args = opts[:arguments]
  ps = prepared_statement(ps_name)
  sql = ps.prepared_sql
  synchronize(opts[:server]) do |conn|
    unless conn.prepared_statements.fetch(ps_name, []).first == sql
      log_yield("PREPARE #{ps_name}: #{sql}"){conn.prepare(sql, ps_name)}
    end
    args = args.map{|v| v.nil? ? nil : prepared_statement_arg(v)}
    log_sql = "EXECUTE #{ps_name}"
    if ps.log_sql
      log_sql << " ("
      log_sql << sql
      log_sql << ")"
    end
    begin
      stmt = log_yield(log_sql, args){conn.execute_prepared(ps_name, *args)}
      if block_given?
        yield(stmt)
      else  
        stmt.affected
      end
    ensure
      stmt.free_result if stmt
    end
  end
end
table_exists? (name)

On DB2, a table might need to be REORGed if you are testing existence of it. This REORGs automatically if the database raises a specific error that indicates it should be REORGed.

[show source]
# File lib/sequel/adapters/ibmdb.rb, line 270
def table_exists?(name)
  v ||= false # only retry once
  sch, table_name = schema_and_table(name)
  name = SQL::QualifiedIdentifier.new(sch, table_name) if sch
  from(name).first
  true
rescue DatabaseError => e
  if e.to_s =~ /Operation not allowed for reason code "7" on table/ && v == false
    # table probably needs reorg
    reorg(name)
    v = true
    retry 
  end
  false
end