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