Module Sequel::Oracle::DatabaseMethods
In: lib/sequel/adapters/shared/oracle.rb

Methods

Constants

IGNORE_OWNERS = %w'APEX_040000 CTXSYS EXFSYS MDSYS OLAPSYS ORDDATA ORDSYS SYS SYSTEM XDB XDBMETADATA XDBPM XFILES WMSYS'.freeze
DATABASE_ERROR_REGEXPS = { /unique constraint .+ violated/ => UniqueConstraintViolation, /integrity constraint .+ violated/ => ForeignKeyConstraintViolation, /check constraint .+ violated/ => CheckConstraintViolation, /cannot insert NULL into|cannot update .+ to NULL/ => NotNullConstraintViolation, /can't serialize access for this transaction/ => SerializationFailure, /resource busy and acquire with NOWAIT specified or timeout/ => DatabaseLockTimeout, }.freeze
TRANSACTION_ISOLATION_LEVELS = {:uncommitted=>'READ COMMITTED'.freeze, :committed=>'READ COMMITTED'.freeze, :repeatable=>'SERIALIZABLE'.freeze, :serializable=>'SERIALIZABLE'.freeze}.freeze

Attributes

autosequence  [RW] 

Public Instance methods

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 19
19:       def create_sequence(name, opts=OPTS)
20:         self << create_sequence_sql(name, opts)
21:       end

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 23
23:       def create_trigger(*args)
24:         self << create_trigger_sql(*args)
25:       end

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 27
27:       def current_user
28:         @current_user ||= metadata_dataset.get{sys_context('USERENV', 'CURRENT_USER')}
29:       end

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 35
35:       def database_type
36:         :oracle
37:       end

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 31
31:       def drop_sequence(name)
32:         self << drop_sequence_sql(name)
33:       end

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 39
39:       def foreign_key_list(table, opts=OPTS)
40:         m = output_identifier_meth
41:         im = input_identifier_meth
42:         schema, table = schema_and_table(table)
43:         ds = metadata_dataset.
44:           from{[all_cons_columns.as(:pc), all_constraints.as(:p), all_cons_columns.as(:fc), all_constraints.as(:f)]}.
45:           where{{
46:             f[:table_name]=>im.call(table),
47:             f[:constraint_type]=>'R',
48:             p[:owner]=>f[:r_owner],
49:             p[:constraint_name]=>f[:r_constraint_name],
50:             pc[:owner]=>p[:owner],
51:             pc[:constraint_name]=>p[:constraint_name],
52:             pc[:table_name]=>p[:table_name],
53:             fc[:owner]=>f[:owner],
54:             fc[:constraint_name]=>f[:constraint_name],
55:             fc[:table_name]=>f[:table_name],
56:             fc[:position]=>pc[:position]}}.
57:           select{[p[:table_name].as(:table), pc[:column_name].as(:key), fc[:column_name].as(:column), f[:constraint_name].as(:name)]}.
58:           order{[:table, fc[:position]]}
59:         ds = ds.where{{f[:schema_name]=>im.call(schema)}} if schema
60: 
61:         fks = {}
62:         ds.each do |r|
63:           if fk = fks[r[:name]]
64:             fk[:columns] << m.call(r[:column])
65:             fk[:key] << m.call(r[:key])
66:           else
67:             fks[r[:name]] = {:name=>m.call(r[:name]), :columns=>[m.call(r[:column])], :table=>m.call(r[:table]), :key=>[m.call(r[:key])]}
68:           end
69:         end
70:         fks.values
71:       end

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 73
73:       def freeze
74:         current_user
75:         server_version
76:         @conversion_procs.freeze
77:         super
78:       end

Oracle namespaces indexes per table.

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 81
81:       def global_index_namespace?
82:         false
83:       end

The version of the Oracle server, used for determining capability.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 115
115:       def server_version(server=nil)
116:         return @server_version if @server_version
117:         @server_version = synchronize(server) do |conn|
118:           (conn.server_version rescue nil) if conn.respond_to?(:server_version)
119:         end
120:         unless @server_version
121:           @server_version = if m = /(\d+)\.(\d+)\.?(\d+)?\.?(\d+)?/.match(fetch("select version from PRODUCT_COMPONENT_VERSION where lower(product) like 'oracle%'").single_value)
122:             (m[1].to_i*1000000) + (m[2].to_i*10000) + (m[3].to_i*100) + m[4].to_i
123:           else
124:             0
125:           end
126:         end
127:         @server_version
128:       end

Oracle supports deferrable constraints.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 132
132:       def supports_deferrable_constraints?
133:         true
134:       end

Oracle supports transaction isolation levels.

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 137
137:       def supports_transaction_isolation_levels?
138:         true
139:       end

[Source]

    # File lib/sequel/adapters/shared/oracle.rb, line 87
87:       def tables(opts=OPTS)
88:         m = output_identifier_meth
89:         metadata_dataset.from(:all_tables).
90:           server(opts[:server]).
91:           where(:dropped=>'NO').
92:           exclude(:owner=>IGNORE_OWNERS).
93:           select(:table_name).
94:           map{|r| m.call(r[:table_name])}
95:       end

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 106
106:       def view_exists?(name) 
107:         m = input_identifier_meth
108:         metadata_dataset.from(:all_views).
109:           exclude(:owner=>IGNORE_OWNERS).
110:           where(:view_name=>m.call(name)).
111:           count > 0
112:       end

[Source]

     # File lib/sequel/adapters/shared/oracle.rb, line 97
 97:       def views(opts=OPTS) 
 98:         m = output_identifier_meth
 99:         metadata_dataset.from(:all_views).
100:           server(opts[:server]).
101:           exclude(:owner=>IGNORE_OWNERS).
102:           select(:view_name).
103:           map{|r| m.call(r[:view_name])}
104:       end

[Validate]