Class: ActiveRecord::ConnectionAdapters::OracleEnhancedConnection
- Inherits:
-
Object
- Object
- ActiveRecord::ConnectionAdapters::OracleEnhancedConnection
- Defined in:
- lib/active_record/connection_adapters/oracle_enhanced_connection.rb
Overview
interface independent methods
Direct Known Subclasses
Instance Attribute Summary collapse
-
#raw_connection ⇒ Object
readonly
Returns the value of attribute raw_connection.
Class Method Summary collapse
-
.create(config) ⇒ Object
:nodoc:.
Instance Method Summary collapse
-
#describe(name) ⇒ Object
Used always by JDBC connection as well by OCI connection when describing tables over database link.
-
#oracle_downcase(column_name) ⇒ Object
Oracle column names by default are case-insensitive, but treated as upcase; for neatness, we’ll downcase within Rails.
Instance Attribute Details
#raw_connection ⇒ Object (readonly)
Returns the value of attribute raw_connection.
17 18 19 |
# File 'lib/active_record/connection_adapters/oracle_enhanced_connection.rb', line 17 def raw_connection @raw_connection end |
Class Method Details
.create(config) ⇒ Object
:nodoc:
6 7 8 9 10 11 12 13 14 15 |
# File 'lib/active_record/connection_adapters/oracle_enhanced_connection.rb', line 6 def self.create(config) case ORACLE_ENHANCED_CONNECTION when :oci OracleEnhancedOCIConnection.new(config) when :jdbc OracleEnhancedJDBCConnection.new(config) else nil end end |
Instance Method Details
#describe(name) ⇒ Object
Used always by JDBC connection as well by OCI connection when describing tables over database link
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/active_record/connection_adapters/oracle_enhanced_connection.rb', line 31 def describe(name) name = name.to_s if name.include?('@') name, db_link = name.split('@') default_owner = select_value("SELECT username FROM all_db_links WHERE db_link = '#{db_link.upcase}'") db_link = "@#{db_link}" else db_link = nil default_owner = @owner end real_name = OracleEnhancedAdapter.valid_table_name?(name) ? name.upcase : name if real_name.include?('.') table_owner, table_name = real_name.split('.') else table_owner, table_name = default_owner, real_name end sql = <<-SQL SELECT owner, table_name, 'TABLE' name_type FROM all_tables#{db_link} WHERE owner = '#{table_owner}' AND table_name = '#{table_name}' UNION ALL SELECT owner, view_name table_name, 'VIEW' name_type FROM all_views#{db_link} WHERE owner = '#{table_owner}' AND view_name = '#{table_name}' UNION ALL SELECT table_owner, DECODE(db_link, NULL, table_name, table_name||'@'||db_link), 'SYNONYM' name_type FROM all_synonyms#{db_link} WHERE owner = '#{table_owner}' AND synonym_name = '#{table_name}' UNION ALL SELECT table_owner, DECODE(db_link, NULL, table_name, table_name||'@'||db_link), 'SYNONYM' name_type FROM all_synonyms#{db_link} WHERE owner = 'PUBLIC' AND synonym_name = '#{real_name}' SQL if result = select_one(sql) case result['name_type'] when 'SYNONYM' describe("#{result['owner'] && "#{result['owner']}."}#{result['table_name']}#{db_link}") else db_link ? [result['owner'], result['table_name'], db_link] : [result['owner'], result['table_name']] end else raise OracleEnhancedConnectionException, %Q{"DESC #{name}" failed; does it exist?} end end |
#oracle_downcase(column_name) ⇒ Object
Oracle column names by default are case-insensitive, but treated as upcase; for neatness, we’ll downcase within Rails. EXCEPT that folks CAN quote their column names when creating Oracle tables, which makes then case-sensitive. I don’t know anybody who does this, but we’ll handle the theoretical case of a camelCase column name. I imagine other dbs handle this different, since there’s a unit test that’s currently failing test_oci.
25 26 27 28 |
# File 'lib/active_record/connection_adapters/oracle_enhanced_connection.rb', line 25 def oracle_downcase(column_name) return nil if column_name.nil? column_name =~ /[a-z]/ ? column_name : column_name.downcase end |