class Sequel::DB2::Database
Constants
- DatasetClass
- ERROR_MAP
- NullHandle
- TEMPORARY
Attributes
conversion_procs[R]
Hash of connection procs for converting
Public Instance Methods
check_error(rc, msg)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 84 def check_error(rc, msg) case rc when DB2CLI::SQL_SUCCESS, DB2CLI::SQL_SUCCESS_WITH_INFO, DB2CLI::SQL_NO_DATA_FOUND nil when DB2CLI::SQL_INVALID_HANDLE, DB2CLI::SQL_STILL_EXECUTING e = DB2Error.new("#{ERROR_MAP[rc]}: #{msg}") e.set_backtrace(caller) raise_error(e, :disconnect=>true) else e = DB2Error.new("#{ERROR_MAP[rc] || "Error code #{rc}"}: #{msg}") e.set_backtrace(caller) raise_error(e, :disconnect=>true) end end
checked_error(msg) { || ... }
click to toggle source
# File lib/sequel/adapters/db2.rb, line 99 def checked_error(msg) rc, *ary= yield check_error(rc, msg) ary.length <= 1 ? ary.first : ary end
connect(server)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 46 def connect(server) opts = server_opts(server) dbc = checked_error("Could not allocate database connection"){DB2CLI.SQLAllocHandle(DB2CLI::SQL_HANDLE_DBC, NullHandle)} checked_error("Could not connect to database"){DB2CLI.SQLConnect(dbc, opts[:database], opts[:user], opts[:password])} dbc end
disconnect_connection(conn)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 53 def disconnect_connection(conn) DB2CLI.SQLDisconnect(conn) DB2CLI.SQLFreeHandle(DB2CLI::SQL_HANDLE_DBC, conn) end
execute(sql, opts=OPTS, &block)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 58 def execute(sql, opts=OPTS, &block) synchronize(opts[:server]){|conn| log_connection_execute(conn, sql, &block)} end
execute_insert(sql, opts=OPTS)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 62 def execute_insert(sql, opts=OPTS) synchronize(opts[:server]) do |conn| log_connection_execute(conn, sql) sql = "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1" log_connection_execute(conn, sql) do |sth| _, _, datatype, size, _, _ = checked_error("Could not describe column"){DB2CLI.SQLDescribeCol(sth, 1, 256)} if DB2CLI.SQLFetch(sth) != DB2CLI::SQL_NO_DATA_FOUND v, _ = checked_error("Could not get data"){DB2CLI.SQLGetData(sth, 1, datatype, size)} if v.is_a?(String) return v.to_i else return nil end end end end end
to_application_timestamp_db2(v)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 105 def to_application_timestamp_db2(v) to_application_timestamp(v.to_s) end
Private Instance Methods
adapter_initialize()
click to toggle source
# File lib/sequel/adapters/db2.rb, line 111 def adapter_initialize @conversion_procs = DB2_TYPES.dup @conversion_procs[DB2CLI::SQL_TYPE_TIMESTAMP] = method(:to_application_timestamp_db2) end
begin_transaction(conn, opts=OPTS)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 120 def begin_transaction(conn, opts=OPTS) log_yield(TRANSACTION_BEGIN){DB2CLI.SQLSetConnectAttr(conn, DB2CLI::SQL_ATTR_AUTOCOMMIT, DB2CLI::SQL_AUTOCOMMIT_OFF)} set_transaction_isolation(conn, opts) end
commit_transaction(conn, opts=OPTS)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 135 def commit_transaction(conn, opts=OPTS) log_yield(TRANSACTION_COMMIT){DB2CLI.SQLEndTran(DB2CLI::SQL_HANDLE_DBC, conn, DB2CLI::SQL_COMMIT)} end
database_error_classes()
click to toggle source
# File lib/sequel/adapters/db2.rb, line 116 def database_error_classes [DB2Error] end
log_connection_execute(conn, sql) { |sth| ... }
click to toggle source
# File lib/sequel/adapters/db2.rb, line 139 def log_connection_execute(conn, sql) sth = checked_error("Could not allocate statement"){DB2CLI.SQLAllocHandle(DB2CLI::SQL_HANDLE_STMT, conn)} begin checked_error("Could not execute statement: #{sql}"){log_yield(sql){DB2CLI.SQLExecDirect(sth, sql)}} if block_given? yield(sth) else checked_error("Could not get RPC"){DB2CLI.SQLRowCount(sth)} end ensure checked_error("Could not free statement"){DB2CLI.SQLFreeHandle(DB2CLI::SQL_HANDLE_STMT, sth)} end end
remove_transaction(conn, committed)
click to toggle source
Calls superclass method
Sequel::Database#remove_transaction
# File lib/sequel/adapters/db2.rb, line 125 def remove_transaction(conn, committed) DB2CLI.SQLSetConnectAttr(conn, DB2CLI::SQL_ATTR_AUTOCOMMIT, DB2CLI::SQL_AUTOCOMMIT_ON) ensure super end
rollback_transaction(conn, opts=OPTS)
click to toggle source
# File lib/sequel/adapters/db2.rb, line 131 def rollback_transaction(conn, opts=OPTS) log_yield(TRANSACTION_ROLLBACK){DB2CLI.SQLEndTran(DB2CLI::SQL_HANDLE_DBC, conn, DB2CLI::SQL_ROLLBACK)} end
schema_column_type(db_type)
click to toggle source
Convert smallint type to boolean if convert_smallint_to_bool is true
Calls superclass method
Sequel::DB2::DatabaseMethods#schema_column_type
# File lib/sequel/adapters/db2.rb, line 156 def schema_column_type(db_type) if DB2.convert_smallint_to_bool && db_type =~ /smallint/i :boolean else super end end