From 96e667616386ff5e577808717ae6c7d69ef25339 Mon Sep 17 00:00:00 2001 From: asfernandes Date: Wed, 7 Oct 2015 18:24:36 +0000 Subject: [PATCH] Fixed CORE-4954 - The package procedure with value by default isn't called if this parameter isn't specified. --- lang_helpers/gds_codes.ftn | 6 +- lang_helpers/gds_codes.pas | 3 +- src/dsql/DdlNodes.epp | 114 ++++++++++++++++++++++++------------ src/dsql/DdlNodes.h | 35 +++++++++-- src/dsql/PackageNodes.epp | 99 ++++++++----------------------- src/include/gen/codetext.h | 3 +- src/include/gen/iberror.h | 10 ++-- src/include/gen/msgs.h | 3 +- src/include/gen/sql_code.h | 3 +- src/include/gen/sql_state.h | 3 +- src/jrd/drq.h | 2 - src/msgs/facilities2.sql | 2 +- src/msgs/messages2.sql | 3 +- src/msgs/system_errors2.sql | 3 +- 14 files changed, 157 insertions(+), 132 deletions(-) diff --git a/lang_helpers/gds_codes.ftn b/lang_helpers/gds_codes.ftn index c8e9b1f3e7..036d1ae89b 100644 --- a/lang_helpers/gds_codes.ftn +++ b/lang_helpers/gds_codes.ftn @@ -1860,8 +1860,8 @@ C -- PARAMETER (GDS__dyn_funcsignat_package = 336068873) INTEGER*4 GDS__dyn_procsignat_package PARAMETER (GDS__dyn_procsignat_package = 336068874) - INTEGER*4 GDS__dyn_defvaldecl_package - PARAMETER (GDS__dyn_defvaldecl_package = 336068875) + INTEGER*4 GDS__dyn_defvaldecl_package_proc + PARAMETER (GDS__dyn_defvaldecl_package_proc = 336068875) INTEGER*4 GDS__dyn_package_body_exists PARAMETER (GDS__dyn_package_body_exists = 336068877) INTEGER*4 GDS__dyn_invalid_ddl_func @@ -1888,6 +1888,8 @@ C -- PARAMETER (GDS__dyn_cant_use_zero_increment = 336068896) INTEGER*4 GDS__dyn_cant_use_in_foreignkey PARAMETER (GDS__dyn_cant_use_in_foreignkey = 336068897) + INTEGER*4 GDS__dyn_defvaldecl_package_func + PARAMETER (GDS__dyn_defvaldecl_package_func = 336068898) INTEGER*4 GDS__gbak_unknown_switch PARAMETER (GDS__gbak_unknown_switch = 336330753) INTEGER*4 GDS__gbak_page_size_missing diff --git a/lang_helpers/gds_codes.pas b/lang_helpers/gds_codes.pas index 26667d8811..4a3b0af971 100644 --- a/lang_helpers/gds_codes.pas +++ b/lang_helpers/gds_codes.pas @@ -937,7 +937,7 @@ const gds_dyn_procnotdef_package = 336068872; gds_dyn_funcsignat_package = 336068873; gds_dyn_procsignat_package = 336068874; - gds_dyn_defvaldecl_package = 336068875; + gds_dyn_defvaldecl_package_proc = 336068875; gds_dyn_package_body_exists = 336068877; gds_dyn_invalid_ddl_func = 336068878; gds_dyn_newfc_oldsyntax = 336068879; @@ -951,6 +951,7 @@ const gds_dyn_cant_modify_sysobj = 336068895; gds_dyn_cant_use_zero_increment = 336068896; gds_dyn_cant_use_in_foreignkey = 336068897; + gds_dyn_defvaldecl_package_func = 336068898; gds_gbak_unknown_switch = 336330753; gds_gbak_page_size_missing = 336330754; gds_gbak_page_size_toobig = 336330755; diff --git a/src/dsql/DdlNodes.epp b/src/dsql/DdlNodes.epp index 2753258abc..41b61486c2 100644 --- a/src/dsql/DdlNodes.epp +++ b/src/dsql/DdlNodes.epp @@ -1906,9 +1906,9 @@ bool CreateAlterFunctionNode::executeAlter(thread_db* tdbb, DsqlCompilerScratch* if (!secondPass && modified) { - // Get all comments from the old parameter list. - MetaNameBidMap comments; - collectParamComments(tdbb, transaction, comments); + // Get all comments and defaults from the old parameter list. + CollectedParameterMap collectedParameters; + collectParameters(tdbb, transaction, collectedParameters); // delete all old arguments DropFunctionNode::dropArguments(tdbb, transaction, name, package); @@ -1921,13 +1921,13 @@ bool CreateAlterFunctionNode::executeAlter(thread_db* tdbb, DsqlCompilerScratch* for (FB_SIZE_T i = 0; i < parameters.getCount(); ++i) { ParameterClause* parameter = parameters[i]; - bid comment; + CollectedParameter collectedParameter; - // Find the original comment to recreate in the new parameter. - if (!comments.get(parameter->name, comment)) - comment.clear(); + // Find the original parameter to recreate in the new parameter. + collectedParameters.get(parameter->name, collectedParameter); - storeArgument(tdbb, dsqlScratch, transaction, i + 1, false, parameter, &comment); + storeArgument(tdbb, dsqlScratch, transaction, i + 1, false, + parameter, &collectedParameter); } } @@ -1936,7 +1936,7 @@ bool CreateAlterFunctionNode::executeAlter(thread_db* tdbb, DsqlCompilerScratch* void CreateAlterFunctionNode::storeArgument(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction, unsigned pos, bool returnArg, ParameterClause* parameter, - const bid* comment) + const CollectedParameter* collectedParameter) { Attachment* const attachment = transaction->getAttachment(); TypeClause* type = parameter->type; @@ -2053,6 +2053,14 @@ void CreateAlterFunctionNode::storeArgument(thread_db* tdbb, DsqlCompilerScratch if (parameter->defaultClause) { + if (preserveDefaults) + { + status_exception::raise( + Arg::Gds(isc_dyn_defvaldecl_package_func) << + package.c_str() << + name.c_str()); + } + ARG.RDB$DEFAULT_VALUE.NULL = FALSE; ARG.RDB$DEFAULT_SOURCE.NULL = FALSE; @@ -2073,6 +2081,16 @@ void CreateAlterFunctionNode::storeArgument(thread_db* tdbb, DsqlCompilerScratch attachment->storeBinaryBlob(tdbb, transaction, &ARG.RDB$DEFAULT_VALUE, dsqlScratch->getBlrData()); } + else if (preserveDefaults && collectedParameter) + { + ARG.RDB$DEFAULT_SOURCE.NULL = collectedParameter->defaultSource.isEmpty(); + if (!ARG.RDB$DEFAULT_SOURCE.NULL) + ARG.RDB$DEFAULT_SOURCE = collectedParameter->defaultSource; + + ARG.RDB$DEFAULT_VALUE.NULL = collectedParameter->defaultValue.isEmpty(); + if (!ARG.RDB$DEFAULT_VALUE.NULL) + ARG.RDB$DEFAULT_VALUE = collectedParameter->defaultValue; + } if (isUdf()) { @@ -2095,9 +2113,9 @@ void CreateAlterFunctionNode::storeArgument(thread_db* tdbb, DsqlCompilerScratch ARG.RDB$MECHANISM = (SSHORT) FUN_reference; } - ARG.RDB$DESCRIPTION.NULL = !comment || comment->isEmpty(); + ARG.RDB$DESCRIPTION.NULL = !collectedParameter || collectedParameter->comment.isEmpty(); if (!ARG.RDB$DESCRIPTION.NULL) - ARG.RDB$DESCRIPTION = *comment; + ARG.RDB$DESCRIPTION = collectedParameter->comment; } END_STORE } @@ -2189,18 +2207,21 @@ void CreateAlterFunctionNode::compile(thread_db* /*tdbb*/, DsqlCompilerScratch* invalid = false; } -void CreateAlterFunctionNode::collectParamComments(thread_db* tdbb, jrd_tra* transaction, - MetaNameBidMap& items) +void CreateAlterFunctionNode::collectParameters(thread_db* tdbb, jrd_tra* transaction, + CollectedParameterMap& items) { AutoRequest requestHandle; FOR (REQUEST_HANDLE requestHandle TRANSACTION_HANDLE transaction) ARG IN RDB$FUNCTION_ARGUMENTS WITH ARG.RDB$FUNCTION_NAME EQ name.c_str() AND - ARG.RDB$PACKAGE_NAME EQUIV NULLIF(package.c_str(), '') AND - ARG.RDB$DESCRIPTION NOT MISSING + ARG.RDB$PACKAGE_NAME EQUIV NULLIF(package.c_str(), '') { - items.put(ARG.RDB$ARGUMENT_NAME, ARG.RDB$DESCRIPTION); + CollectedParameter parameter; + parameter.comment = ARG.RDB$DESCRIPTION; + parameter.defaultSource = ARG.RDB$DEFAULT_SOURCE; + parameter.defaultValue = ARG.RDB$DEFAULT_VALUE; + items.put(ARG.RDB$ARGUMENT_NAME, parameter); } END_FOR } @@ -2792,9 +2813,9 @@ bool CreateAlterProcedureNode::executeAlter(thread_db* tdbb, DsqlCompilerScratch if (!secondPass && modified) { - // Get all comments from the old parameter list. - MetaNameBidMap comments; - collectParamComments(tdbb, transaction, comments); + // Get all comments and defaults from the old parameter list. + CollectedParameterMap collectedParameters; + collectParameters(tdbb, transaction, collectedParameters); // Delete all old input and output parameters. DropProcedureNode::dropParameters(tdbb, transaction, name, package); @@ -2804,25 +2825,23 @@ bool CreateAlterProcedureNode::executeAlter(thread_db* tdbb, DsqlCompilerScratch for (FB_SIZE_T i = 0; i < parameters.getCount(); ++i) { ParameterClause* parameter = parameters[i]; - bid comment; + CollectedParameter collectedParameter; - // Find the original comment to recreate in the new parameter. - if (!comments.get(parameter->name, comment)) - comment.clear(); + // Find the original parameter to recreate in the new parameter. + collectedParameters.get(parameter->name, collectedParameter); - storeParameter(tdbb, dsqlScratch, transaction, 0, i, parameter, &comment); + storeParameter(tdbb, dsqlScratch, transaction, 0, i, parameter, &collectedParameter); } for (FB_SIZE_T i = 0; i < returns.getCount(); ++i) { ParameterClause* parameter = returns[i]; - bid comment; + CollectedParameter collectedParameter; - // Find the original comment to recreate in the new parameter. - if (!comments.get(parameter->name, comment)) - comment.clear(); + // Find the original parameter to recreate in the new parameter. + collectedParameters.get(parameter->name, collectedParameter); - storeParameter(tdbb, dsqlScratch, transaction, 1, i, parameter, &comment); + storeParameter(tdbb, dsqlScratch, transaction, 1, i, parameter, &collectedParameter); } AutoCacheRequest requestHandle2(tdbb, drq_m_prm_view, DYN_REQUESTS); @@ -2854,7 +2873,7 @@ bool CreateAlterProcedureNode::executeAlter(thread_db* tdbb, DsqlCompilerScratch void CreateAlterProcedureNode::storeParameter(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction, USHORT parameterType, unsigned pos, ParameterClause* parameter, - const bid* comment) + const CollectedParameter* collectedParameter) { Attachment* const attachment = transaction->getAttachment(); TypeClause* type = parameter->type; @@ -2934,6 +2953,14 @@ void CreateAlterProcedureNode::storeParameter(thread_db* tdbb, DsqlCompilerScrat if (parameter->defaultClause) { + if (preserveDefaults) + { + status_exception::raise( + Arg::Gds(isc_dyn_defvaldecl_package_proc) << + package.c_str() << + name.c_str()); + } + attachment->storeMetaDataBlob(tdbb, transaction, &PRM.RDB$DEFAULT_SOURCE, parameter->defaultClause->source); @@ -2951,10 +2978,20 @@ void CreateAlterProcedureNode::storeParameter(thread_db* tdbb, DsqlCompilerScrat attachment->storeBinaryBlob(tdbb, transaction, &PRM.RDB$DEFAULT_VALUE, dsqlScratch->getBlrData()); } + else if (preserveDefaults && collectedParameter) + { + PRM.RDB$DEFAULT_SOURCE.NULL = collectedParameter->defaultSource.isEmpty(); + if (!PRM.RDB$DEFAULT_SOURCE.NULL) + PRM.RDB$DEFAULT_SOURCE = collectedParameter->defaultSource; - PRM.RDB$DESCRIPTION.NULL = !comment || comment->isEmpty(); + PRM.RDB$DEFAULT_VALUE.NULL = collectedParameter->defaultValue.isEmpty(); + if (!PRM.RDB$DEFAULT_VALUE.NULL) + PRM.RDB$DEFAULT_VALUE = collectedParameter->defaultValue; + } + + PRM.RDB$DESCRIPTION.NULL = !collectedParameter || collectedParameter->comment.isEmpty(); if (!PRM.RDB$DESCRIPTION.NULL) - PRM.RDB$DESCRIPTION = *comment; + PRM.RDB$DESCRIPTION = collectedParameter->comment; } END_STORE } @@ -3049,18 +3086,21 @@ void CreateAlterProcedureNode::compile(thread_db* /*tdbb*/, DsqlCompilerScratch* invalid = false; } -void CreateAlterProcedureNode::collectParamComments(thread_db* tdbb, jrd_tra* transaction, - MetaNameBidMap& items) +void CreateAlterProcedureNode::collectParameters(thread_db* tdbb, jrd_tra* transaction, + CollectedParameterMap& items) { AutoRequest requestHandle; FOR (REQUEST_HANDLE requestHandle TRANSACTION_HANDLE transaction) PRM IN RDB$PROCEDURE_PARAMETERS WITH PRM.RDB$PROCEDURE_NAME EQ name.c_str() AND - PRM.RDB$PACKAGE_NAME EQUIV NULLIF(package.c_str(), '') AND - PRM.RDB$DESCRIPTION NOT MISSING + PRM.RDB$PACKAGE_NAME EQUIV NULLIF(package.c_str(), '') { - items.put(PRM.RDB$PARAMETER_NAME, PRM.RDB$DESCRIPTION); + CollectedParameter parameter; + parameter.comment = PRM.RDB$DESCRIPTION; + parameter.defaultSource = PRM.RDB$DEFAULT_SOURCE; + parameter.defaultValue = PRM.RDB$DEFAULT_VALUE; + items.put(PRM.RDB$PARAMETER_NAME, parameter); } END_FOR } diff --git a/src/dsql/DdlNodes.h b/src/dsql/DdlNodes.h index d959a62175..3aafaca0b0 100644 --- a/src/dsql/DdlNodes.h +++ b/src/dsql/DdlNodes.h @@ -178,6 +178,25 @@ public: }; +struct CollectedParameter +{ + CollectedParameter() + { + comment.clear(); + defaultSource.clear(); + defaultValue.clear(); + } + + bid comment; + bid defaultSource; + bid defaultValue; +}; + +typedef Firebird::GenericMap< + Firebird::Pair > > + CollectedParameterMap; + + class ExecInSecurityDb { public: @@ -335,6 +354,7 @@ public: package(pool), packageOwner(pool), privateScope(false), + preserveDefaults(false), udfReturnPos(0) { } @@ -366,9 +386,10 @@ private: bool secondPass, bool runTriggers); void storeArgument(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction, - unsigned pos, bool returnArg, ParameterClause* parameter, const bid* comment); + unsigned pos, bool returnArg, ParameterClause* parameter, + const CollectedParameter* collectedParameter); void compile(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch); - void collectParamComments(thread_db* tdbb, jrd_tra* transaction, MetaNameBidMap& items); + void collectParameters(thread_db* tdbb, jrd_tra* transaction, CollectedParameterMap& items); public: Firebird::MetaName name; @@ -386,6 +407,7 @@ public: Firebird::MetaName package; Firebird::string packageOwner; bool privateScope; + bool preserveDefaults; SLONG udfReturnPos; }; @@ -473,7 +495,8 @@ public: invalid(false), package(pool), packageOwner(pool), - privateScope(false) + privateScope(false), + preserveDefaults(false) { } @@ -498,9 +521,10 @@ private: bool executeAlter(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction, bool secondPass, bool runTriggers); void storeParameter(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch, jrd_tra* transaction, - USHORT parameterType, unsigned pos, ParameterClause* parameter, const bid* comment); + USHORT parameterType, unsigned pos, ParameterClause* parameter, + const CollectedParameter* collectedParameter); void compile(thread_db* tdbb, DsqlCompilerScratch* dsqlScratch); - void collectParamComments(thread_db* tdbb, jrd_tra* transaction, MetaNameBidMap& items); + void collectParameters(thread_db* tdbb, jrd_tra* transaction, CollectedParameterMap& items); public: Firebird::MetaName name; @@ -517,6 +541,7 @@ public: Firebird::MetaName package; Firebird::string packageOwner; bool privateScope; + bool preserveDefaults; }; diff --git a/src/dsql/PackageNodes.epp b/src/dsql/PackageNodes.epp index 65d0ec5d21..ca59a92504 100644 --- a/src/dsql/PackageNodes.epp +++ b/src/dsql/PackageNodes.epp @@ -895,11 +895,17 @@ void CreatePackageBodyNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlSc continue; if (arrays[i] == items) - collectPackagedItems(tdbb, transaction, name, existingFuncs, existingProcs, true); + { + existingFuncs.clear(); + existingProcs.clear(); + } + + collectPackagedItems(tdbb, transaction, name, existingFuncs, existingProcs, true); for (unsigned j = 0; j < arrays[i]->getCount(); ++j) { CreateAlterPackageNode::Item& elem = (*arrays[i])[j]; + switch (elem.type) { case CreateAlterPackageNode::Item::FUNCTION: @@ -908,8 +914,17 @@ void CreatePackageBodyNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlSc if (arrays[i] == items) func->privateScope = !headerFuncs.exist(Signature(func->name)); + else if (existingFuncs.exist(Signature(func->name))) + { + status_exception::raise( + Arg::Gds(isc_no_meta_update) << + Arg::Gds(isc_dyn_duplicate_package_item) << + Arg::Str("FUNCTION") << Arg::Str(func->name)); + } func->packageOwner = owner; + func->preserveDefaults = + existingFuncs.exist(Signature(func->name)) && arrays[i] == items; func->executeDdl(tdbb, elem.dsqlScratch, transaction); break; } @@ -920,8 +935,17 @@ void CreatePackageBodyNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlSc if (arrays[i] == items) proc->privateScope = !headerProcs.exist(Signature(proc->name)); + else if (existingProcs.exist(Signature(proc->name))) + { + status_exception::raise( + Arg::Gds(isc_no_meta_update) << + Arg::Gds(isc_dyn_duplicate_package_item) << + Arg::Str("PROCEDURE") << Arg::Str(proc->name)); + } proc->packageOwner = owner; + proc->preserveDefaults = + existingProcs.exist(Signature(proc->name)) && arrays[i] == items; proc->executeDdl(tdbb, elem.dsqlScratch, transaction); break; } @@ -967,81 +991,8 @@ void CreatePackageBodyNode::execute(thread_db* tdbb, DsqlCompilerScratch* dsqlSc status_exception::raise( Arg::Gds(isc_dyn_procsignat_package) << i->name.c_str() << name.c_str()); } - - for (SortedObjectsArray::iterator j = newProcs[pos].parameters.begin(); - j != newProcs[pos].parameters.end(); ++j) - { - if (!j->defaultSource.isEmpty() || !j->defaultValue.isEmpty()) - { - status_exception::raise( - Arg::Gds(isc_dyn_defvaldecl_package) << name.c_str() << i->name.c_str()); - } - } } - // Lets recreate default of public procedure/function parameters - - requestHandle.reset(tdbb, drq_m_pkg_prm_defs, DYN_REQUESTS); - - FOR (REQUEST_HANDLE requestHandle TRANSACTION_HANDLE transaction) - PRM IN RDB$PROCEDURE_PARAMETERS - WITH PRM.RDB$PACKAGE_NAME EQ name.c_str() - { - FB_SIZE_T pos; - if (existingProcs.find(Signature(getPool(), MetaName(PRM.RDB$PROCEDURE_NAME)), pos)) - { - const Signature& proc = existingProcs[pos]; - - ParameterInfo paramKey(getPool()); - paramKey.type = PRM.RDB$PARAMETER_TYPE; - paramKey.number = PRM.RDB$PARAMETER_NUMBER; - - if (proc.parameters.find(paramKey, pos)) - { - const ParameterInfo& param = proc.parameters[pos]; - - MODIFY PRM - PRM.RDB$DEFAULT_SOURCE = param.defaultSource; - PRM.RDB$DEFAULT_SOURCE.NULL = param.defaultSource.isEmpty(); - - PRM.RDB$DEFAULT_VALUE = param.defaultValue; - PRM.RDB$DEFAULT_VALUE.NULL = param.defaultValue.isEmpty(); - END_MODIFY - } - } - } - END_FOR - - requestHandle.reset(tdbb, drq_m_pkg_arg_defs, DYN_REQUESTS); - - FOR (REQUEST_HANDLE requestHandle TRANSACTION_HANDLE transaction) - ARG IN RDB$FUNCTION_ARGUMENTS - WITH ARG.RDB$PACKAGE_NAME EQ name.c_str() - { - FB_SIZE_T pos; - if (existingFuncs.find(Signature(getPool(), MetaName(ARG.RDB$FUNCTION_NAME)), pos)) - { - const Signature& func = existingFuncs[pos]; - - ParameterInfo paramKey(getPool()); - paramKey.number = ARG.RDB$ARGUMENT_POSITION; - - if (func.parameters.find(paramKey, pos)) - { - const ParameterInfo& param = func.parameters[pos]; - - MODIFY ARG - ARG.RDB$DEFAULT_SOURCE = param.defaultSource; - ARG.RDB$DEFAULT_SOURCE.NULL = param.defaultSource.isEmpty(); - - ARG.RDB$DEFAULT_VALUE = param.defaultValue; - ARG.RDB$DEFAULT_VALUE.NULL = param.defaultValue.isEmpty(); - END_MODIFY - } - } - } - END_FOR - executeDdlTrigger(tdbb, dsqlScratch, transaction, DTW_AFTER, DDL_TRIGGER_CREATE_PACKAGE_BODY, name, NULL); diff --git a/src/include/gen/codetext.h b/src/include/gen/codetext.h index 7ed612b613..b143cf822a 100644 --- a/src/include/gen/codetext.h +++ b/src/include/gen/codetext.h @@ -926,7 +926,7 @@ static const struct { {"dyn_procnotdef_package", 336068872}, {"dyn_funcsignat_package", 336068873}, {"dyn_procsignat_package", 336068874}, - {"dyn_defvaldecl_package", 336068875}, + {"dyn_defvaldecl_package_proc", 336068875}, {"dyn_package_body_exists", 336068877}, {"dyn_invalid_ddl_func", 336068878}, {"dyn_newfc_oldsyntax", 336068879}, @@ -940,6 +940,7 @@ static const struct { {"dyn_cant_modify_sysobj", 336068895}, {"dyn_cant_use_zero_increment", 336068896}, {"dyn_cant_use_in_foreignkey", 336068897}, + {"dyn_defvaldecl_package_func", 336068898}, {"gbak_unknown_switch", 336330753}, {"gbak_page_size_missing", 336330754}, {"gbak_page_size_toobig", 336330755}, diff --git a/src/include/gen/iberror.h b/src/include/gen/iberror.h index 13c142c8ab..26b7b5b8c7 100644 --- a/src/include/gen/iberror.h +++ b/src/include/gen/iberror.h @@ -960,7 +960,7 @@ const ISC_STATUS isc_dyn_funcnotdef_package = 336068871L; const ISC_STATUS isc_dyn_procnotdef_package = 336068872L; const ISC_STATUS isc_dyn_funcsignat_package = 336068873L; const ISC_STATUS isc_dyn_procsignat_package = 336068874L; -const ISC_STATUS isc_dyn_defvaldecl_package = 336068875L; +const ISC_STATUS isc_dyn_defvaldecl_package_proc = 336068875L; const ISC_STATUS isc_dyn_package_body_exists = 336068877L; const ISC_STATUS isc_dyn_invalid_ddl_func = 336068878L; const ISC_STATUS isc_dyn_newfc_oldsyntax = 336068879L; @@ -974,6 +974,7 @@ const ISC_STATUS isc_dyn_duplicate_package_item = 336068894L; const ISC_STATUS isc_dyn_cant_modify_sysobj = 336068895L; const ISC_STATUS isc_dyn_cant_use_zero_increment = 336068896L; const ISC_STATUS isc_dyn_cant_use_in_foreignkey = 336068897L; +const ISC_STATUS isc_dyn_defvaldecl_package_func = 336068898L; const ISC_STATUS isc_gbak_unknown_switch = 336330753L; const ISC_STATUS isc_gbak_page_size_missing = 336330754L; const ISC_STATUS isc_gbak_page_size_toobig = 336330755L; @@ -1303,7 +1304,7 @@ const ISC_STATUS isc_trace_switch_user_only = 337182757L; const ISC_STATUS isc_trace_switch_param_miss = 337182758L; const ISC_STATUS isc_trace_param_act_notcompat = 337182759L; const ISC_STATUS isc_trace_mandatory_switch_miss = 337182760L; -const ISC_STATUS isc_err_max = 1247; +const ISC_STATUS isc_err_max = 1248; #else /* c definitions */ @@ -2233,7 +2234,7 @@ const ISC_STATUS isc_err_max = 1247; #define isc_dyn_procnotdef_package 336068872L #define isc_dyn_funcsignat_package 336068873L #define isc_dyn_procsignat_package 336068874L -#define isc_dyn_defvaldecl_package 336068875L +#define isc_dyn_defvaldecl_package_proc 336068875L #define isc_dyn_package_body_exists 336068877L #define isc_dyn_invalid_ddl_func 336068878L #define isc_dyn_newfc_oldsyntax 336068879L @@ -2247,6 +2248,7 @@ const ISC_STATUS isc_err_max = 1247; #define isc_dyn_cant_modify_sysobj 336068895L #define isc_dyn_cant_use_zero_increment 336068896L #define isc_dyn_cant_use_in_foreignkey 336068897L +#define isc_dyn_defvaldecl_package_func 336068898L #define isc_gbak_unknown_switch 336330753L #define isc_gbak_page_size_missing 336330754L #define isc_gbak_page_size_toobig 336330755L @@ -2576,7 +2578,7 @@ const ISC_STATUS isc_err_max = 1247; #define isc_trace_switch_param_miss 337182758L #define isc_trace_param_act_notcompat 337182759L #define isc_trace_mandatory_switch_miss 337182760L -#define isc_err_max 1247 +#define isc_err_max 1248 #endif diff --git a/src/include/gen/msgs.h b/src/include/gen/msgs.h index b37b6015de..24022b0ceb 100644 --- a/src/include/gen/msgs.h +++ b/src/include/gen/msgs.h @@ -929,7 +929,7 @@ Data source : @4"}, /* eds_statement */ {336068872, "Procedure @1 has not been defined on the package body @2"}, /* dyn_procnotdef_package */ {336068873, "Function @1 has a signature mismatch on package body @2"}, /* dyn_funcsignat_package */ {336068874, "Procedure @1 has a signature mismatch on package body @2"}, /* dyn_procsignat_package */ - {336068875, "Default values for parameters are allowed only in declaration of packaged procedure @1.@2"}, /* dyn_defvaldecl_package */ + {336068875, "Default values for parameters are allowed only in declaration of packaged procedure @1.@2"}, /* dyn_defvaldecl_package_proc */ {336068877, "Package body @1 already exists"}, /* dyn_package_body_exists */ {336068878, "Invalid DDL statement for function @1"}, /* dyn_invalid_ddl_func */ {336068879, "Cannot alter new style function @1 with ALTER EXTERNAL FUNCTION. Use ALTER FUNCTION instead."}, /* dyn_newfc_oldsyntax */ @@ -943,6 +943,7 @@ Data source : @4"}, /* eds_statement */ {336068895, "System @1 @2 cannot be modified"}, /* dyn_cant_modify_sysobj */ {336068896, "INCREMENT BY 0 is an illegal option for sequence @1"}, /* dyn_cant_use_zero_increment */ {336068897, "Can't use @1 in FOREIGN KEY constraint"}, /* dyn_cant_use_in_foreignkey */ + {336068898, "Default values for parameters are allowed only in declaration of packaged function @1.@2"}, /* dyn_defvaldecl_package_func */ {336330753, "found unknown switch"}, /* gbak_unknown_switch */ {336330754, "page size parameter missing"}, /* gbak_page_size_missing */ {336330755, "Page size specified (@1) greater than limit (16384 bytes)"}, /* gbak_page_size_toobig */ diff --git a/src/include/gen/sql_code.h b/src/include/gen/sql_code.h index c681d45350..97c836c38c 100644 --- a/src/include/gen/sql_code.h +++ b/src/include/gen/sql_code.h @@ -925,7 +925,7 @@ static const struct { {336068872, -901}, /* 264 dyn_procnotdef_package */ {336068873, -901}, /* 265 dyn_funcsignat_package */ {336068874, -901}, /* 266 dyn_procsignat_package */ - {336068875, -901}, /* 267 dyn_defvaldecl_package */ + {336068875, -901}, /* 267 dyn_defvaldecl_package_proc */ {336068877, -901}, /* 269 dyn_package_body_exists */ {336068878, -607}, /* 270 dyn_invalid_ddl_func */ {336068879, -901}, /* 271 dyn_newfc_oldsyntax */ @@ -939,6 +939,7 @@ static const struct { {336068895, -901}, /* 287 dyn_cant_modify_sysobj */ {336068896, -901}, /* 288 dyn_cant_use_zero_increment */ {336068897, -901}, /* 289 dyn_cant_use_in_foreignkey */ + {336068898, -901}, /* 290 dyn_defvaldecl_package_func */ {336330753, -901}, /* 1 gbak_unknown_switch */ {336330754, -901}, /* 2 gbak_page_size_missing */ {336330755, -901}, /* 3 gbak_page_size_toobig */ diff --git a/src/include/gen/sql_state.h b/src/include/gen/sql_state.h index 5f5d0ae0c7..d4e559e5b8 100644 --- a/src/include/gen/sql_state.h +++ b/src/include/gen/sql_state.h @@ -925,7 +925,7 @@ static const struct { {336068872, "42000"}, // 264 dyn_procnotdef_package {336068873, "42000"}, // 265 dyn_funcsignat_package {336068874, "42000"}, // 266 dyn_procsignat_package - {336068875, "42000"}, // 267 dyn_defvaldecl_package + {336068875, "42000"}, // 267 dyn_defvaldecl_package_proc {336068877, "42000"}, // 269 dyn_package_body_exists {336068878, "HY000"}, // 270 dyn_invalid_ddl_func {336068879, "42000"}, // 271 dyn_newfc_oldsyntax @@ -939,6 +939,7 @@ static const struct { {336068895, "42000"}, // 287 dyn_cant_modify_sysobj {336068896, "42000"}, // 288 dyn_cant_use_zero_increment {336068897, "42000"}, // 289 dyn_cant_use_in_foreignkey + {336068898, "42000"}, // 290 dyn_defvaldecl_package_func {336330753, "00000"}, // 1 gbak_unknown_switch {336330754, "00000"}, // 2 gbak_page_size_missing {336330755, "00000"}, // 3 gbak_page_size_toobig diff --git a/src/jrd/drq.h b/src/jrd/drq.h index 04c9ae785f..03f2f31d3e 100644 --- a/src/jrd/drq.h +++ b/src/jrd/drq.h @@ -205,8 +205,6 @@ enum drq_type_t drq_l_pkg_procs, // lookup packaged procedures drq_l_pkg_proc_args, // lookup packaged procedure arguments drq_e_pkg_prv, // erase package privileges - drq_m_pkg_prm_defs, // modify packaged procedure parameters defaults - drq_m_pkg_arg_defs, // modify packaged function arguments defaults drq_s2_difference, // Store backup difference file, DYN_mod's change_backup_mode drq_l_relation, // lookup relation before erase drq_l_fun_name, // lookup function name diff --git a/src/msgs/facilities2.sql b/src/msgs/facilities2.sql index 7446234d35..5448c59466 100644 --- a/src/msgs/facilities2.sql +++ b/src/msgs/facilities2.sql @@ -6,7 +6,7 @@ set bulk_insert INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUM ('2015-01-07 18:01:51', 'GFIX', 3, 134) ('1996-11-07 13:39:40', 'GPRE', 4, 1) ('2012-08-27 21:26:00', 'DSQL', 7, 33) -('2014-04-22 16:39:03', 'DYN', 8, 290) +('2015-10-07 12:30:00', 'DYN', 8, 291) ('1996-11-07 13:39:40', 'INSTALL', 10, 1) ('1996-11-07 13:38:41', 'TEST', 11, 4) ('2015-07-23 14:20:00', 'GBAK', 12, 370) diff --git a/src/msgs/messages2.sql b/src/msgs/messages2.sql index 02e2195c98..80780609b9 100644 --- a/src/msgs/messages2.sql +++ b/src/msgs/messages2.sql @@ -1934,7 +1934,7 @@ COMMIT WORK; ('dyn_procnotdef_package', 'CreatePackageBodyNode::execute', 'PackageNodes.epp', NULL, 8, 264, NULL, 'Procedure @1 has not been defined on the package body @2', NULL, NULL); ('dyn_funcsignat_package', 'CreatePackageBodyNode::execute', 'PackageNodes.epp', NULL, 8, 265, NULL, 'Function @1 has a signature mismatch on package body @2', NULL, NULL); ('dyn_procsignat_package', 'CreatePackageBodyNode::execute', 'PackageNodes.epp', NULL, 8, 266, NULL, 'Procedure @1 has a signature mismatch on package body @2', NULL, NULL); -('dyn_defvaldecl_package', 'CreatePackageBodyNode::execute', 'PackageNodes.epp', NULL, 8, 267, NULL, 'Default values for parameters are allowed only in declaration of packaged procedure @1.@2', NULL, NULL); +('dyn_defvaldecl_package_proc', 'CreatePackageBodyNode::execute', 'PackageNodes.epp', NULL, 8, 267, NULL, 'Default values for parameters are allowed only in declaration of packaged procedure @1.@2', NULL, NULL); ('dyn_dup_function', 'DYN_define_function', 'dyn_def.epp', NULL, 8, 268, NULL, 'Function @1 already exists', NULL, NULL); ('dyn_package_body_exists', NULL, 'DdlNodes.epp/PackageNodes.epp', NULL, 8, 269, NULL, 'Package body @1 already exists', NULL, NULL); ('dyn_invalid_ddl_func', 'CreateAlterFunctionNode::compile', 'DdlNodes.epp', NULL, 8, 270, NULL, 'Invalid DDL statement for function @1', NULL, NULL); @@ -1957,6 +1957,7 @@ COMMIT WORK; ('dyn_cant_modify_sysobj', NULL, 'DdlNodes.epp', NULL, 8, 287, NULL, 'System @1 @2 cannot be modified', NULL, 'Ex: System generator rdb$... cannot be modified'); ('dyn_cant_use_zero_increment', NULL, 'DdlNodes.epp', NULL, 8, 288, NULL, 'INCREMENT BY 0 is an illegal option for sequence @1', NULL, NULL); ('dyn_cant_use_in_foreignkey', NULL, 'DdlNodes.epp', NULL, 8, 289, NULL, 'Can''t use @1 in FOREIGN KEY constraint', NULL, NULL); +('dyn_defvaldecl_package_func', 'CreatePackageBodyNode::execute', 'PackageNodes.epp', NULL, 8, 290, NULL, 'Default values for parameters are allowed only in declaration of packaged function @1.@2', NULL, NULL); COMMIT WORK; -- TEST (NULL, 'main', 'test.c', NULL, 11, 0, NULL, 'This is a modified text message', NULL, NULL); diff --git a/src/msgs/system_errors2.sql b/src/msgs/system_errors2.sql index 71f747b952..ca9e43ad07 100644 --- a/src/msgs/system_errors2.sql +++ b/src/msgs/system_errors2.sql @@ -914,7 +914,7 @@ set bulk_insert INSERT INTO SYSTEM_ERRORS (SQL_CODE, SQL_CLASS, SQL_SUBCLASS, FA (-901, '42', '000', 8, 264, 'dyn_procnotdef_package', NULL, NULL) (-901, '42', '000', 8, 265, 'dyn_funcsignat_package', NULL, NULL) (-901, '42', '000', 8, 266, 'dyn_procsignat_package', NULL, NULL) -(-901, '42', '000', 8, 267, 'dyn_defvaldecl_package', NULL, NULL) +(-901, '42', '000', 8, 267, 'dyn_defvaldecl_package_proc', NULL, NULL) (-901, '42', '000', 8, 269, 'dyn_package_body_exists', NULL, NULL) (-607, 'HY', '000', 8, 270, 'dyn_invalid_ddl_func' NULL, NULL) (-901, '42', '000', 8, 271, 'dyn_newfc_oldsyntax', NULL, NULL) @@ -928,6 +928,7 @@ set bulk_insert INSERT INTO SYSTEM_ERRORS (SQL_CODE, SQL_CLASS, SQL_SUBCLASS, FA (-901, '42', '000', 8, 287, 'dyn_cant_modify_sysobj', NULL, NULL) (-901, '42', '000', 8, 288, 'dyn_cant_use_zero_increment', NULL, NULL) (-901, '42', '000', 8, 289, 'dyn_cant_use_in_foreignkey', NULL, NULL) +(-901, '42', '000', 8, 290, 'dyn_defvaldecl_package_func', NULL, NULL) -- GBAK (-901, '00', '000', 12, 1, 'gbak_unknown_switch', NULL, NULL) (-901, '00', '000', 12, 2, 'gbak_page_size_missing', NULL, NULL)