From cd7f7218871a823d78c7025167cccf82be2206fb Mon Sep 17 00:00:00 2001 From: Yasuo Honda Date: Wed, 13 May 2026 10:39:49 +0900 Subject: [PATCH] Extract xmltype_argument? and tmp_table_argument? predicates `argument_metadata[:type_name] == "XMLTYPE" || argument_metadata[:data_type] =~ /XMLTYPE/` appeared verbatim in `add_argument`, `add_return_variable`, and `return_variable_value`. The shorter `argument_metadata[:tmp_table_name]` presence check also appeared in the same three dispatchers. Collapse each into a single private predicate so the rule lives in one place. No behavior change. Full suite is green (468 examples, 0 failures, 1 pre-existing pending). This is a targeted predicate extraction, not a structural refactor of the three `case argument_metadata[:data_type]` dispatchers; those remain as before. Co-Authored-By: Claude Opus 4.7 (1M context) --- lib/plsql/procedure_call.rb | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/lib/plsql/procedure_call.rb b/lib/plsql/procedure_call.rb index 27d14c8..e1624ff 100644 --- a/lib/plsql/procedure_call.rb +++ b/lib/plsql/procedure_call.rb @@ -241,7 +241,7 @@ def add_argument(argument, value, argument_metadata = nil) @bind_metadata[argument] = plsql_boolean_metadata(argument_metadata) "l_#{argument}" when "UNDEFINED", "XMLTYPE", "OPAQUE/XMLTYPE" - if argument_metadata[:type_name] == "XMLTYPE" || argument_metadata[:data_type] =~ /XMLTYPE/ + if xmltype_argument?(argument_metadata) @declare_sql << "l_#{argument} XMLTYPE;\n" @assignment_sql << "l_#{argument} := XMLTYPE(:#{argument});\n" if not value.nil? @bind_values[argument] = value if not value.nil? @@ -250,7 +250,7 @@ def add_argument(argument, value, argument_metadata = nil) end else # TABLE or PL/SQL TABLE type defined inside package - if argument_metadata[:tmp_table_name] + if tmp_table_argument?(argument_metadata) add_table_declaration_and_assignment(argument, argument_metadata) insert_values_into_tmp_table(argument, argument_metadata, value) "l_#{argument}" @@ -396,7 +396,7 @@ def add_return_variable(argument, argument_metadata, is_return_value = false) end "l_#{argument} := " if is_return_value when "UNDEFINED", "XMLTYPE", "OPAQUE/XMLTYPE" - if argument_metadata[:type_name] == "XMLTYPE" || argument_metadata[:data_type] =~ /XMLTYPE/ + if xmltype_argument?(argument_metadata) @declare_sql << "l_#{argument} XMLTYPE;\n" if is_return_value bind_variable = :"o_#{argument}" @return_vars << bind_variable @@ -417,7 +417,7 @@ def add_return_variable(argument, argument_metadata, is_return_value = false) ":#{bind_variable} := o_#{argument};\n" "l_#{argument} := " if is_return_value else - if argument_metadata[:tmp_table_name] + if tmp_table_argument?(argument_metadata) add_return_table(argument, argument_metadata, is_return_value) elsif is_return_value @return_vars << argument @@ -518,11 +518,11 @@ def return_variable_value(argument, argument_metadata) numeric_value = @cursor[":o_#{argument}"] plsql_boolean_to_ruby_value(numeric_value) when "UNDEFINED", "XMLTYPE", "OPAQUE/XMLTYPE" - if argument_metadata[:type_name] == "XMLTYPE" || argument_metadata[:data_type] =~ /XMLTYPE/ + if xmltype_argument?(argument_metadata) @cursor[":o_#{argument}"] end else - if argument_metadata[:tmp_table_name] + if tmp_table_argument?(argument_metadata) is_index_by_table = argument_metadata[:data_type] == "PL/SQL TABLE" case argument_metadata[:element][:data_type] when "PL/SQL RECORD" @@ -634,5 +634,13 @@ def plsql_boolean_to_ruby_value(numeric_value) def plsql_boolean_metadata(base_metadata) base_metadata.merge(data_type: "NUMBER", data_precision: 1) end + + def xmltype_argument?(metadata) + metadata[:type_name] == "XMLTYPE" || metadata[:data_type] =~ /XMLTYPE/ + end + + def tmp_table_argument?(metadata) + metadata[:tmp_table_name] + end end end