mirror of
https://github.com/github/rails.git
synced 2026-02-05 11:45:13 -05:00
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:
@@ -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]
|
||||
|
||||
@@ -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']),
|
||||
|
||||
Reference in New Issue
Block a user