| Class | Sequel::Oracle::Database |
| In: |
lib/sequel_core/adapters/oracle.rb
|
| Parent: | Sequel::Database |
| CONNECTION_ERROR_CODES | = | [ 28, 1012, 3113, 3114 ] | ORA-00028: your session has been killed ORA-01012: not logged on ORA-03113: end-of-file on communication channel ORA-03114: not connected to ORACLE |
# File lib/sequel_core/adapters/oracle.rb, line 16
16: def connect(server)
17: opts = server_opts(server)
18: if opts[:database]
19: dbname = opts[:host] ? \
20: "//#{opts[:host]}#{":#{opts[:port]}" if opts[:port]}/#{opts[:database]}" : opts[:database]
21: else
22: dbname = opts[:host]
23: end
24: conn = OCI8.new(opts[:user], opts[:password], dbname, opts[:privilege])
25: conn.autocommit = true
26: conn.non_blocking = true
27: conn
28: end
# File lib/sequel_core/adapters/oracle.rb, line 30
30: def dataset(opts = nil)
31: Oracle::Dataset.new(self, opts)
32: end
# File lib/sequel_core/adapters/oracle.rb, line 34
34: def execute(sql, opts={})
35: log_info(sql)
36: synchronize(opts[:server]) do |conn|
37: begin
38: r = conn.exec(sql)
39: yield(r) if block_given?
40: r
41: rescue OCIException => e
42: if CONNECTION_ERROR_CODES.include?(e.code)
43: raise(Sequel::DatabaseDisconnectError)
44: else
45: raise
46: end
47: end
48: end
49: end
# File lib/sequel_core/adapters/oracle.rb, line 52
52: def transaction(server=nil)
53: synchronize(server) do |conn|
54: return yield(conn) if @transactions.include?(Thread.current)
55:
56: conn.autocommit = false
57: begin
58: @transactions << Thread.current
59: yield(conn)
60: rescue => e
61: conn.rollback
62: raise e unless Error::Rollback === e
63: ensure
64: conn.commit unless e
65: conn.autocommit = true
66: @transactions.delete(Thread.current)
67: end
68: end
69: end