Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 6 additions & 3 deletions lib/plsql/procedure.rb
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,13 @@ def get_argument_metadata #:nodoc:

# subprogram_id column is available just from version 10g
subprogram_id_column = (@schema.connection.database_version <=> [10, 2, 0, 2]) >= 0 ? 'subprogram_id' : 'NULL'
# defaulted is available just from version 11g
defaulted_column = (@schema.connection.database_version <=> [11, 0, 0, 0]) >= 0 ? 'defaulted' : 'NULL'

@schema.select_all(
"SELECT #{subprogram_id_column}, object_name, TO_NUMBER(overload), argument_name, position, data_level,
data_type, in_out, data_length, data_precision, data_scale, char_used,
char_length, type_owner, type_name, type_subname
char_length, type_owner, type_name, type_subname, #{defaulted_column}
FROM all_arguments
WHERE object_id = :object_id
AND owner = :owner
Expand All @@ -115,7 +117,7 @@ def get_argument_metadata #:nodoc:

subprogram_id, object_name, overload, argument_name, position, data_level,
data_type, in_out, data_length, data_precision, data_scale, char_used,
char_length, type_owner, type_name, type_subname = r
char_length, type_owner, type_name, type_subname, defaulted = r

@overloaded ||= !overload.nil?
# if not overloaded then store arguments at key 0
Expand Down Expand Up @@ -155,7 +157,8 @@ def get_argument_metadata #:nodoc:
:type_owner => type_owner,
:type_name => type_name,
:type_subname => type_subname,
:sql_type_name => sql_type_name
:sql_type_name => sql_type_name,
:defaulted => defaulted
}
if tmp_table_name
@tmp_table_names[overload] << [(argument_metadata[:tmp_table_name] = tmp_table_name), argument_metadata]
Expand Down
46 changes: 46 additions & 0 deletions spec/plsql/procedure_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -2251,3 +2251,49 @@ def new_candidate(status)
end

end

describe '#get_argument_metadata' do
before(:each) do
plsql.execute <<-SQL
CREATE OR REPLACE FUNCTION magic_number(p_num INTEGER #{defaulted_clause})
RETURN INTEGER
IS
BEGIN
RETURN p_num * 2;
END magic_number;
SQL
end

after(:each) do
plsql.execute "DROP FUNCTION magic_number"
end

context 'on procedure with defaulted field' do
let(:defaulted_clause) { 'DEFAULT 21' }

it 'field\'s metadata attribute "defaulted" is Y' do
procedure = PLSQL::Procedure.find(plsql, :magic_number)
expect(procedure.arguments[0][:p_num][:defaulted]).to eq('Y')
end
end

context 'procedure without defaulted field' do
let(:defaulted_clause) { '' }

it 'field\'s metadata attribute "defaulted" is N' do
procedure = PLSQL::Procedure.find(plsql, :magic_number)
expect(procedure.arguments[0][:p_num][:defaulted]).to eq('N')
end
end

context 'oracle <= 10g without defaulted functionality' do
let(:defaulted_clause) { '' }

it 'field\'s metadata attribute "defaulted" is nil' do
allow(plsql.connection).to receive(:database_version).and_return([10, 2, 0, 2])

procedure = PLSQL::Procedure.find(plsql, :magic_number)
expect(procedure.arguments[0][:p_num][:defaulted]).to be_nil
end
end
end