Hash of connection procs for converting
# 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
# 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
# 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
# File lib/sequel/adapters/db2.rb, line 53 def disconnect_connection(conn) DB2CLI.SQLDisconnect(conn) DB2CLI.SQLFreeHandle(DB2CLI::SQL_HANDLE_DBC, conn) end
# 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
# 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| name, buflen, datatype, size, digits, nullable = 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
# File lib/sequel/adapters/db2.rb, line 105 def to_application_timestamp_db2(v) to_application_timestamp(v.to_s) end
# 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
# 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
# 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
# File lib/sequel/adapters/db2.rb, line 116 def database_error_classes [DB2Error] end
# 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
# 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
# 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
Convert smallint type to boolean if convert_smallint_to_bool is true
# File lib/sequel/adapters/db2.rb, line 156 def schema_column_type(db_type) if DB2.convert_smallint_to_bool && db_type =~ /smallint/ :boolean else super end end