Title: [681] trunk/activerecord-jdbc/lib: Better handling of indexes for Oracle
- Revision
- 681
- Author
- olabini
- Date
- 2007-08-04 00:36:15 -0400 (Sat, 04 Aug 2007)
Log Message
Better handling of indexes for Oracle
Modified Paths
Diff
Modified: trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb (680 => 681)
--- trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb 2007-08-01 22:57:02 UTC (rev 680)
+++ trunk/activerecord-jdbc/lib/active_record/connection_adapters/jdbc_adapter.rb 2007-08-04 04:36:15 UTC (rev 681)
@@ -268,7 +268,7 @@
# should filter the return from this method instead.
#
# TODO: fix to use reconnect correctly
- def indexes(table_name, name = nil)
+ def indexes(table_name, name = nil, schema_name = nil)
metadata = @connection.getMetaData
unless String === table_name
table_name = table_name.to_s
@@ -277,12 +277,14 @@
end
table_name.upcase! if metadata.storesUpperCaseIdentifiers
table_name.downcase! if metadata.storesLowerCaseIdentifiers
- resultset = metadata.getIndexInfo(nil, nil, table_name, false, false)
+ resultset = metadata.getIndexInfo(nil, schema_name, table_name, false, false)
primary_keys = primary_keys(table_name)
indexes = []
current_index = nil
while resultset.next
- index_name = resultset.get_string(Jdbc::IndexMetaData::INDEX_NAME).downcase
+ index_name = resultset.get_string(Jdbc::IndexMetaData::INDEX_NAME)
+ next unless index_name
+ index_name.downcase!
column_name = resultset.get_string(Jdbc::IndexMetaData::COLUMN_NAME).downcase
next if primary_keys.include? column_name
Modified: trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb (680 => 681)
--- trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb 2007-08-01 22:57:02 UTC (rev 680)
+++ trunk/activerecord-jdbc/lib/jdbc_adapter/jdbc_oracle.rb 2007-08-04 04:36:15 UTC (rev 681)
@@ -102,6 +102,10 @@
execute "DROP SEQUENCE #{name}_seq" rescue nil
end
+ def recreate_database(name)
+ tables.each{ |table| drop_table(table) }
+ end
+
def insert(sql, name = nil, pk = nil, id_value = nil, sequence_name = nil) #:nodoc:
if pk.nil? # Who called us? What does the sql look like? No idea!
execute sql, name
@@ -116,6 +120,10 @@
id_value
end
+ def indexes(table, name = nil)
+ @connection.indexesr(table, name, @connection.connection.meta_data.user_name)
+ end
+
def _execute(sql, name = nil)
case sql.strip
when /^(select|show)/i:
@@ -182,7 +190,11 @@
from user_tab_columns
where table_name = '#{table.to_a.first.last}'
order by column_id
- }).map do |row|
+ }).map do |row|
+ row = row.inject({}) do |h,args|
+ h[args[0].downcase] = args[1]
+ h
+ end
col = "#{row['column_name'].downcase} #{row['data_type'].downcase}"
if row['data_type'] =='NUMBER' and !row['data_precision'].nil?
col << "(#{row['data_precision'].to_i}"
_______________________________________________
Jruby-extras-devel mailing list
[email protected]
http://rubyforge.org/mailman/listinfo/jruby-extras-devel