@@ -237,8 +237,8 @@ def add_argument(argument, value, argument_metadata = nil)
237237 when "PL/SQL BOOLEAN"
238238 @declare_sql << "l_#{ argument } BOOLEAN;\n "
239239 @assignment_sql << "l_#{ argument } := (:#{ argument } = 1);\n "
240- @bind_values [ argument ] = value . nil? ? nil : ( value ? 1 : 0 )
241- @bind_metadata [ argument ] = argument_metadata . merge ( data_type : "NUMBER" , data_precision : 1 )
240+ @bind_values [ argument ] = ruby_value_to_plsql_boolean ( value )
241+ @bind_metadata [ argument ] = plsql_boolean_metadata ( argument_metadata )
242242 "l_#{ argument } "
243243 when "UNDEFINED" , "XMLTYPE" , "OPAQUE/XMLTYPE"
244244 if argument_metadata [ :type_name ] == "XMLTYPE" || argument_metadata [ :data_type ] =~ /XMLTYPE/
@@ -352,8 +352,8 @@ def record_assignment_sql_values_metadata(argument, argument_metadata, record_va
352352 case metadata [ :data_type ]
353353 when "PL/SQL BOOLEAN"
354354 sql << "l_#{ argument } .#{ field } := (:#{ bind_variable } = 1);\n "
355- bind_values [ bind_variable ] = value . nil? ? nil : ( value ? 1 : 0 )
356- bind_metadata [ bind_variable ] = metadata . merge ( data_type : "NUMBER" , data_precision : 1 )
355+ bind_values [ bind_variable ] = ruby_value_to_plsql_boolean ( value )
356+ bind_metadata [ bind_variable ] = plsql_boolean_metadata ( metadata )
357357 else
358358 sql << "l_#{ argument } .#{ field } := :#{ bind_variable } ;\n "
359359 bind_values [ bind_variable ] = value
@@ -384,7 +384,7 @@ def add_return_variable(argument, argument_metadata, is_return_value = false)
384384 case metadata [ :data_type ]
385385 when "PL/SQL BOOLEAN"
386386 @return_vars << bind_variable
387- @return_vars_metadata [ bind_variable ] = metadata . merge ( data_type : "NUMBER" , data_precision : 1 )
387+ @return_vars_metadata [ bind_variable ] = plsql_boolean_metadata ( metadata )
388388 arg_field = "l_#{ argument } .#{ field } "
389389 @return_sql << ":#{ bind_variable } := " << "CASE WHEN #{ arg_field } = true THEN 1 " <<
390390 "WHEN #{ arg_field } = false THEN 0 ELSE NULL END;\n "
@@ -411,7 +411,7 @@ def add_return_variable(argument, argument_metadata, is_return_value = false)
411411 # if output bind variable appears in several places
412412 bind_variable = :"o_#{ argument } "
413413 @return_vars << bind_variable
414- @return_vars_metadata [ bind_variable ] = argument_metadata . merge ( data_type : "NUMBER" , data_precision : 1 )
414+ @return_vars_metadata [ bind_variable ] = plsql_boolean_metadata ( argument_metadata )
415415 @return_sql << "IF l_#{ argument } IS NULL THEN\n o_#{ argument } := NULL;\n " <<
416416 "ELSIF l_#{ argument } THEN\n o_#{ argument } := 1;\n ELSE\n o_#{ argument } := 0;\n END IF;\n " <<
417417 ":#{ bind_variable } := o_#{ argument } ;\n "
@@ -508,15 +508,15 @@ def return_variable_value(argument, argument_metadata)
508508 field_value = @cursor [ ":#{ argument } _o#{ metadata [ :position ] } " ]
509509 case metadata [ :data_type ]
510510 when "PL/SQL BOOLEAN"
511- return_value [ field ] = field_value . nil? ? nil : field_value == 1
511+ return_value [ field ] = plsql_boolean_to_ruby_value ( field_value )
512512 else
513513 return_value [ field ] = field_value
514514 end
515515 end
516516 return_value
517517 when "PL/SQL BOOLEAN"
518518 numeric_value = @cursor [ ":o_#{ argument } " ]
519- numeric_value . nil? ? nil : numeric_value == 1
519+ plsql_boolean_to_ruby_value ( numeric_value )
520520 when "UNDEFINED" , "XMLTYPE" , "OPAQUE/XMLTYPE"
521521 if argument_metadata [ :type_name ] == "XMLTYPE" || argument_metadata [ :data_type ] =~ /XMLTYPE/
522522 @cursor [ ":o_#{ argument } " ]
@@ -622,5 +622,17 @@ def dbms_output_log
622622 end
623623 @dbms_output_stream . flush if @dbms_output_stream
624624 end
625+
626+ def ruby_value_to_plsql_boolean ( value )
627+ value . nil? ? nil : ( value ? 1 : 0 )
628+ end
629+
630+ def plsql_boolean_to_ruby_value ( numeric_value )
631+ numeric_value . nil? ? nil : numeric_value == 1
632+ end
633+
634+ def plsql_boolean_metadata ( base_metadata )
635+ base_metadata . merge ( data_type : "NUMBER" , data_precision : 1 )
636+ end
625637 end
626638end
0 commit comments