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 85 85: def check_error(rc, msg) 86: case rc 87: when DB2CLI::SQL_SUCCESS, DB2CLI::SQL_SUCCESS_WITH_INFO, DB2CLI::SQL_NO_DATA_FOUND 88: nil 89: when DB2CLI::SQL_INVALID_HANDLE, DB2CLI::SQL_STILL_EXECUTING 90: e = DB2Error.new("#{ERROR_MAP[rc]}: #{msg}") 91: e.set_backtrace(caller) 92: raise_error(e, :disconnect=>true) 93: else 94: e = DB2Error.new("#{ERROR_MAP[rc] || "Error code #{rc}"}: #{msg}") 95: e.set_backtrace(caller) 96: raise_error(e, :disconnect=>true) 97: end 98: end
# File lib/sequel/adapters/db2.rb, line 100 100: def checked_error(msg) 101: rc, *ary= yield 102: check_error(rc, msg) 103: ary.length <= 1 ? ary.first : ary 104: end
# File lib/sequel/adapters/db2.rb, line 47 47: def connect(server) 48: opts = server_opts(server) 49: dbc = checked_error("Could not allocate database connection"){DB2CLI.SQLAllocHandle(DB2CLI::SQL_HANDLE_DBC, NullHandle)} 50: checked_error("Could not connect to database"){DB2CLI.SQLConnect(dbc, opts[:database], opts[:user], opts[:password])} 51: dbc 52: end
# File lib/sequel/adapters/db2.rb, line 54 54: def disconnect_connection(conn) 55: DB2CLI.SQLDisconnect(conn) 56: DB2CLI.SQLFreeHandle(DB2CLI::SQL_HANDLE_DBC, conn) 57: end
# File lib/sequel/adapters/db2.rb, line 59 59: def execute(sql, opts=OPTS, &block) 60: synchronize(opts[:server]){|conn| log_connection_execute(conn, sql, &block)} 61: end
# File lib/sequel/adapters/db2.rb, line 63 63: def execute_insert(sql, opts=OPTS) 64: synchronize(opts[:server]) do |conn| 65: log_connection_execute(conn, sql) 66: sql = "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1" 67: log_connection_execute(conn, sql) do |sth| 68: name, buflen, datatype, size, digits, nullable = checked_error("Could not describe column"){DB2CLI.SQLDescribeCol(sth, 1, 256)} 69: if DB2CLI.SQLFetch(sth) != DB2CLI::SQL_NO_DATA_FOUND 70: v, _ = checked_error("Could not get data"){DB2CLI.SQLGetData(sth, 1, datatype, size)} 71: if v.is_a?(String) 72: return v.to_i 73: else 74: return nil 75: end 76: end 77: end 78: end 79: end