| Class | Sequel::Oracle::Database |
| In: |
lib/sequel/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/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:
28: # The ruby-oci8 gem which retrieves oracle columns with a type of
29: # DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE is complex based on the
30: # ruby version (1.9.2 or later) and Oracle version (9 or later)
31: # In the now standard case of 1.9.2 and Oracle 9 or later, the timezone
32: # is determined by the Oracle session timezone. Thus if the user
33: # requests Sequel provide UTC timezone to the application,
34: # we need to alter the session timezone to be UTC
35: if Sequel.application_timezone == :utc
36: conn.exec("ALTER SESSION SET TIME_ZONE='-00:00'")
37: end
38:
39: conn
40: end
# File lib/sequel/adapters/oracle.rb, line 42
42: def dataset(opts = nil)
43: Oracle::Dataset.new(self, opts)
44: end
# File lib/sequel/adapters/oracle.rb, line 74
74: def execute(sql, opts={})
75: synchronize(opts[:server]) do |conn|
76: begin
77: r = log_yield(sql){conn.exec(sql)}
78: yield(r) if block_given?
79: r
80: rescue OCIException => e
81: raise_error(e, :disconnect=>CONNECTION_ERROR_CODES.include?(e.code))
82: end
83: end
84: end
# File lib/sequel/adapters/oracle.rb, line 46
46: def schema_parse_table(table, opts={})
47: ds = dataset
48: ds.identifier_output_method = :downcase
49: schema_and_table = "#{"#{quote_identifier(opts[:schema])}." if opts[:schema]}#{quote_identifier(table)}"
50: table_schema = []
51: metadata = transaction(opts){|conn| conn.describe_table(schema_and_table)}
52: metadata.columns.each do |column|
53: table_schema << [
54: column.name.downcase.to_sym,
55: {
56: :type => column.data_type,
57: :db_type => column.type_string.split(' ')[0],
58: :type_string => column.type_string,
59: :charset_form => column.charset_form,
60: :char_used => column.char_used?,
61: :char_size => column.char_size,
62: :data_size => column.data_size,
63: :precision => column.precision,
64: :scale => column.scale,
65: :fsprecision => column.fsprecision,
66: :lfprecision => column.lfprecision,
67: :allow_null => column.nullable?
68: }
69: ]
70: end
71: table_schema
72: end