Class | Sequel::DB2::Database |
In: |
lib/sequel/adapters/db2.rb
|
Parent: | Sequel::Database |
TEMPORARY | = | 'GLOBAL TEMPORARY '.freeze |
NullHandle | = | DB2CLI.SQLAllocHandle(DB2CLI::SQL_HANDLE_ENV, DB2CLI::SQL_NULL_HANDLE) |
ERROR_MAP | = | {} |
conversion_procs | [R] | Hash of connection procs for converting |
# File lib/sequel/adapters/db2.rb, line 84 84: def check_error(rc, msg) 85: case rc 86: when DB2CLI::SQL_SUCCESS, DB2CLI::SQL_SUCCESS_WITH_INFO, DB2CLI::SQL_NO_DATA_FOUND 87: nil 88: when DB2CLI::SQL_INVALID_HANDLE, DB2CLI::SQL_STILL_EXECUTING 89: e = DB2Error.new("#{ERROR_MAP[rc]}: #{msg}") 90: e.set_backtrace(caller) 91: raise_error(e, :disconnect=>true) 92: else 93: e = DB2Error.new("#{ERROR_MAP[rc] || "Error code #{rc}"}: #{msg}") 94: e.set_backtrace(caller) 95: raise_error(e, :disconnect=>true) 96: end 97: end
# File lib/sequel/adapters/db2.rb, line 99 99: def checked_error(msg) 100: rc, *ary= yield 101: check_error(rc, msg) 102: ary.length <= 1 ? ary.first : ary 103: end
# File lib/sequel/adapters/db2.rb, line 46 46: def connect(server) 47: opts = server_opts(server) 48: dbc = checked_error("Could not allocate database connection"){DB2CLI.SQLAllocHandle(DB2CLI::SQL_HANDLE_DBC, NullHandle)} 49: checked_error("Could not connect to database"){DB2CLI.SQLConnect(dbc, opts[:database], opts[:user], opts[:password])} 50: dbc 51: end
# File lib/sequel/adapters/db2.rb, line 53 53: def disconnect_connection(conn) 54: DB2CLI.SQLDisconnect(conn) 55: DB2CLI.SQLFreeHandle(DB2CLI::SQL_HANDLE_DBC, conn) 56: end
# File lib/sequel/adapters/db2.rb, line 58 58: def execute(sql, opts=OPTS, &block) 59: synchronize(opts[:server]){|conn| log_connection_execute(conn, sql, &block)} 60: end
# File lib/sequel/adapters/db2.rb, line 62 62: def execute_insert(sql, opts=OPTS) 63: synchronize(opts[:server]) do |conn| 64: log_connection_execute(conn, sql) 65: sql = "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1" 66: log_connection_execute(conn, sql) do |sth| 67: _, _, datatype, size, _, _ = checked_error("Could not describe column"){DB2CLI.SQLDescribeCol(sth, 1, 256)} 68: if DB2CLI.SQLFetch(sth) != DB2CLI::SQL_NO_DATA_FOUND 69: v, _ = checked_error("Could not get data"){DB2CLI.SQLGetData(sth, 1, datatype, size)} 70: if v.is_a?(String) 71: return v.to_i 72: else 73: return nil 74: end 75: end 76: end 77: end 78: end