| 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 89
89: def check_error(rc, msg)
90: case rc
91: when DB2CLI::SQL_SUCCESS, DB2CLI::SQL_SUCCESS_WITH_INFO, DB2CLI::SQL_NO_DATA_FOUND
92: nil
93: when DB2CLI::SQL_INVALID_HANDLE, DB2CLI::SQL_STILL_EXECUTING
94: e = DB2Error.new("#{ERROR_MAP[rc]}: #{msg}")
95: e.set_backtrace(caller)
96: raise_error(e, :disconnect=>true)
97: else
98: e = DB2Error.new("#{ERROR_MAP[rc] || "Error code #{rc}"}: #{msg}")
99: e.set_backtrace(caller)
100: raise_error(e, :disconnect=>true)
101: end
102: end
# File lib/sequel/adapters/db2.rb, line 104
104: def checked_error(msg)
105: rc, *ary= yield
106: check_error(rc, msg)
107: ary.length <= 1 ? ary.first : ary
108: 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 62
62: def do(*a, &block)
63: Sequel::Deprecation.deprecate('Database#do', 'Please use Database#execute')
64: execute(*a, &block)
65: end
# File lib/sequel/adapters/db2.rb, line 59
59: def execute(sql, opts={}, &block)
60: synchronize(opts[:server]){|conn| log_connection_execute(conn, sql, &block)}
61: end
# File lib/sequel/adapters/db2.rb, line 67
67: def execute_insert(sql, opts={})
68: synchronize(opts[:server]) do |conn|
69: log_connection_execute(conn, sql)
70: sql = "SELECT IDENTITY_VAL_LOCAL() FROM SYSIBM.SYSDUMMY1"
71: log_connection_execute(conn, sql) do |sth|
72: name, buflen, datatype, size, digits, nullable = checked_error("Could not describe column"){DB2CLI.SQLDescribeCol(sth, 1, 256)}
73: if DB2CLI.SQLFetch(sth) != DB2CLI::SQL_NO_DATA_FOUND
74: v, _ = checked_error("Could not get data"){DB2CLI.SQLGetData(sth, 1, datatype, size)}
75: if v.is_a?(String)
76: return v.to_i
77: else
78: return nil
79: end
80: end
81: end
82: end
83: end