| Module | Sequel::Oracle::DatabaseMethods |
| In: |
lib/sequel/adapters/shared/oracle.rb
|
| 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 |
| autosequence | [RW] |
# 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
# File lib/sequel/adapters/shared/oracle.rb, line 23
23: def create_trigger(*args)
24: self << create_trigger_sql(*args)
25: end
# 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
# File lib/sequel/adapters/shared/oracle.rb, line 31
31: def drop_sequence(name)
32: self << drop_sequence_sql(name)
33: end
# 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
# 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
The version of the Oracle server, used for determining capability.
# 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
# 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
# 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