| Class | Sequel::Cubrid::Database |
| In: |
lib/sequel/adapters/cubrid.rb
|
| Parent: | Sequel::Database |
| ROW_COUNT | = | "SELECT ROW_COUNT()".freeze |
| LAST_INSERT_ID | = | "SELECT LAST_INSERT_ID()".freeze |
# File lib/sequel/adapters/cubrid.rb, line 20
20: def connect(server)
21: opts = server_opts(server)
22: conn = ::Cubrid.connect(
23: opts[:database],
24: opts[:host] || 'localhost',
25: opts[:port] || 30000,
26: opts[:user] || 'public',
27: opts[:password] || ''
28: )
29: conn.auto_commit = true
30: conn
31: end
# File lib/sequel/adapters/cubrid.rb, line 37
37: def execute(sql, opts={})
38: synchronize(opts[:server]) do |conn|
39: r = log_yield(sql) do
40: begin
41: conn.query(sql)
42: rescue => e
43: raise_error(e)
44: end
45: end
46: if block_given?
47: yield(r)
48: else
49: begin
50: case opts[:type]
51: when :dui
52: # This is cubrid's API, but it appears to be completely broken,
53: # giving StandardError: ERROR: CCI, -18, Invalid request handle
54: #r.affected_rows
55:
56: # Work around bugs by using the ROW_COUNT function.
57: begin
58: r2 = conn.query(ROW_COUNT)
59: r2.each{|a| return a.first.to_i}
60: ensure
61: r2.close if r2
62: end
63: when :insert
64: begin
65: r2 = conn.query(LAST_INSERT_ID)
66: r2.each{|a| return a.first.to_i}
67: ensure
68: r2.close if r2
69: end
70: end
71: ensure
72: r.close
73: end
74: end
75: end
76: end
# File lib/sequel/adapters/cubrid.rb, line 78
78: def execute_ddl(sql, opts={})
79: execute(sql, opts.merge(:type=>:ddl))
80: end
# File lib/sequel/adapters/cubrid.rb, line 82
82: def execute_dui(sql, opts={})
83: execute(sql, opts.merge(:type=>:dui))
84: end
# File lib/sequel/adapters/cubrid.rb, line 86
86: def execute_insert(sql, opts={})
87: execute(sql, opts.merge(:type=>:insert))
88: end