PackageNodes.epp (Firebird-3.0.2.32703-0.tar.bz2) | : | PackageNodes.epp (Firebird-3.0.4.33054-0.tar.bz2) | ||
---|---|---|---|---|
skipping to change at line 144 | skipping to change at line 144 | |||
} | } | |||
bool operator !=(const ParameterInfo& o) const | bool operator !=(const ParameterInfo& o) const | |||
{ | { | |||
return !(*this == o); | return !(*this == o); | |||
} | } | |||
}; | }; | |||
struct Signature | struct Signature | |||
{ | { | |||
const static unsigned FLAG_DETERMINISTIC = 0x01; | ||||
Signature(MemoryPool& p, const MetaName& aName) | Signature(MemoryPool& p, const MetaName& aName) | |||
: name(p, aName), | : name(p, aName), | |||
parameters(p), | parameters(p), | |||
flags(0), | ||||
defined(false) | defined(false) | |||
{ | { | |||
} | } | |||
explicit Signature(const MetaName& aName) | explicit Signature(const MetaName& aName) | |||
: name(aName), | : name(aName), | |||
parameters(*getDefaultMemoryPool()), | parameters(*getDefaultMemoryPool()), | |||
flags(0), | ||||
defined(false) | defined(false) | |||
{ | { | |||
} | } | |||
explicit Signature(MemoryPool& p) | explicit Signature(MemoryPool& p) | |||
: name(p), | : name(p), | |||
parameters(p), | parameters(p), | |||
flags(0), | ||||
defined(false) | defined(false) | |||
{ | { | |||
} | } | |||
Signature(MemoryPool& p, const Signature& o) | Signature(MemoryPool& p, const Signature& o) | |||
: name(p, o.name), | : name(p, o.name), | |||
parameters(p), | parameters(p), | |||
flags(o.flags), | ||||
defined(o.defined) | defined(o.defined) | |||
{ | { | |||
for (SortedObjectsArray<ParameterInfo>::const_iterator i = o.parameters.begin(); | for (SortedObjectsArray<ParameterInfo>::const_iterator i = o.parameters.begin(); | |||
i != o.parameters.end(); ++i) | i != o.parameters.end(); ++i) | |||
{ | { | |||
parameters.add(*i); | parameters.add(*i); | |||
} | } | |||
} | } | |||
bool operator >(const Signature& o) const | bool operator >(const Signature& o) const | |||
{ | { | |||
return name > o.name; | return name > o.name; | |||
} | } | |||
bool operator ==(const Signature& o) const | bool operator ==(const Signature& o) const | |||
{ | { | |||
if (name != o.name || parameters.getCount() != o.paramete rs.getCount()) | if (name != o.name || flags != o.flags || parameters.getC ount() != o.parameters.getCount()) | |||
return false; | return false; | |||
for (SortedObjectsArray<ParameterInfo>::const_iterator i = parameters.begin(), | for (SortedObjectsArray<ParameterInfo>::const_iterator i = parameters.begin(), | |||
j = o.parameters.begin(); | j = o.parameters.begin(); | |||
i != parameters.end(); ++i, ++j) | i != parameters.end(); ++i, ++j) | |||
{ | { | |||
if (*i != *j) | if (*i != *j) | |||
return false; | return false; | |||
} | } | |||
return true; | return true; | |||
} | } | |||
bool operator !=(const Signature& o) const | bool operator !=(const Signature& o) const | |||
{ | { | |||
return !(*this == o); | return !(*this == o); | |||
} | } | |||
MetaName name; | MetaName name; | |||
SortedObjectsArray<ParameterInfo> parameters; | SortedObjectsArray<ParameterInfo> parameters; | |||
unsigned flags; | ||||
bool defined; | bool defined; | |||
}; | }; | |||
// Return function and procedure names (in the user charset) and optional ly its details for a | // Return function and procedure names (in the user charset) and optional ly its details for a | |||
// given package. | // given package. | |||
void collectPackagedItems(thread_db* tdbb, jrd_tra* transaction, const Me taName& metaName, | void collectPackagedItems(thread_db* tdbb, jrd_tra* transaction, const Me taName& metaName, | |||
SortedObjectsArray<Signature>& functions, | SortedObjectsArray<Signature>& functions, | |||
SortedObjectsArray<Signature>& procedures, bool details) | SortedObjectsArray<Signature>& procedures, bool details) | |||
{ | { | |||
AutoCacheRequest requestHandle(tdbb, drq_l_pkg_funcs, DYN_REQUEST S); | AutoCacheRequest requestHandle(tdbb, drq_l_pkg_funcs, DYN_REQUEST S); | |||
AutoCacheRequest requestHandle2(tdbb, drq_l_pkg_func_args, DYN_RE QUESTS); | AutoCacheRequest requestHandle2(tdbb, drq_l_pkg_func_args, DYN_RE QUESTS); | |||
FOR (REQUEST_HANDLE requestHandle TRANSACTION_HANDLE transaction) | FOR (REQUEST_HANDLE requestHandle TRANSACTION_HANDLE transaction) | |||
FUN IN RDB$FUNCTIONS | FUN IN RDB$FUNCTIONS | |||
WITH FUN.RDB$PACKAGE_NAME EQ metaName.c_str() | WITH FUN.RDB$PACKAGE_NAME EQ metaName.c_str() | |||
{ | { | |||
Signature function(FUN.RDB$FUNCTION_NAME); | Signature function(FUN.RDB$FUNCTION_NAME); | |||
function.defined = !FUN.RDB$FUNCTION_BLR.NULL || !FUN.RDB $ENTRYPOINT.NULL; | function.defined = !FUN.RDB$FUNCTION_BLR.NULL || !FUN.RDB $ENTRYPOINT.NULL; | |||
if (!FUN.RDB$DETERMINISTIC_FLAG.NULL && FUN.RDB$DETERMINI | ||||
STIC_FLAG != 0) | ||||
function.flags |= Signature::FLAG_DETERMINISTIC; | ||||
if (details) | if (details) | |||
{ | { | |||
FOR (REQUEST_HANDLE requestHandle2 TRANSACTION_HA NDLE transaction) | FOR (REQUEST_HANDLE requestHandle2 TRANSACTION_HA NDLE transaction) | |||
ARG IN RDB$FUNCTION_ARGUMENTS CROSS | ARG IN RDB$FUNCTION_ARGUMENTS CROSS | |||
FLD IN RDB$FIELDS | FLD IN RDB$FIELDS | |||
WITH ARG.RDB$PACKAGE_NAME EQ metaName.c_s tr() AND | WITH ARG.RDB$PACKAGE_NAME EQ metaName.c_s tr() AND | |||
ARG.RDB$FUNCTION_NAME EQ FUN.RDB $FUNCTION_NAME AND | ARG.RDB$FUNCTION_NAME EQ FUN.RDB $FUNCTION_NAME AND | |||
FLD.RDB$FIELD_NAME EQ ARG.RDB$FI ELD_SOURCE | FLD.RDB$FIELD_NAME EQ ARG.RDB$FI ELD_SOURCE | |||
{ | { | |||
ParameterInfo parameter(*getDefaultMemory Pool()); | ParameterInfo parameter(*getDefaultMemory Pool()); | |||
End of changes. 8 change blocks. | ||||
1 lines changed or deleted | 12 lines changed or added |