diff --git a/src/jrd/cmp.cpp b/src/jrd/cmp.cpp index 0b4819b215..f2d642922a 100644 --- a/src/jrd/cmp.cpp +++ b/src/jrd/cmp.cpp @@ -5724,19 +5724,6 @@ jrd_nod* CMP_pass2(thread_db* tdbb, CompilerScratch* csb, jrd_nod* const node, j case nod_function: { - // For gbak attachments, there is no need to resolve the UDF function - // Also if we are dropping a procedure don't bother resolving the - // UDF that the procedure invokes. - if (!(tdbb->getAttachment()->att_flags & ATT_gbak_attachment) && - !(tdbb->tdbb_flags & TDBB_prc_being_dropped)) - { - jrd_nod* value = node->nod_arg[e_fun_args]; - UserFunction* function = (UserFunction*) node->nod_arg[e_fun_function]; - node->nod_arg[e_fun_function] = (jrd_nod*) FUN_resolve(tdbb, csb, function, value); - if (!node->nod_arg[e_fun_function]) { - ERR_post(Arg::Gds(isc_funmismat) << Arg::Str(function->fun_name.toString())); - } - } dsc descriptor_a; CMP_get_desc(tdbb, csb, node, &descriptor_a); csb->csb_impure += sizeof(impure_value); diff --git a/src/jrd/dbt.cpp b/src/jrd/dbt.cpp index ae4e417102..680e089aee 100644 --- a/src/jrd/dbt.cpp +++ b/src/jrd/dbt.cpp @@ -373,7 +373,6 @@ static TEXT_PTR merge_file[] = { "MERGE EQUIVALENCE FILE BLOCK", 0}; static TEXT_PTR River[] = { "SORT MERGE RIVER", 0}; static TEXT_PTR UserId[] = { "USER IDENTIFICATION BLOCK ", 0}; static TEXT_PTR Attachment[] = { "ATTACHMENT BLOCK", 0}; -static TEXT_PTR Symbol[] = { "SYMBOL", 0}; static TEXT_PTR UserFunction[] = { "FUNCTION", 0}; static TEXT_PTR IndexedRelationship[] = { "INDEXED RELATIONSHIP", 0}; static TEXT_PTR AccessItem[] = { "ACCESS", 0}; @@ -384,7 +383,6 @@ static TEXT_PTR Savepoint[] = { "SAVE POINT", 0}; static TEXT_PTR VerbAction[] = { "VERB", 0}; static TEXT_PTR BlobFilter[] = { "BLOB FILTER", 0}; static TEXT_PTR ArrayField[] = { "ARRAY DESCRIPTION", 0}; -//static TEXT_PTR blb_map[] = { "MAP BLOCK", 0}; static TEXT_PTR dir_list[] = { "DIR LIST BLOCK", 0}; static TEXT_PTR jrd_prc[] = { diff --git a/src/jrd/fun.epp b/src/jrd/fun.epp index 4649f18ae0..8763c14482 100644 --- a/src/jrd/fun.epp +++ b/src/jrd/fun.epp @@ -788,7 +788,6 @@ UserFunction* FUN_lookup_function(thread_db* tdbb, const QualifiedName& name) return function; fun_repeat temp[MAX_UDF_ARGUMENTS + 1]; - UserFunction* prior = NULL; jrd_req* request_fun = CMP_find_request(tdbb, irq_l_functions, IRQ_REQUESTS); jrd_req* request_arg = CMP_find_request(tdbb, irq_l_args, IRQ_REQUESTS); @@ -854,7 +853,7 @@ UserFunction* FUN_lookup_function(thread_db* tdbb, const QualifiedName& name) function->fun_exception_message.printf(EXCEPTION_MESSAGE, name.toString().c_str(), X.RDB$ENTRYPOINT, X.RDB$MODULE_NAME); - if (!X.RDB$ENGINE_NAME.NULL) // ODS_12_0 + if (!X.RDB$ENGINE_NAME.NULL) { HalfStaticArray body; @@ -888,19 +887,8 @@ UserFunction* FUN_lookup_function(thread_db* tdbb, const QualifiedName& name) } } - // ASF: All the places handling fun_homonym is something that doesn't work really. - // Our current system table rdb$function_arguments doesn't support overloaded - // functions as it has a rdb$function_name column instead of an ID. - if (prior) - { - function->fun_homonym = prior->fun_homonym; - prior->fun_homonym = function; - } - else - { - prior = function; - dbb->dbb_functions.put(name, function); - } + dbb->dbb_functions.put(name, function); + END_FOR; if (!REQUEST(irq_l_functions)) @@ -908,63 +896,7 @@ UserFunction* FUN_lookup_function(thread_db* tdbb, const QualifiedName& name) if (!REQUEST(irq_l_args)) REQUEST(irq_l_args) = request_arg; - return prior; -} - - -UserFunction* FUN_resolve(thread_db* tdbb, CompilerScratch* csb, UserFunction* function, jrd_nod* args) -{ -/************************************** - * - * F U N _ r e s o l v e - * - ************************************** - * - * Functional description - * Resolve instance of potentially overloaded function. - * - **************************************/ - DSC arg; - - SET_TDBB(tdbb); - - UserFunction* best = NULL; - int best_score = 0; - const jrd_nod* const* const end = args->nod_arg + args->nod_count; - - for (; function; function = function->fun_homonym) - { - if ((function->fun_entrypoint || function->fun_external) && function->fun_args == args->nod_count) - { - int score = 0; - jrd_nod** ptr; - const fun_repeat* tail; - - for (ptr = args->nod_arg, tail = function->fun_rpt + 1; ptr < end; ptr++, tail++) - { - CMP_get_desc(tdbb, csb, *ptr, &arg); - if (tail->fun_mechanism == FUN_descriptor) - score += 10; - else if (tail->fun_desc.dsc_dtype == dtype_blob || arg.dsc_dtype == dtype_blob) - { - score = 0; - break; - } - else if (tail->fun_desc.dsc_dtype >= arg.dsc_dtype) - score += 10 - (arg.dsc_dtype - tail->fun_desc.dsc_dtype); - else - score += 1; - } - - if (!best || score > best_score) - { - best_score = score; - best = function; - } - } - } - - return best; + return function; } diff --git a/src/jrd/fun_proto.h b/src/jrd/fun_proto.h index 0eb0e49f48..ff39d13f3a 100644 --- a/src/jrd/fun_proto.h +++ b/src/jrd/fun_proto.h @@ -41,7 +41,6 @@ public: void FUN_evaluate(Jrd::thread_db*, Jrd::UserFunction*, Jrd::jrd_nod*, Jrd::impure_value*); Jrd::UserFunction* FUN_lookup_function(Jrd::thread_db*, const Firebird::QualifiedName&); -Jrd::UserFunction* FUN_resolve(Jrd::thread_db*, Jrd::CompilerScratch*, Jrd::UserFunction*, Jrd::jrd_nod*); #endif // JRD_FUN_PROTO_H diff --git a/src/jrd/jrd.h b/src/jrd/jrd.h index 0af9b07322..752aa3b098 100644 --- a/src/jrd/jrd.h +++ b/src/jrd/jrd.h @@ -126,7 +126,6 @@ class ViewContext; class IndexBlock; class IndexLock; class ArrayField; -class Symbol; struct sort_context; class RecordSelExpr; class vcl; diff --git a/src/jrd/par.cpp b/src/jrd/par.cpp index 3c8d0401c0..9e7d2f5868 100644 --- a/src/jrd/par.cpp +++ b/src/jrd/par.cpp @@ -1481,14 +1481,7 @@ static jrd_nod* par_function(thread_db* tdbb, CompilerScratch* csb, SSHORT blr_o error(csb, Arg::Gds(isc_funnotdef) << Arg::Str(name.toString())); } - UserFunction* homonyms; - for (homonyms = function; homonyms; homonyms = homonyms->fun_homonym) - { - if (homonyms->fun_entrypoint || homonyms->fun_external) - break; - } - - if (!homonyms) + if (!function->fun_entrypoint && !function->fun_external) { if (tdbb->getAttachment()->att_flags & ATT_gbak_attachment) { diff --git a/src/jrd/val.h b/src/jrd/val.h index 82b32eb8e3..3e681f66f2 100644 --- a/src/jrd/val.h +++ b/src/jrd/val.h @@ -60,7 +60,6 @@ class blb; class jrd_req; class jrd_tra; class PatternMatcher; -class Symbol; // Various structures in the impure area @@ -197,8 +196,6 @@ class UserFunction : public pool_alloc_rpt public: Firebird::QualifiedName fun_name; // Function name Firebird::string fun_exception_message; // message containing the exception error message - UserFunction* fun_homonym; // Homonym functions - Symbol* fun_symbol; // Symbol block int (*fun_entrypoint) (); // Function entrypoint USHORT fun_count; // Number of arguments (including return) USHORT fun_args; // Number of input arguments