More compatible Oracle column reflection. Closes #2771.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@2935 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Jeremy Kemper
2005-11-08 04:37:22 +00:00
parent 5298f730bb
commit a90fdec031
2 changed files with 18 additions and 7 deletions

View File

@@ -1,3 +1,8 @@
*SVN*
* More compatible Oracle column reflection. #2771 [Ryan Davis <ryand-ruby@zenspider.com>, Michael Schoen <schoenm@earthlink.net>]
*1.13.0* (November 7th, 2005)
* Fixed faulty regex in get_table_name method (SQLServerAdapter) #2639 [Ryan Tomayko]

View File

@@ -312,19 +312,25 @@ begin
end
def columns(table_name, name = nil) #:nodoc:
table_name = table_name.to_s.upcase
owner = table_name.include?('.') ? "'#{table_name.split('.').first}'" : "user"
table = "'#{table_name.split('.').last}'"
select_all(%Q{
select column_name, data_type, data_default, nullable,
case when data_type = 'NUMBER' then data_precision
when data_type = 'VARCHAR2' then data_length
when data_type = 'VARCHAR2' then data_length
else null end as length,
case when data_type = 'NUMBER' then data_scale
else null end as scale
from user_catalog cat, user_synonyms syn, all_tab_columns col
where cat.table_name = '#{table_name.to_s.upcase}'
and syn.synonym_name (+)= cat.table_name
and col.owner = nvl(syn.table_owner, user)
and col.table_name = nvl(syn.table_name, cat.table_name)}
).map do |row|
from all_catalog cat, all_synonyms syn, all_tab_columns col
where cat.owner = #{owner}
and cat.table_name = #{table}
and syn.owner (+)= cat.owner
and syn.synonym_name (+)= cat.table_name
and col.owner = nvl(syn.table_owner, cat.owner)
and col.table_name = nvl(syn.table_name, cat.table_name)
}).map do |row|
row['data_default'].gsub!(/^'(.*)'$/, '\1') if row['data_default']
OCIColumn.new(
oci_downcase(row['column_name']),