class Sequel::SqlAnywhere::Database

Database class for SQLAnywhere databases used with Sequel.

Constants

DEFAULT_CONFIG
DatasetClass
LAST_INSERT_ID

Attributes

api[RW]

Public Instance Methods

connect(server) click to toggle source
# File lib/sequel/adapters/sqlanywhere.rb, line 51
def connect(server)
  opts = server_opts(server)
  unless conn_string = opts[:conn_string]
    conn_string = []
    conn_string << "Host=#{opts[:host]}#{":#{opts[:port]}" if opts[:port]}" if opts[:host]
    conn_string << "DBN=#{opts[:database]}" if opts[:database]
    conn_string << "UID=#{opts[:user]}" if opts[:user]
    conn_string << "Password=#{opts[:password]}" if opts[:password]
    conn_string << "CommLinks=#{opts[:commlinks]}" if opts[:commlinks]
    conn_string << "ConnectionName=#{opts[:connection_name]}" if opts[:connection_name]
    conn_string << "CharSet=#{opts[:encoding]}" if opts[:encoding]
    conn_string << "Idle=0" # Prevent the server from disconnecting us if we're idle for >240mins (by default)
    conn_string << nil
    conn_string = conn_string.join(';')
  end

  conn = @api.sqlany_new_connection
  raise LoadError, "Could not connect" unless conn && @api.sqlany_connect(conn, conn_string) == 1

  if Sequel.application_timezone == :utc
    @api.sqlany_execute_immediate(conn, "SET TEMPORARY OPTION time_zone_adjustment=0")
  end

  conn
end
disconnect_connection(c) click to toggle source

Closes given database connection.

# File lib/sequel/adapters/sqlanywhere.rb, line 78
def disconnect_connection(c)
  @api.sqlany_disconnect(c)
end
execute(sql, opts=OPTS, &block) click to toggle source
# File lib/sequel/adapters/sqlanywhere.rb, line 89
def execute(sql, opts=OPTS, &block)
  synchronize(opts[:server]) do |conn|
    _execute(conn, :select, sql, opts, &block)
  end
end
execute_dui(sql, opts=OPTS) click to toggle source

Returns number of rows affected

# File lib/sequel/adapters/sqlanywhere.rb, line 83
def execute_dui(sql, opts=OPTS)
  synchronize(opts[:server]) do |conn|
    _execute(conn, :rows, sql, opts)
  end
end
execute_insert(sql, opts=OPTS) click to toggle source
# File lib/sequel/adapters/sqlanywhere.rb, line 95
def execute_insert(sql, opts=OPTS)
  synchronize(opts[:server]) do |conn|
    _execute(conn, :insert, sql, opts)
  end
end
freeze() click to toggle source
# File lib/sequel/adapters/sqlanywhere.rb, line 101
def freeze
  @conversion_procs.freeze
  super
end

Private Instance Methods

_execute(conn, type, sql, opts) { |rs| ... } click to toggle source
# File lib/sequel/adapters/sqlanywhere.rb, line 109
def _execute(conn, type, sql, opts)
  unless rs = log_connection_yield(sql, conn){@api.sqlany_execute_direct(conn, sql)}
    result, errstr = @api.sqlany_error(conn)
    raise_error(SQLAnywhereException.new(errstr, result, sql))
  end

  case type
  when :select
    yield rs if block_given?
  when :rows
    return @api.sqlany_affected_rows(rs)
  when :insert
    _execute(conn, :select, LAST_INSERT_ID, opts){|r| return @api.sqlany_get_column(r, 0)[1] if r && @api.sqlany_fetch_next(r) == 1}
  end
ensure
  @api.sqlany_commit(conn) unless in_transaction?
  @api.sqlany_free_stmt(rs) if rs
end
adapter_initialize() click to toggle source
# File lib/sequel/adapters/sqlanywhere.rb, line 128
def adapter_initialize
  @conversion_procs = SQLANYWHERE_TYPES.dup
  @conversion_procs[392] = method(:to_application_timestamp_sa)
  @api = SQLAnywhere::SQLAnywhereInterface.new
  raise LoadError, "Could not load SQLAnywhere DBCAPI library" if SQLAnywhere::API.sqlany_initialize_interface(@api) == 0
  raise LoadError, "Could not initialize SQLAnywhere DBCAPI library" if @api.sqlany_init == 0
end
log_connection_execute(conn, sql) click to toggle source
# File lib/sequel/adapters/sqlanywhere.rb, line 136
def log_connection_execute(conn, sql)
  _execute(conn, nil, sql, OPTS)
end