From: <fir...@us...> - 2011-07-03 03:16:49
|
Revision: 53277 http://firebird.svn.sourceforge.net/firebird/?rev=53277&view=rev Author: firebirds Date: 2011-07-03 03:16:43 +0000 (Sun, 03 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-02 22:10:07 UTC (rev 53276) +++ firebird/trunk/ChangeLog 2011-07-03 03:16:43 UTC (rev 53277) @@ -1,3 +1,12 @@ + 2011-07-02 22:10 asfernandes + M src/common/StatusHolder.cpp + M src/jrd/jrd.cpp + M src/remote/client/interface.cpp + M src/remote/protocol.cpp + M src/remote/server/server.cpp + M src/yvalve/why.cpp +Misc. + 2011-07-01 16:15 dimitr A builds/win32/msvc8/legacy_usermanager.vcproj (from /firebird/trunk/builds/win32/msvc8/legacy_usermanager.vcxproj:53272) D builds/win32/msvc8/legacy_usermanager.vcxproj Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-02 22:10:07 UTC (rev 53276) +++ firebird/trunk/src/jrd/build_no.h 2011-07-03 03:16:43 UTC (rev 53277) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29482 + FORMAL BUILD NUMBER:29483 */ -#define PRODUCT_VER_STRING "3.0.0.29482" -#define FILE_VER_STRING "WI-T3.0.0.29482" -#define LICENSE_VER_STRING "WI-T3.0.0.29482" -#define FILE_VER_NUMBER 3, 0, 0, 29482 +#define PRODUCT_VER_STRING "3.0.0.29483" +#define FILE_VER_STRING "WI-T3.0.0.29483" +#define LICENSE_VER_STRING "WI-T3.0.0.29483" +#define FILE_VER_NUMBER 3, 0, 0, 29483 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29482" +#define FB_BUILD_NO "29483" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-02 22:10:07 UTC (rev 53276) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-03 03:16:43 UTC (rev 53277) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29482 +BuildNum=29483 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-08 03:19:10
|
Revision: 53280 http://firebird.svn.sourceforge.net/firebird/?rev=53280&view=rev Author: firebirds Date: 2011-07-08 03:19:03 +0000 (Fri, 08 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-07 16:24:27 UTC (rev 53279) +++ firebird/trunk/ChangeLog 2011-07-08 03:19:03 UTC (rev 53280) @@ -1,3 +1,10 @@ + 2011-07-07 07:58 robocop + M src/common/StatusHolder.cpp + M src/common/StatusHolder.h + M src/include/firebird/Message.h + M src/remote/server/server.cpp +Misc. + 2011-07-02 22:10 asfernandes M src/common/StatusHolder.cpp M src/jrd/jrd.cpp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-07 16:24:27 UTC (rev 53279) +++ firebird/trunk/src/jrd/build_no.h 2011-07-08 03:19:03 UTC (rev 53280) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29483 + FORMAL BUILD NUMBER:29484 */ -#define PRODUCT_VER_STRING "3.0.0.29483" -#define FILE_VER_STRING "WI-T3.0.0.29483" -#define LICENSE_VER_STRING "WI-T3.0.0.29483" -#define FILE_VER_NUMBER 3, 0, 0, 29483 +#define PRODUCT_VER_STRING "3.0.0.29484" +#define FILE_VER_STRING "WI-T3.0.0.29484" +#define LICENSE_VER_STRING "WI-T3.0.0.29484" +#define FILE_VER_NUMBER 3, 0, 0, 29484 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29483" +#define FB_BUILD_NO "29484" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-07 16:24:27 UTC (rev 53279) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-08 03:19:03 UTC (rev 53280) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29483 +BuildNum=29484 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <asf...@us...> - 2011-07-10 01:24:02
|
Revision: 53285 http://firebird.svn.sourceforge.net/firebird/?rev=53285&view=rev Author: asfernandes Date: 2011-07-10 01:23:53 +0000 (Sun, 10 Jul 2011) Log Message: ----------- Use the BLR message definition of external procedures and functions. Modified Paths: -------------- firebird/trunk/examples/udr/UdrCppExample.cpp firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/dsql/DdlNodes.epp firebird/trunk/src/include/firebird/ExternalEngine.h firebird/trunk/src/include/firebird/Message.h firebird/trunk/src/include/firebird/UdrCppEngine.h firebird/trunk/src/include/firebird/UdrEngine.h firebird/trunk/src/include/gen/codetext.h firebird/trunk/src/include/gen/iberror.h firebird/trunk/src/include/gen/msgs.h firebird/trunk/src/include/gen/sql_code.h firebird/trunk/src/include/gen/sql_state.h firebird/trunk/src/jrd/BlrReader.h firebird/trunk/src/jrd/ExtEngineManager.cpp firebird/trunk/src/jrd/ExtEngineManager.h firebird/trunk/src/jrd/Function.epp firebird/trunk/src/jrd/Function.h firebird/trunk/src/jrd/exe.cpp firebird/trunk/src/jrd/exe.h firebird/trunk/src/jrd/met.epp firebird/trunk/src/jrd/par.cpp firebird/trunk/src/jrd/par_proto.h firebird/trunk/src/msgs/facilities2.sql firebird/trunk/src/msgs/messages2.sql firebird/trunk/src/msgs/system_errors2.sql firebird/trunk/src/plugins/udr_engine/UdrEngine.cpp Modified: firebird/trunk/examples/udr/UdrCppExample.cpp =================================================================== --- firebird/trunk/examples/udr/UdrCppExample.cpp 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/examples/udr/UdrCppExample.cpp 2011-07-10 01:23:53 UTC (rev 53285) @@ -289,7 +289,7 @@ blrLength = 0; blr = blrPos = new ISC_UCHAR[sizeof(HEADER) + 10 * itemCount + 2]; bufferLength = 0; - buffer = (ISC_UCHAR*) aBuffer; + buffer = static_cast<ISC_UCHAR*>(aBuffer); memcpy(blrPos, HEADER, sizeof(HEADER)); blrPos += sizeof(HEADER); @@ -795,6 +795,7 @@ FB_UDR_END_PROCEDURE +//// TODO: Rework triggers. /*** Sample usage: Modified: firebird/trunk/lang_helpers/gds_codes.ftn =================================================================== --- firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-10 01:23:53 UTC (rev 53285) @@ -1462,6 +1462,10 @@ PARAMETER (GDS__sysf_argscant_both_be_zero = 335545024) INTEGER*4 GDS__spb_no_id PARAMETER (GDS__spb_no_id = 335545025) + INTEGER*4 GDS__ee_blr_mismatch_null + PARAMETER (GDS__ee_blr_mismatch_null = 335545026) + INTEGER*4 GDS__ee_blr_mismatch_length + PARAMETER (GDS__ee_blr_mismatch_length = 335545027) INTEGER*4 GDS__gfix_db_name PARAMETER (GDS__gfix_db_name = 335740929) INTEGER*4 GDS__gfix_invalid_sw Modified: firebird/trunk/lang_helpers/gds_codes.pas =================================================================== --- firebird/trunk/lang_helpers/gds_codes.pas 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/lang_helpers/gds_codes.pas 2011-07-10 01:23:53 UTC (rev 53285) @@ -738,6 +738,8 @@ gds_invalid_boolean_usage = 335545023; gds_sysf_argscant_both_be_zero = 335545024; gds_spb_no_id = 335545025; + gds_ee_blr_mismatch_null = 335545026; + gds_ee_blr_mismatch_length = 335545027; gds_gfix_db_name = 335740929; gds_gfix_invalid_sw = 335740930; gds_gfix_incmp_sw = 335740932; Modified: firebird/trunk/src/dsql/DdlNodes.epp =================================================================== --- firebird/trunk/src/dsql/DdlNodes.epp 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/dsql/DdlNodes.epp 2011-07-10 01:23:53 UTC (rev 53285) @@ -1448,7 +1448,7 @@ ARG.RDB$COLLATION_ID.NULL = TRUE; ARG.RDB$ARGUMENT_MECHANISM.NULL = FALSE; - ARG.RDB$ARGUMENT_MECHANISM = (USHORT) (parameter.fullDomain || parameter.typeOfName.isEmpty() ? + ARG.RDB$ARGUMENT_MECHANISM = (USHORT) (parameter.fullDomain ? prm_mech_normal : prm_mech_type_of); if (parameter.notNull) @@ -2226,7 +2226,7 @@ PRM.RDB$PARAMETER_TYPE = type; PRM.RDB$PARAMETER_MECHANISM.NULL = FALSE; - PRM.RDB$PARAMETER_MECHANISM = (USHORT) (parameter.fullDomain || parameter.typeOfName.isEmpty() ? + PRM.RDB$PARAMETER_MECHANISM = (USHORT) (parameter.fullDomain ? prm_mech_normal : prm_mech_type_of); PRM.RDB$NULL_FLAG.NULL = !parameter.notNull; Modified: firebird/trunk/src/include/firebird/ExternalEngine.h =================================================================== --- firebird/trunk/src/include/firebird/ExternalEngine.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/firebird/ExternalEngine.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -43,6 +43,14 @@ const int EXTERNAL_VERSION_1 = 1; +struct BlrMessage +{ + const unsigned char* blr; + unsigned int blrLength; + unsigned int bufferLength; +}; + + // Connection to current database in external engine. // Context passed to ExternalEngine has SYSDBA privileges. // Context passed to ExternalFunction, ExternalProcedure and ExternalTrigger @@ -97,7 +105,7 @@ Utf8* name, uint nameSize) = 0; virtual void FB_CALL execute(Error* error, ExternalContext* context, - UCHAR* inMsg, UCHAR* outMsg) = 0; + void* inMsg, void* outMsg) = 0; }; @@ -114,7 +122,7 @@ // Returning NULL results in a result set of one record. // Procedures without output parameters should return NULL. virtual ExternalResultSet* FB_CALL open(Error* error, ExternalContext* context, - UCHAR* inMsg, UCHAR* outMsg) = 0; + void* inMsg, void* outMsg) = 0; }; @@ -149,7 +157,7 @@ Utf8* name, uint nameSize) = 0; virtual void FB_CALL execute(Error* error, ExternalContext* context, - Action action, UCHAR* oldMsg, UCHAR* newMsg) = 0; + Action action, void* oldMsg, void* newMsg) = 0; }; @@ -192,9 +200,9 @@ // Called when engine wants to load object in the cache. Objects are disposed when // going out of the cache. virtual ExternalFunction* FB_CALL makeFunction(Error* error, ExternalContext* context, - const IRoutineMetadata* metadata) = 0; + const IRoutineMetadata* metadata, BlrMessage* inBlr, BlrMessage* outBlr) = 0; virtual ExternalProcedure* FB_CALL makeProcedure(Error* error, ExternalContext* context, - const IRoutineMetadata* metadata) = 0; + const IRoutineMetadata* metadata, BlrMessage* inBlr, BlrMessage* outBlr) = 0; virtual ExternalTrigger* FB_CALL makeTrigger(Error* error, ExternalContext* context, const IRoutineMetadata* metadata) = 0; }; Modified: firebird/trunk/src/include/firebird/Message.h =================================================================== --- firebird/trunk/src/include/firebird/Message.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/firebird/Message.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -37,8 +37,7 @@ #define FB_MESSAGE_I(name, fields) \ struct name \ { \ - /* TODO: use it */ \ - static const unsigned char* BLR() \ + static const unsigned char* getBlr(unsigned* length) \ { \ static const unsigned char blr[] = { \ blr_version5, \ @@ -50,10 +49,11 @@ blr_end, \ blr_eoc \ }; \ + *length = sizeof(blr); \ return blr; \ } \ \ - static unsigned SIZE() \ + static unsigned getSize() \ { \ return (unsigned)(size_t) (&((name*) 0)->FB_BOOST_PP_CAT( \ FB_BOOST_PP_TUPLE_ELEM(2, 1, \ @@ -79,7 +79,7 @@ #define FB_BLR_FB_SMALLINT FB_BLR_FB_SCALED_SMALLINT(0) #define FB_BLR_FB_INTEGER FB_BLR_FB_SCALED_INTEGER(0) #define FB_BLR_FB_BIGINT FB_BLR_FB_SCALED_BIGINT(0) -#define FB_BLR_FB_VARCHAR(len) blr_varying, (len) & 0xFF, (len) >> 8 +#define FB_BLR_FB_VARCHAR(len) blr_varying2, 0, 0, (len) & 0xFF, (len) >> 8 #define FB_TYPE_FB_SCALED_SMALLINT(x) ISC_SHORT #define FB_TYPE_FB_SCALED_INTEGER(x) ISC_LONG @@ -87,7 +87,7 @@ #define FB_TYPE_FB_SMALLINT ISC_SHORT #define FB_TYPE_FB_INTEGER ISC_LONG #define FB_TYPE_FB_BIGINT ISC_INT64 -#define FB_TYPE_FB_VARCHAR(len) FbVarChar<(len)> +#define FB_TYPE_FB_VARCHAR(len) ::Firebird::FbVarChar<(len)> namespace Firebird { Modified: firebird/trunk/src/include/firebird/UdrCppEngine.h =================================================================== --- firebird/trunk/src/include/firebird/UdrCppEngine.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/firebird/UdrCppEngine.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -75,7 +75,7 @@ #define FB_UDR_EXECUTE__FUNCTION \ virtual void FB_CALL execute(::Firebird::Error* error, ::Firebird::ExternalContext* context, \ - UCHAR* inMsg, UCHAR* outMsg) \ + void* inMsg, void* outMsg) \ { \ try \ { \ @@ -131,7 +131,7 @@ #define FB_UDR_EXECUTE__PROCEDURE \ virtual ::Firebird::ExternalResultSet* FB_CALL open(::Firebird::Error* error, \ - ::Firebird::ExternalContext* context, UCHAR* inMsg, UCHAR* outMsg) \ + ::Firebird::ExternalContext* context, void* inMsg, void* outMsg) \ { \ try \ { \ @@ -192,7 +192,7 @@ { \ public: \ virtual void FB_CALL execute(::Firebird::Error* error, ::Firebird::ExternalContext* context, \ - ::Firebird::ExternalTrigger::Action action, UCHAR* oldMsg, UCHAR* newMsg); + ::Firebird::ExternalTrigger::Action action, void* oldMsg, void* newMsg); #define FB_UDR_END_DECLARE_TRIGGER(name) \ }; @@ -204,7 +204,7 @@ #define FB_UDR_BEGIN_TRIGGER(name) \ void FB_CALL FB_UDR_TRIGGER(name)::execute(::Firebird::Error* error, \ ::Firebird::ExternalContext* context, ::Firebird::ExternalTrigger::Action action, \ - UCHAR* oldMsg, UCHAR* newMsg) \ + void* oldMsg, void* newMsg) \ { \ try \ { @@ -459,11 +459,6 @@ ThrowError::check(status); return handle; } - - static void* getEntryPoint(ExternalContext* /*context*/, const char* entryPoint) - { - return fbUdrGetFunction(entryPoint); - } }; @@ -602,16 +597,15 @@ template <typename T> class FunctionFactoryImpl : public FunctionFactory { public: - explicit FunctionFactoryImpl(const char* aName) - : name(aName) + explicit FunctionFactoryImpl(const char* name) { - fbUdrRegFunction(this); + fbUdrRegFunction(name, this); } -public: - virtual const char* FB_CALL getName() + virtual void setup(const IRoutineMetadata* /*metadata*/, BlrMessage* inBlr, BlrMessage* outBlr) { - return name; + setBlr(inBlr, (typename T::InMessage*) 0); + setBlr(outBlr, (typename T::OutMessage*) 0); } virtual ExternalFunction* FB_CALL newItem(const IRoutineMetadata* metadata) @@ -620,23 +614,30 @@ } private: - const char* name; + template <typename MessageType> void setBlr(BlrMessage* blrMessage, MessageType*) + { + blrMessage->blr = MessageType::getBlr(&blrMessage->blrLength); + blrMessage->bufferLength = MessageType::getSize(); + } + + void setBlr(BlrMessage* blrMessage, void**) + { + } }; template <typename T> class ProcedureFactoryImpl : public ProcedureFactory { public: - explicit ProcedureFactoryImpl(const char* aName) - : name(aName) + explicit ProcedureFactoryImpl(const char* name) { - fbUdrRegProcedure(this); + fbUdrRegProcedure(name, this); } -public: - virtual const char* FB_CALL getName() + virtual void setup(const IRoutineMetadata* /*metadata*/, BlrMessage* inBlr, BlrMessage* outBlr) { - return name; + setBlr(inBlr, (typename T::InMessage*) 0); + setBlr(outBlr, (typename T::OutMessage*) 0); } virtual ExternalProcedure* FB_CALL newItem(const IRoutineMetadata* metadata) @@ -645,32 +646,34 @@ } private: - const char* name; + template <typename MessageType> void setBlr(BlrMessage* blrMessage, MessageType*) + { + blrMessage->blr = MessageType::getBlr(&blrMessage->blrLength); + blrMessage->bufferLength = MessageType::getSize(); + } + + void setBlr(BlrMessage* blrMessage, void**) + { + } }; template <typename T> class TriggerFactoryImpl : public TriggerFactory { public: - explicit TriggerFactoryImpl(const char* aName) - : name(aName) + explicit TriggerFactoryImpl(const char* name) { - fbUdrRegTrigger(this); + fbUdrRegTrigger(name, this); } -public: - virtual const char* FB_CALL getName() + virtual void setup(const IRoutineMetadata* /*metadata*/) { - return name; } virtual ExternalTrigger* FB_CALL newItem(const IRoutineMetadata* metadata) { return new(metadata) Routine<T>; } - -private: - const char* name; }; Modified: firebird/trunk/src/include/firebird/UdrEngine.h =================================================================== --- firebird/trunk/src/include/firebird/UdrEngine.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/firebird/UdrEngine.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -39,30 +39,29 @@ class FunctionFactory { public: - virtual const char* FB_CALL getName() = 0; + virtual void setup(const IRoutineMetadata* metadata, BlrMessage* inBlr, BlrMessage* outBlr) = 0; virtual ExternalFunction* FB_CALL newItem(const IRoutineMetadata* metadata) = 0; }; class ProcedureFactory { public: - virtual const char* FB_CALL getName() = 0; + virtual void setup(const IRoutineMetadata* metadata, BlrMessage* inBlr, BlrMessage* outBlr) = 0; virtual ExternalProcedure* FB_CALL newItem(const IRoutineMetadata* metadata) = 0; }; class TriggerFactory { public: - virtual const char* FB_CALL getName() = 0; + virtual void setup(const IRoutineMetadata* metadata) = 0; virtual ExternalTrigger* FB_CALL newItem(const IRoutineMetadata* metadata) = 0; }; // Routine registration functions. -extern "C" void fbUdrRegFunction(FunctionFactory* factory); -extern "C" void fbUdrRegProcedure(ProcedureFactory* factory); -extern "C" void fbUdrRegTrigger(TriggerFactory* factory); -extern "C" void* fbUdrGetFunction(const char* symbol); +extern "C" void fbUdrRegFunction(const char* name, FunctionFactory* factory); +extern "C" void fbUdrRegProcedure(const char* name, ProcedureFactory* factory); +extern "C" void fbUdrRegTrigger(const char* name, TriggerFactory* factory); //------------------------------------------------------------------------------ Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/gen/codetext.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -727,6 +727,8 @@ {"invalid_boolean_usage", 335545023}, {"sysf_argscant_both_be_zero", 335545024}, {"spb_no_id", 335545025}, + {"ee_blr_mismatch_null", 335545026}, + {"ee_blr_mismatch_length", 335545027}, {"gfix_db_name", 335740929}, {"gfix_invalid_sw", 335740930}, {"gfix_incmp_sw", 335740932}, Modified: firebird/trunk/src/include/gen/iberror.h =================================================================== --- firebird/trunk/src/include/gen/iberror.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/gen/iberror.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -761,6 +761,8 @@ const ISC_STATUS isc_invalid_boolean_usage = 335545023L; const ISC_STATUS isc_sysf_argscant_both_be_zero = 335545024L; const ISC_STATUS isc_spb_no_id = 335545025L; +const ISC_STATUS isc_ee_blr_mismatch_null = 335545026L; +const ISC_STATUS isc_ee_blr_mismatch_length = 335545027L; const ISC_STATUS isc_gfix_db_name = 335740929L; const ISC_STATUS isc_gfix_invalid_sw = 335740930L; const ISC_STATUS isc_gfix_incmp_sw = 335740932L; @@ -1180,7 +1182,7 @@ 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 = 1124; +const ISC_STATUS isc_err_max = 1126; #else /* c definitions */ @@ -1911,6 +1913,8 @@ #define isc_invalid_boolean_usage 335545023L #define isc_sysf_argscant_both_be_zero 335545024L #define isc_spb_no_id 335545025L +#define isc_ee_blr_mismatch_null 335545026L +#define isc_ee_blr_mismatch_length 335545027L #define isc_gfix_db_name 335740929L #define isc_gfix_invalid_sw 335740930L #define isc_gfix_incmp_sw 335740932L @@ -2330,7 +2334,7 @@ #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 1124 +#define isc_err_max 1126 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/gen/msgs.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -730,6 +730,8 @@ {335545023, "Invalid usage of boolean expression"}, /* invalid_boolean_usage */ {335545024, "Arguments for @1 cannot both be zero"}, /* sysf_argscant_both_be_zero */ {335545025, "missing service ID in spb"}, /* spb_no_id */ + {335545026, "External BLR message mismatch: invalid null descriptor at field @1"}, /* ee_blr_mismatch_null */ + {335545027, "External BLR message mismatch: length = @1, expected @2"}, /* ee_blr_mismatch_length */ {335740929, "data base file name (@1) already given"}, /* gfix_db_name */ {335740930, "invalid switch @1"}, /* gfix_invalid_sw */ {335740932, "incompatible switch combination"}, /* gfix_incmp_sw */ Modified: firebird/trunk/src/include/gen/sql_code.h =================================================================== --- firebird/trunk/src/include/gen/sql_code.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/gen/sql_code.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -726,6 +726,8 @@ {335545023, -104}, /* 703 invalid_boolean_usage */ {335545024, -833}, /* 704 sysf_argscant_both_be_zero */ {335545025, -901}, /* 705 spb_no_id */ + {335545026, -901}, /* 706 ee_blr_mismatch_null */ + {335545027, -901}, /* 707 ee_blr_mismatch_length */ {335740929, -901}, /* 1 gfix_db_name */ {335740930, -901}, /* 2 gfix_invalid_sw */ {335740932, -901}, /* 4 gfix_incmp_sw */ Modified: firebird/trunk/src/include/gen/sql_state.h =================================================================== --- firebird/trunk/src/include/gen/sql_state.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/include/gen/sql_state.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -726,6 +726,8 @@ {335545023, "22000"}, // 703 invalid_boolean_usage {335545024, "42000"}, // 704 sysf_argscant_both_be_zero {335545025, "HY000"}, // 705 spb_no_id + {335545026, "42000"}, // 706 ee_blr_mismatch_null + {335545027, "42000"}, // 707 ee_blr_mismatch_length {335740929, "00000"}, // 1 gfix_db_name {335740930, "00000"}, // 2 gfix_invalid_sw {335740932, "00000"}, // 4 gfix_incmp_sw Modified: firebird/trunk/src/jrd/BlrReader.h =================================================================== --- firebird/trunk/src/jrd/BlrReader.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/BlrReader.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -103,6 +103,40 @@ return high * 256 + low; } + UCHAR checkByte(UCHAR expected) + { + using namespace Firebird; + + UCHAR byte = getByte(); + + if (byte != expected) + { + status_exception::raise(Arg::Gds(isc_syntaxerr) << + Arg::Num(expected) << + Arg::Num(getOffset() - 1) << + Arg::Num(byte)); + } + + return byte; + } + + USHORT checkWord(USHORT expected) + { + using namespace Firebird; + + USHORT word = getWord(); + + if (word != expected) + { + status_exception::raise(Arg::Gds(isc_syntaxerr) << + Arg::Num(expected) << + Arg::Num(getOffset() - 2) << + Arg::Num(word)); + } + + return word; + } + private: const UCHAR* start; const UCHAR* end; Modified: firebird/trunk/src/jrd/ExtEngineManager.cpp =================================================================== --- firebird/trunk/src/jrd/ExtEngineManager.cpp 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/ExtEngineManager.cpp 2011-07-10 01:23:53 UTC (rev 53285) @@ -594,7 +594,8 @@ ExtEngineManager::Function* ExtEngineManager::makeFunction(thread_db* tdbb, const Jrd::Function* udf, - const MetaName& engine, const string& entryPoint, const string& body) + const MetaName& engine, const string& entryPoint, const string& body, + BlrMessage* inBlr, BlrMessage* outBlr) { string entryPointTrimmed = entryPoint; entryPointTrimmed.trim(); @@ -640,7 +641,8 @@ { // scope Attachment::Checkout attCout(tdbb->getAttachment()); - externalFunction = attInfo->engine->makeFunction(RaiseError(), attInfo->context, metadata); + externalFunction = attInfo->engine->makeFunction(RaiseError(), attInfo->context, metadata, + inBlr, outBlr); if (!externalFunction) { @@ -665,7 +667,8 @@ ExtEngineManager::Procedure* ExtEngineManager::makeProcedure(thread_db* tdbb, const jrd_prc* prc, - const MetaName& engine, const string& entryPoint, const string& body) + const MetaName& engine, const string& entryPoint, const string& body, + BlrMessage* inBlr, BlrMessage* outBlr) { string entryPointTrimmed = entryPoint; entryPointTrimmed.trim(); @@ -716,7 +719,8 @@ { // scope Attachment::Checkout attCout(tdbb->getAttachment()); - externalProcedure = attInfo->engine->makeProcedure(RaiseError(), attInfo->context, metadata); + externalProcedure = attInfo->engine->makeProcedure(RaiseError(), attInfo->context, metadata, + inBlr, outBlr); if (!externalProcedure) { Modified: firebird/trunk/src/jrd/ExtEngineManager.h =================================================================== --- firebird/trunk/src/jrd/ExtEngineManager.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/ExtEngineManager.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -304,10 +304,10 @@ Function* makeFunction(thread_db* tdbb, const Jrd::Function* udf, const Firebird::MetaName& engine, const Firebird::string& entryPoint, - const Firebird::string& body); + const Firebird::string& body, Firebird::BlrMessage* inBlr, Firebird::BlrMessage* outBlr); Procedure* makeProcedure(thread_db* tdbb, const jrd_prc* prc, const Firebird::MetaName& engine, const Firebird::string& entryPoint, - const Firebird::string& body); + const Firebird::string& body, Firebird::BlrMessage* inBlr, Firebird::BlrMessage* outBlr); Trigger* makeTrigger(thread_db* tdbb, const Jrd::Trigger* trg, const Firebird::MetaName& engine, const Firebird::string& entryPoint, const Firebird::string& body, Firebird::ExternalTrigger::Type type); Modified: firebird/trunk/src/jrd/Function.epp =================================================================== --- firebird/trunk/src/jrd/Function.epp 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/Function.epp 2011-07-10 01:23:53 UTC (rev 53285) @@ -386,16 +386,25 @@ body.getBuffer(1)[0] = 0; } + BlrMessage inBlr; + inBlr.blr = NULL; + inBlr.blrLength = 0; + inBlr.bufferLength = 0; + + BlrMessage outBlr; + outBlr.blr = NULL; + outBlr.blrLength = 0; + outBlr.bufferLength = 0; + function->fun_external = dbb->dbb_extManager.makeFunction(tdbb, function, X.RDB$ENGINE_NAME, - (X.RDB$ENTRYPOINT.NULL ? "" : X.RDB$ENTRYPOINT), (char*) body.begin()); + (X.RDB$ENTRYPOINT.NULL ? "" : X.RDB$ENTRYPOINT), (char*) body.begin(), + &inBlr, &outBlr); if (!function->fun_external) - { function->setImplemented(false); - } - function->makeFormat(); + function->makeFormat(tdbb, (inBlr.blr ? &inBlr : NULL), (outBlr.blr ? &outBlr : NULL)); } else if (!X.RDB$FUNCTION_BLR.NULL) { @@ -427,7 +436,7 @@ throw; } - function->makeFormat(); + function->makeFormat(tdbb, NULL, NULL); } else if (!X.RDB$MODULE_NAME.NULL && !X.RDB$ENTRYPOINT.NULL) { @@ -566,6 +575,23 @@ fb_assert(fun_out_msg_format.fmt_count == 2); fb_assert(fun_out_msg_format.fmt_length); CMP_impure(csb, fun_out_msg_format.fmt_length); + + if (fun_in_msg_format2.fmt_count) + { + fb_assert(fun_in_msg_format2.fmt_length); + CMP_impure(csb, fun_in_msg_format2.fmt_length); + } + + fb_assert(fun_out_msg_format2.fmt_count == 2 || + (fun_out_msg_format2.fmt_length == 0 && fun_out_msg_format2.fmt_count == 0)); + + if (fun_out_msg_format2.fmt_length) + { + fb_assert(fun_out_msg_format2.fmt_count == 2); + CMP_impure(csb, fun_out_msg_format2.fmt_length); + } + else + fb_assert(fun_out_msg_format2.fmt_count == 0); } return impure; @@ -719,34 +745,77 @@ Jrd::Attachment* attachment = tdbb->getAttachment(); - const ULONG in_msg_length = fun_in_msg_format.fmt_length; - const ULONG out_msg_length = fun_out_msg_format.fmt_length; + const ULONG inMsgLength = fun_in_msg_format.fmt_length; + const ULONG outMsgLength = fun_out_msg_format.fmt_length; UCHAR* const impure = reinterpret_cast<UCHAR*>(value); - UCHAR* const in_msg = (UCHAR*) FB_ALIGN((IPTR) impure + sizeof(impure_value), FB_ALIGNMENT); - UCHAR* const out_msg = (UCHAR*) FB_ALIGN((IPTR) in_msg + in_msg_length, FB_ALIGNMENT); + UCHAR* const inMsg = (UCHAR*) FB_ALIGN((IPTR) impure + sizeof(impure_value), FB_ALIGNMENT); + UCHAR* const outMsg = (UCHAR*) FB_ALIGN((IPTR) inMsg + inMsgLength, FB_ALIGNMENT); + const ULONG inMsgLength2 = fun_in_msg_format2.fmt_length; + const ULONG outMsgLength2 = fun_out_msg_format2.fmt_length; + UCHAR* const inMsg2 = inMsgLength2 ? + (UCHAR*) FB_ALIGN((IPTR) outMsg + outMsgLength, FB_ALIGNMENT) : inMsg; + UCHAR* const outMsg2 = outMsgLength2 ? + (UCHAR*) FB_ALIGN((IPTR) inMsg2 + inMsgLength2, FB_ALIGNMENT) : outMsg; + for (USHORT i = 0; i < fun_inputs; i++) { - const ULONG arg_offset = (IPTR) fun_in_msg_format.fmt_desc[i * 2].dsc_address; - const ULONG null_offset = (IPTR) fun_in_msg_format.fmt_desc[i * 2 + 1].dsc_address; - UCHAR* const null_ptr = in_msg + null_offset; + const ULONG argOffset = (IPTR) fun_in_msg_format.fmt_desc[i * 2].dsc_address; + const ULONG nullOffset = (IPTR) fun_in_msg_format.fmt_desc[i * 2 + 1].dsc_address; + SSHORT* const nullPtr = reinterpret_cast<SSHORT*>(inMsg + nullOffset); + dsc argDesc = fun_args[i + 1].fun_parameter->prm_desc; + argDesc.dsc_address = inMsg + argOffset; - dsc* const src_desc = EVL_expr(tdbb, request, args[i]); - if (src_desc && !(request->req_flags & req_null)) + //// TODO: Validate constraints for external. + dsc* const srcDesc = EVL_expr(tdbb, request, args[i]); + if (srcDesc && !(request->req_flags & req_null)) { - *reinterpret_cast<SSHORT*>(null_ptr) = FALSE; + *nullPtr = FALSE; + MOV_move(tdbb, srcDesc, &argDesc); + } + else + *nullPtr = TRUE; - dsc arg_desc = fun_args[i + 1].fun_parameter->prm_desc; - arg_desc.dsc_address = in_msg + arg_offset; - MOV_move(tdbb, src_desc, &arg_desc); + if (fun_external && inMsgLength2) + { + const ULONG argOffset2 = (IPTR) fun_in_msg_format2.fmt_desc[i * 2].dsc_address; + const ULONG nullOffset2 = (IPTR) fun_in_msg_format2.fmt_desc[i * 2 + 1].dsc_address; + SSHORT* const nullPtr2 = reinterpret_cast<SSHORT*>(inMsg2 + nullOffset2); + + if (!(*nullPtr2 = *nullPtr)) + { + dsc argDesc2 = fun_in_msg_format2.fmt_desc[i * 2]; + argDesc2.dsc_address = inMsg2 + argOffset2; + MOV_move(tdbb, &argDesc, &argDesc2); + } } - else - *reinterpret_cast<SSHORT*>(null_ptr) = TRUE; } + const ULONG argOffset = (IPTR) fun_out_msg_format.fmt_desc[0].dsc_address; + const ULONG nullOffset = (IPTR) fun_out_msg_format.fmt_desc[1].dsc_address; + SSHORT* const nullPtr = reinterpret_cast<SSHORT*>(outMsg + nullOffset); + dsc argDesc = fun_args[fun_return_arg].fun_parameter->prm_desc; + argDesc.dsc_address = outMsg + argOffset; + if (fun_external) - fun_external->execute(tdbb, in_msg, out_msg); + { + fun_external->execute(tdbb, inMsg2, outMsg2); + + if (outMsgLength2) + { + const ULONG argOffset2 = (IPTR) fun_out_msg_format2.fmt_desc[0].dsc_address; + const ULONG nullOffset2 = (IPTR) fun_out_msg_format2.fmt_desc[1].dsc_address; + SSHORT* const nullPtr2 = reinterpret_cast<SSHORT*>(outMsg2 + nullOffset2); + + if (!(*nullPtr = *nullPtr2)) + { + dsc argDesc2 = fun_out_msg_format2.fmt_desc[0]; + argDesc2.dsc_address = outMsg2 + argOffset2; + MOV_move(tdbb, &argDesc2, &argDesc); + } + } + } else { jrd_req* const new_request = getStatement()->findRequest(tdbb); @@ -764,13 +833,11 @@ EXE_start(tdbb, new_request, transaction); - if (in_msg_length) - { - EXE_send(tdbb, new_request, 0, in_msg_length, in_msg); - } + if (inMsgLength) + EXE_send(tdbb, new_request, 0, inMsgLength, inMsg); - fb_assert(out_msg_length); - EXE_receive(tdbb, new_request, 1, out_msg_length, out_msg); + fb_assert(outMsgLength); + EXE_receive(tdbb, new_request, 1, outMsgLength, outMsg); // Clean up all savepoints started during execution of the function @@ -799,18 +866,13 @@ new_request->req_flags &= ~req_in_use; } - const ULONG arg_offset = (IPTR) fun_out_msg_format.fmt_desc[0].dsc_address; - const ULONG null_offset = (IPTR) fun_out_msg_format.fmt_desc[1].dsc_address; - - UCHAR* const null_ptr = out_msg + null_offset; - if (*reinterpret_cast<SSHORT*>(null_ptr)) + //// TODO: Validate constraints for external. + if (*nullPtr) request->req_flags |= req_null; else { - dsc arg_desc = fun_args[fun_return_arg].fun_parameter->prm_desc; - arg_desc.dsc_address = out_msg + arg_offset; request->req_flags &= ~req_null; - MOV_move(tdbb, &arg_desc, &value->vlu_desc); + MOV_move(tdbb, &argDesc, &value->vlu_desc); } } else @@ -841,15 +903,105 @@ return ++fun_alter_count; } -void Function::makeFormat() +void Function::makeFormat(thread_db* tdbb, const BlrMessage* inBlr, const BlrMessage* outBlr) { // Input format - const USHORT count = fun_inputs * 2; + bool messageNeeded = false; + ULONG offset = 0; + UCHAR maxAlignment = 0; + USHORT count; + + dsc shortDesc; + shortDesc.makeShort(0); + + if (inBlr) + { + BlrReader reader(inBlr->blr, inBlr->blrLength); + + reader.checkByte(blr_version5); + reader.checkByte(blr_begin); + reader.checkByte(blr_message); + reader.getByte(); // message number: ignore it + count = reader.checkWord(fun_inputs * 2); + + fun_in_msg_format2.fmt_desc.resize(count); + fun_in_msg_format2.fmt_count = count; + + for (unsigned i = 0; i < count / 2; ++i) + { + dsc* desc = &fun_in_msg_format2.fmt_desc[i * 2]; + PAR_datatype(tdbb, reader, desc); + + if (desc->dsc_dtype >= dtype_aligned) + { + maxAlignment = MAX(maxAlignment, type_alignments[desc->dsc_dtype]); + offset = FB_ALIGN(offset, type_alignments[desc->dsc_dtype]); + } + + desc->dsc_address = (UCHAR*)(IPTR) offset; + offset += desc->dsc_length; + + const dsc* prmDesc = &fun_args[i + 1].fun_parameter->prm_desc; + + if (desc->isText() && desc->getCharSet() == CS_NONE) + desc->setTextType(prmDesc->getTextType()); + desc->setNullable(prmDesc->isNullable()); + + messageNeeded |= !DSC_EQUIV(desc, prmDesc, false); + + ++desc; + PAR_datatype(tdbb, reader, desc); + + if (!DSC_EQUIV(desc, &shortDesc, false)) + { + status_exception::raise( + Arg::Gds(isc_ee_blr_mismatch_null) << + Arg::Num(i * 2 + 1)); + } + + offset = FB_ALIGN(offset, sizeof(SSHORT)); + desc->dsc_address = (UCHAR*)(IPTR) offset; + offset += sizeof(SSHORT); + + messageNeeded |= !DSC_EQUIV(desc, &shortDesc, false); + } + + reader.checkByte(blr_end); + reader.checkByte(blr_eoc); + + if (offset != inBlr->bufferLength) + { + status_exception::raise( + Arg::Gds(isc_ee_blr_mismatch_length) << + Arg::Num(inBlr->bufferLength) << + Arg::Num(offset)); + } + + if (messageNeeded) + { + // Pad the external message. + offset = FB_ALIGN(offset, MAX(maxAlignment, sizeof(SSHORT))); + + if (offset > MAX_MESSAGE_SIZE) + status_exception::raise(Arg::Gds(isc_imp_exc) << Arg::Gds(isc_blktoobig)); + + fun_in_msg_format2.fmt_length = offset; + } + else + { + // The external and internal messages are compatible, so there is no need to create a new one. + fun_in_msg_format2.fmt_desc.clear(); + fun_in_msg_format2.fmt_count = 0; + } + } + + count = fun_inputs * 2; fun_in_msg_format.fmt_desc.resize(count); fun_in_msg_format.fmt_count = count; - ULONG offset = 0; + offset = 0; + maxAlignment = 0; for (USHORT i = 0; i < fun_inputs; i++) { @@ -857,8 +1009,10 @@ if (arg_desc.dsc_dtype >= dtype_aligned) { + maxAlignment = MAX(maxAlignment, type_alignments[arg_desc.dsc_dtype]); offset = FB_ALIGN(offset, type_alignments[arg_desc.dsc_dtype]); } + arg_desc.dsc_address = (UCHAR*)(IPTR) offset; offset += arg_desc.dsc_length; fun_in_msg_format.fmt_desc[i * 2] = arg_desc; @@ -870,23 +1024,100 @@ fun_in_msg_format.fmt_desc[i * 2 + 1] = arg_desc; } - if (offset > MAX_MESSAGE_SIZE) + if (!messageNeeded) { - status_exception::raise(Arg::Gds(isc_imp_exc) << Arg::Gds(isc_blktoobig)); + // This message will be used by external. Pad it. + offset = FB_ALIGN(offset, MAX(maxAlignment, sizeof(SSHORT))); } + if (offset > MAX_MESSAGE_SIZE) + status_exception::raise(Arg::Gds(isc_imp_exc) << Arg::Gds(isc_blktoobig)); + fun_in_msg_format.fmt_length = offset; // Output format + messageNeeded = false; + + if (outBlr) + { + BlrReader reader(outBlr->blr, outBlr->blrLength); + + reader.checkByte(blr_version5); + reader.checkByte(blr_begin); + reader.checkByte(blr_message); + reader.getByte(); // message number: ignore it + count = reader.checkWord(2); + + fun_out_msg_format2.fmt_desc.resize(2); + fun_out_msg_format2.fmt_count = 2; + + offset = 0; + + dsc* desc = &fun_out_msg_format2.fmt_desc[0]; + PAR_datatype(tdbb, reader, desc); + + if (desc->dsc_dtype >= dtype_aligned) + offset = FB_ALIGN(offset, type_alignments[desc->dsc_dtype]); + + desc->dsc_address = (UCHAR*)(IPTR) offset; + offset += desc->dsc_length; + + const dsc* prmDesc = &fun_args[fun_return_arg].fun_parameter->prm_desc; + + if (desc->isText() && desc->getCharSet() == CS_NONE) + desc->setTextType(prmDesc->getTextType()); + desc->setNullable(prmDesc->isNullable()); + + messageNeeded |= !DSC_EQUIV(desc, prmDesc, false); + + ++desc; + PAR_datatype(tdbb, reader, desc); + + if (!DSC_EQUIV(desc, &shortDesc, false)) + { + status_exception::raise( + Arg::Gds(isc_ee_blr_mismatch_null) << + Arg::Num(1)); + } + + offset = FB_ALIGN(offset, sizeof(SSHORT)); + desc->dsc_address = (UCHAR*)(IPTR) offset; + offset += sizeof(SSHORT); + + messageNeeded |= !DSC_EQUIV(desc, &shortDesc, false); + + reader.checkByte(blr_end); + reader.checkByte(blr_eoc); + + if (offset != outBlr->bufferLength) + { + status_exception::raise( + Arg::Gds(isc_ee_blr_mismatch_length) << + Arg::Num(outBlr->bufferLength) << + Arg::Num(offset)); + } + + // Pad the external message. + offset = FB_ALIGN(offset, + MAX(type_alignments[fun_out_msg_format2.fmt_desc[0].dsc_dtype], sizeof(SSHORT))); + + if (messageNeeded) + fun_out_msg_format2.fmt_length = offset; + else + { + // The external and internal messages are compatible, so there is no need to create a new one. + fun_out_msg_format2.fmt_desc.clear(); + fun_out_msg_format2.fmt_count = 0; + } + } + fun_out_msg_format.fmt_desc.resize(2); fun_out_msg_format.fmt_count = 2; - offset = 0; - dsc ret_desc = fun_args[fun_return_arg].fun_parameter->prm_desc; - ret_desc.dsc_address = (UCHAR*)(IPTR) offset; - offset += ret_desc.dsc_length; + ret_desc.dsc_address = (UCHAR*)(IPTR) 0; + offset = ret_desc.dsc_length; fun_out_msg_format.fmt_desc[0] = ret_desc; ret_desc.makeShort(0); @@ -895,5 +1126,13 @@ offset += sizeof(SSHORT); fun_out_msg_format.fmt_desc[1] = ret_desc; + if (!messageNeeded) + { + // This message will be used by external. Pad it. + offset = FB_ALIGN(offset, + MAX(type_alignments[fun_args[fun_return_arg].fun_parameter->prm_desc.dsc_dtype], + sizeof(SSHORT))); + } + fun_out_msg_format.fmt_length = offset; } Modified: firebird/trunk/src/jrd/Function.h =================================================================== --- firebird/trunk/src/jrd/Function.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/Function.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -75,6 +75,8 @@ fun_temp_length(0), fun_in_msg_format(p, 0), fun_out_msg_format(p, 0), + fun_in_msg_format2(p, 0), + fun_out_msg_format2(p, 0), fun_args(p), fun_flags(0), fun_use_count(0), @@ -86,7 +88,8 @@ { } - void makeFormat(); + void makeFormat(thread_db* tdbb, const Firebird::BlrMessage* inBlr, + const Firebird::BlrMessage* outBlr); static Function* loadMetadata(thread_db* tdbb, USHORT id, bool noscan, USHORT flags); static int blockingAst(void*); @@ -111,6 +114,8 @@ Format fun_in_msg_format; Format fun_out_msg_format; + Format fun_in_msg_format2; + Format fun_out_msg_format2; Firebird::Array<Argument> fun_args; Modified: firebird/trunk/src/jrd/exe.cpp =================================================================== --- firebird/trunk/src/jrd/exe.cpp 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/exe.cpp 2011-07-10 01:23:53 UTC (rev 53285) @@ -202,6 +202,7 @@ fb_sqlstate(sqlstate, status); } +static void execute_ext_procedure(thread_db* tdbb, jrd_req* request); static void execute_looper(thread_db*, jrd_req*, jrd_tra*, jrd_req::req_s); static void looper_seh(thread_db*, jrd_req*); static void release_blobs(thread_db*, jrd_req*); @@ -1048,7 +1049,108 @@ } +// Execute an external procedure. +static void execute_ext_procedure(thread_db* tdbb, jrd_req* request) +{ + const JrdStatement* statement = request->getStatement(); + fb_assert(statement->topNode->kind == DmlNode::KIND_STATEMENT); + const CompoundStmtNode* extStmts = StmtNode::as<CompoundStmtNode>( + static_cast<const StmtNode*>(statement->topNode)); + fb_assert(extStmts); + + switch (request->req_operation) + { + case jrd_req::req_evaluate: + request->req_message = extStmts->statements[e_extproc_input_message]->as<MessageNode>(); + request->req_flags |= req_stall; + request->req_operation = jrd_req::req_receive; + break; + + case jrd_req::req_sync: + { + const MessageNode* outMsgNode = + extStmts->statements[e_extproc_output_message]->as<MessageNode>(); + fb_assert(outMsgNode); + + const Format* outFormat = outMsgNode->format; + + if (!request->resultSet) + { + const MessageNode* inMsgNode = + extStmts->statements[e_extproc_input_message]->as<MessageNode>(); + fb_assert(inMsgNode && request->req_message == inMsgNode); + + const CompoundStmtNode* list = + extStmts->statements[e_extproc_input_assign]->as<CompoundStmtNode>(); + fb_assert(list && (list->onlyAssignments || list->statements.isEmpty())); + + const Format* format = inMsgNode->format; + + // Clear the flags from the input message. + USHORT* impure_flags = request->getImpure<USHORT>(inMsgNode->impureFlags); + memset(impure_flags, 0, sizeof(USHORT) * format->fmt_count); + + // Clear the flags from the output message. + impure_flags = request->getImpure<USHORT>(outMsgNode->impureFlags); + memset(impure_flags, 0, sizeof(USHORT) * outFormat->fmt_count); + + // Validate/move input parameters. + for (size_t i = 0; i < list->statements.getCount(); ++i) + { + EXE_assignment(tdbb, static_cast<const AssignmentNode*>( + list->statements[i].getObject())); + } + + const MessageNode* inMsgNode2 = + extStmts->statements[e_extproc_input_message2]->as<MessageNode>(); + if (!inMsgNode2) + inMsgNode2 = inMsgNode; + + const MessageNode* outMsgNode2 = + extStmts->statements[e_extproc_output_message2]->as<MessageNode>(); + if (!outMsgNode2) + outMsgNode2 = outMsgNode; + + UCHAR* inMsg = request->getImpure<UCHAR>(inMsgNode2->impureOffset); + UCHAR* outMsg = request->getImpure<UCHAR>(outMsgNode2->impureOffset); + + request->resultSet = statement->procedure->getExternal()->open(tdbb, inMsg, outMsg); + } + + request->req_message = outMsgNode; + bool result = request->resultSet->fetch(tdbb); + UCHAR* outMsg = request->getImpure<UCHAR>(outMsgNode->impureOffset); + + // Set the eof flag. + const dsc& eofDesc = outFormat->fmt_desc[outFormat->fmt_count - 1]; + fb_assert(eofDesc.dsc_dtype == dtype_short); + *((SSHORT*)(UCHAR*) (outMsg + (IPTR) eofDesc.dsc_address)) = (SSHORT) result; + + const CompoundStmtNode* list = + extStmts->statements[e_extproc_output_assign]->as<CompoundStmtNode>(); + fb_assert(list && (list->onlyAssignments || list->statements.isEmpty())); + + if (result) + { + // Validate/move output parameters. + for (size_t i = 0; i < list->statements.getCount(); ++i) + { + EXE_assignment(tdbb, static_cast<const AssignmentNode*>( + list->statements[i].getObject())); + } + } + + break; + } + + default: + fb_assert(false); + break; + } +} + + static void execute_looper(thread_db* tdbb, jrd_req* request, jrd_tra* transaction, jrd_req::req_s next_state) @@ -1362,100 +1464,12 @@ else break; - fb_assert(statement->topNode->kind == DmlNode::KIND_STATEMENT); - const CompoundStmtNode* extStmts = StmtNode::as<CompoundStmtNode>( - static_cast<const StmtNode*>(statement->topNode)); - fb_assert(extStmts); - - switch (request->req_operation) - { - case jrd_req::req_evaluate: - request->req_message = extStmts->statements[e_extproc_input_message]->as<MessageNode>(); - request->req_flags |= req_stall; - request->req_operation = jrd_req::req_receive; - break; - - case jrd_req::req_sync: - { - const MessageNode* outMsgNode = - extStmts->statements[e_extproc_output_message]->as<MessageNode>(); - fb_assert(outMsgNode); - - const Format* outFormat = outMsgNode->format; - UCHAR* outMsg = request->getImpure<UCHAR>(outMsgNode->impureOffset); - - if (!request->resultSet) - { - // input message - const MessageNode* inMsgNode = - extStmts->statements[e_extproc_input_message]->as<MessageNode>(); - fb_assert(inMsgNode); - fb_assert(request->req_message == inMsgNode); - - const CompoundStmtNode* list = - extStmts->statements[e_extproc_input_assign]->as<CompoundStmtNode>(); - fb_assert(list && (list->onlyAssignments || list->statements.isEmpty())); - - const Format* format = inMsgNode->format; - - // clear the flags from the input message - USHORT* impure_flags = request->getImpure<USHORT>(inMsgNode->impureFlags); - memset(impure_flags, 0, sizeof(USHORT) * format->fmt_count); - - // clear the flags from the output message - impure_flags = request->getImpure<USHORT>(outMsgNode->impureFlags); - memset(impure_flags, 0, sizeof(USHORT) * outFormat->fmt_count); - - // validate input parameters - for (size_t i = 0; i < list->statements.getCount(); ++i) - { - EXE_assignment(tdbb, static_cast<const AssignmentNode*>( - list->statements[i].getObject())); - } - - UCHAR* inMsg = request->getImpure<UCHAR>(request->req_message->impureOffset); - - request->resultSet = statement->procedure->getExternal()->open( - tdbb, inMsg, outMsg); - } - - request->req_message = outMsgNode; - bool result = request->resultSet->fetch(tdbb); - - // end flag - const dsc& eofDesc = outFormat->fmt_desc[outFormat->fmt_count - 1]; - fb_assert(eofDesc.dsc_dtype == dtype_short); - *((SSHORT*) (UCHAR*) (outMsg + (IPTR) eofDesc.dsc_address)) = (SSHORT) result; - - const CompoundStmtNode* list = - extStmts->statements[e_extproc_output_assign]->as<CompoundStmtNode>(); - fb_assert(list && (list->onlyAssignments || list->statements.isEmpty())); - - if (result) - { - // validate output parameters - for (size_t i = 0; i < list->statements.getCount(); ++i) - { - EXE_assignment(tdbb, static_cast<const AssignmentNode*>( - list->statements[i].getObject())); - } - } - - break; - } - - default: - fb_assert(false); - break; - } - + execute_ext_procedure(tdbb, request); goto end; } if (request->req_operation == jrd_req::req_evaluate && (--tdbb->tdbb_quantum < 0)) - { JRD_reschedule(tdbb, 0, true); - } if (request->req_operation == jrd_req::req_evaluate && node->hasLineColumn) { Modified: firebird/trunk/src/jrd/exe.h =================================================================== --- firebird/trunk/src/jrd/exe.h 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/exe.h 2011-07-10 01:23:53 UTC (rev 53285) @@ -130,8 +130,10 @@ // index (in CompoundStmtNode) for external procedure blr const int e_extproc_input_message = 0; const int e_extproc_output_message = 1; -const int e_extproc_input_assign = 2; -const int e_extproc_output_assign = 3; +const int e_extproc_input_message2 = 2; +const int e_extproc_output_message2 = 3; +const int e_extproc_input_assign = 4; +const int e_extproc_output_assign = 5; // Request resources Modified: firebird/trunk/src/jrd/met.epp =================================================================== --- firebird/trunk/src/jrd/met.epp 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/met.epp 2011-07-10 01:23:53 UTC (rev 53285) @@ -125,7 +125,8 @@ static ValueExprNode* parse_field_default_blr(thread_db* tdbb, bid* blob_id); static void parse_field_validation_blr(thread_db* tdbb, bid* blob_id, const MetaName name, BoolExprNode** expr, StmtNode** stmt); -static void parse_procedure_blr(thread_db*, jrd_prc*, bid*, CompilerScratch*, bool); +static void parse_procedure_blr(thread_db*, jrd_prc*, bid*, CompilerScratch*, bool, + const BlrMessage& extInBlr, const BlrMessage& extOutBlr); static void par_messages(thread_db*, const UCHAR* const, USHORT, jrd_prc*, CompilerScratch*); static bool resolve_charset_and_collation(thread_db*, USHORT*, const UCHAR*, const UCHAR*); static void save_trigger_data(thread_db*, trig_vec**, jrd_rel*, JrdStatement*, blb*, bid*, @@ -3000,6 +3001,38 @@ } END_FOR + BlrMessage inBlr; + inBlr.blr = NULL; + inBlr.blrLength = 0; + inBlr.bufferLength = 0; + + BlrMessage outBlr; + outBlr.blr = NULL; + outBlr.blrLength = 0; + outBlr.bufferLength = 0; + + const bool external = !P.RDB$ENGINE_NAME.NULL; // ODS_12_0 + + if (external) + { + HalfStaticArray<char, 512> body; + + if (!P.RDB$PROCEDURE_SOURCE.NULL) + { + blb* blob = BLB_open(tdbb, attachment->getSysTransaction(), + &P.RDB$PROCEDURE_SOURCE); + ULONG len = BLB_get_data(tdbb, blob, + (UCHAR*) body.getBuffer(blob->blb_length + 1), blob->blb_length + 1); + body.begin()[MIN(blob->blb_length, len)] = '\0'; + } + else + body.getBuffer(1)[0] = '\0'; + + procedure->setExternal(dbb->dbb_extManager.makeProcedure( + tdbb, procedure, P.RDB$ENGINE_NAME, + (P.RDB$ENTRYPOINT.NULL ? "" : P.RDB$ENTRYPOINT), body.begin(), &inBlr, &outBlr)); + } + Array<NestConst<Parameter> >& paramArray = procedure->prc_output_fields; if (paramArray.hasData() && paramArray[0]) @@ -3029,7 +3062,6 @@ } prc_t prc_type = prc_legacy; - const bool external = !P.RDB$ENGINE_NAME.NULL; // ODS_12_0 MemoryPool* csb_pool = attachment->createPool(); @@ -3048,7 +3080,8 @@ try { parse_procedure_blr(tdbb, procedure, - (P.RDB$PROCEDURE_BLR.NULL ? NULL : &P.RDB$PROCEDURE_BLR), csb, external); + (P.RDB$PROCEDURE_BLR.NULL ? NULL : &P.RDB$PROCEDURE_BLR), csb, external, + inBlr, outBlr); } catch (const Exception&) { @@ -3080,26 +3113,6 @@ delete csb; } // scope - if (external) - { - HalfStaticArray<char, 512> body; - - if (!P.RDB$PROCEDURE_SOURCE.NULL) - { - blb* blob = BLB_open(tdbb, attachment->getSysTransaction(), - &P.RDB$PROCEDURE_SOURCE); - ULONG len = BLB_get_data(tdbb, blob, - (UCHAR*) body.getBuffer(blob->blb_length + 1), blob->blb_length + 1); - body.begin()[MIN(blob->blb_length, len)] = '\0'; - } - else - body.getBuffer(1)[0] = '\0'; - - procedure->setExternal(dbb->dbb_extManager.makeProcedure( - tdbb, procedure, P.RDB$ENGINE_NAME, - (P.RDB$ENTRYPOINT.NULL ? "" : P.RDB$ENTRYPOINT), body.begin())); - } - if (P.RDB$VALID_BLR.NULL || P.RDB$VALID_BLR == FALSE) valid_blr = false; } @@ -3135,11 +3148,19 @@ catch (const Exception&) { procedure->prc_flags &= ~(PRC_being_scanned | PRC_scanned); + + if (procedure->getExternal()) + { + delete procedure->getExternal(); + procedure->setExternal(NULL); + } + if (procedure->prc_existence_lock) { LCK_release(tdbb, procedure->prc_existence_lock); procedure->prc_existence_lock = NULL; } + throw; } @@ -4371,20 +4392,128 @@ // Generate BLR message for external procedures -static void gen_ext_message(UCharBuffer& blr, UCHAR message, - const Array<NestConst<Parameter> >& parameters) +static bool gen_ext_message(thread_db* tdbb, UCharBuffer& blr, UCHAR message, UCHAR message2, + const Array<NestConst<Parameter> >& parameters, const BlrMessage& extBlr, + UCharBuffer& appendBlr) { - size_t count = parameters.getCount(); - count = count * 2 + message; + size_t prevAppendBlrSize = appendBlr.getCount(); + bool messageNeeded = false; + size_t count = 0; + size_t countPos = 0; + ULONG offset = 0; + UCHAR maxAlignment = 0; + + dsc shortDesc; + shortDesc.makeShort(0); + + if (extBlr.blr) + { + BlrReader reader(extBlr.blr, extBlr.blrLength); + + reader.checkByte(blr_version5); + reader.checkByte(blr_begin); + reader.checkByte(blr_message); + reader.getByte(); // message number: ignore it + count = reader.checkWord(parameters.getCount() * 2); + + appendBlr.add(blr_message); + appendBlr.add(message2); + countPos = appendBlr.getCount(); + appendBlr.add(UCHAR(count)); // parameters (with nulls) + appendBlr.add(UCHAR(count >> 8)); + + for (unsigned i = 0; i < count / 2; ++i) + { + dsc desc; + PAR_datatype(tdbb, reader, &desc); + PreparedStatement::generateBlr(&desc, appendBlr); + + if (desc.dsc_dtype >= dtype_aligned) + { + maxAlignment = MAX(maxAlignment, type_alignments[desc.dsc_dtype]); + offset = FB_ALIGN(offset, type_alignments[desc.dsc_dtype]); + } + + offset += desc.dsc_length; + + const dsc* prmDesc = ¶meters[i]->prm_desc; + + if (desc.isText() && desc.getCharSet() == CS_NONE) + desc.setTextType(prmDesc->getTextType()); + desc.setNullable(prmDesc->isNullable()); + + messageNeeded |= !DSC_EQUIV(&desc, prmDesc, false); + + PAR_datatype(tdbb, reader, &desc); + + if (!DSC_EQUIV(&desc, &shortDesc, false)) + { + status_exception::raise( + Arg::Gds(isc_ee_blr_mismatch_null) << + Arg::Num(i * 2 + 1)); + } + + PreparedStatement::generateBlr(&desc, appendBlr); + + if (desc.dsc_dtype >= dtype_aligned) + { + maxAlignment = MAX(maxAlignment, type_alignments[desc.dsc_dtype]); + offset = FB_ALIGN(offset, type_alignments[desc.dsc_dtype]); + } + + offset += desc.dsc_length; + + messageNeeded |= !DSC_EQUIV(&desc, &shortDesc, false); + } + + reader.checkByte(blr_end); + reader.checkByte(blr_eoc); + + if (offset != extBlr.bufferLength) + { + status_exception::raise( + Arg::Gds(isc_ee_blr_mismatch_length) << + Arg::Num(extBlr.bufferLength) << + Arg::Num(offset)); + } + } + + if (messageNeeded) + { + // Pad the external message. + ULONG pad = FB_ALIGN(offset, maxAlignment) - offset; + + if (pad != 0) + { + ++count; + appendBlr[countPos] = UCHAR(count); + appendBlr[countPos + 1] = UCHAR(count >> 8); + + dsc desc; + desc.makeText(pad, 0); + PreparedStatement::generateBlr(&desc, appendBlr); + } + } + else + { + // The external and internal messages are compatible, so there is no need to create a new one. + appendBlr.shrink(prevAppendBlrSize); + appendBlr.add(blr_begin); + appendBlr.add(blr_end); + } + + // Input message is 0 and output message is 1. Output message need the eof (+1) field. + count = parameters.getCount() * 2 + message; fb_assert(count < MAX_USHORT); blr.add(blr_message); // e_extproc_input_message, e_extproc_output_message blr.add(message); - blr.add(count); // parameters (with nulls) - blr.add(count >> 8); + countPos = blr.getCount(); + blr.add(UCHAR(count)); // parameters (with nulls) + blr.add(UCHAR(count >> 8)); - dsc shortDesc; - shortDesc.makeShort(0); + offset = 0; + maxAlignment = 0; for (const NestConst<Parameter>* i = parameters.begin(); i != parameters.end(); ++i) { @@ -4393,8 +4522,10 @@ if (!parameter->prm_nullable) blr.add(blr_not_nullable); + const dsc* desc = ¶meter->prm_desc; + if (parameter->prm_mechanism == prm_mech_type_of) - PreparedStatement::generateBlr(¶meter->prm_desc, blr); + PreparedStatement::generateBlr(desc, blr); else { fb_assert(parameter->prm_mechanism == prm_mech_normal); @@ -4422,16 +4553,43 @@ } } + if (desc->dsc_dtype >= dtype_aligned) + { + maxAlignment = MAX(maxAlignment, type_alignments[desc->dsc_dtype]); + offset = FB_ALIGN(offset, type_alignments[desc->dsc_dtype]); + } + + offset += desc->dsc_length; + PreparedStatement::generateBlr(&shortDesc, blr); // null flag + + maxAlignment = MAX(maxAlignment, sizeof(SSHORT)); + offset = FB_ALIGN(offset, sizeof(SSHORT)) + shortDesc.dsc_length; } + + if (!messageNeeded) + { + // This message will be used by external. Pad it if needed. + ULONG pad = FB_ALIGN(offset, maxAlignment) - offset; + + if (pad != 0) + { + ++count; + blr[countPos] = UCHAR(count); + blr[countPos + 1] = UCHAR(count >> 8); + + dsc desc; + desc.makeText(pad, 0); + PreparedStatement::generateBlr(&desc, blr); + } + } + + return messageNeeded; } -static void parse_procedure_blr(thread_db* tdbb, - jrd_prc* procedure, - bid* blob_id, - CompilerScratch* csb, - bool external) +static void parse_procedure_blr(thread_db* tdbb, jrd_prc* procedure, bid* blob_id, + CompilerScratch* csb, bool external, const BlrMessage& extInBlr, const BlrMessage& extOutBlr) { /************************************** * @@ -4453,28 +4611,52 @@ tmp.add(blr_version5); tmp.add(blr_begin); - // ASF: Generate input messages even when number of parameters is 0 - // because we'll use hardcoded message number (0 and 1) in execution. - gen_ext_message(tmp, 0, procedure->prc_input_fields); // input message - gen_ext_message(tmp, 1, procedure->prc_output_fields); // output message + // ASF: Generate nodes even when they could be avoided, because we will use hardoced + // message and statement numbers. See e_extproc_*. + UCharBuffer appendBlr; + + bool genExtIn = gen_ext_message(tdbb, tmp, e_extproc_input_message, e_extproc_input_message2, + procedure->prc_input_fields, extInBlr, appendBlr); + bool genExtOut = gen_ext_message(tdbb, tmp, e_extproc_output_message, e_extproc_output_message2, + procedure->prc_output_fields, extOutBlr, appendBlr); + dsc shortDesc; shortDesc.makeShort(0); - PreparedStatement::generateBlr(&shortDesc, tmp); // end flag + PreparedStatement::generateBlr(&shortDesc, tmp); // end flag for the output message + tmp.join(appendBlr); + tmp.add(blr_begin); // e_extproc_input_assign fb_assert(procedure->prc_input_fields.getCount() < MAX_USHORT / 2); - for (USHORT i = 0; i < procedure->prc_input_fields.getCount(); ++i) + for (size_t i = 0; i < procedure->prc_input_fields.getCount(); ++i) { - tmp.add(blr_assignment); - tmp.add(blr_parameter2); - tmp.add(0); // input message - tmp.add((i * 2)); - tmp.add((i * 2) >> 8); - tmp.add((i * 2) + 1); // null indicator - tmp.add(((i * 2) + 1) >> 8); - tmp.add(blr_null); + const Parameter* parameter = procedure->prc_input_fields[i]; + + if (genExtIn || parameter->prm_mechanism != prm_mech_type_of || !parameter->prm_nullable) + { + tmp.add(blr_assignment); + + tmp.add(blr_parameter2); + tmp.add(e_extproc_input_message); + tmp.add(UCHAR(i * 2)); + tmp.add(UCHAR((i * 2) >> 8)); + tmp.add(UCHAR((i * 2) + 1)); // null indicator + tmp.add(UCHAR(((i * 2) + 1) >> 8)); + + if (genExtIn) + { + tmp.add(blr_parameter2); + tmp.add(e_extproc_input_message2); + tmp.add(UCHAR(i * 2)); + tmp.add(UCHAR((i * 2) >> 8)); + tmp.add(UCHAR((i * 2) + 1)); // null indicator + tmp.add(UCHAR(((i * 2) + 1) >> 8)); + } + else + tmp.add(blr_null); + } } tmp.add(blr_end); @@ -4482,16 +4664,41 @@ tmp.add(blr_begin); // e_extproc_output_assign fb_assert(procedure->prc_output_fields.getCount() < MAX_USHORT / 2); - for (USHORT i = 0; i < procedure->prc_output_fields.getCount(); ++i) + for (size_t i = 0; i < procedure->prc_output_fields.getCount(); ++i) { - tmp.add(blr_assignment); - tmp.add(blr_parameter2); - tmp.add(1); // output message - tmp.add((i * 2)); - tmp.add((i * 2) >> 8); - tmp.add((i * 2) + 1); // null indicator - tmp.add(((i * 2) + 1) >> 8); - tmp.add(blr_null); + const Parameter* parameter = procedure->prc_output_fields[i]; + + if (genExtOut || parameter->prm_mechanism != prm_mech_type_of || !parameter->prm_nullable) + { + tmp.add(blr_assignment); + + if (genExtOut) + { + tmp.add(blr_parameter2); + tmp.add(e_extproc_output_message2); + tmp.add(UCHAR(i * 2)); + tmp.add(UCHAR((i * 2) >> 8)); + tmp.add(UCHAR((i * 2) + 1)); // null indicator + tmp.add(UCHAR(((i * 2) + 1) >> 8)); + + tmp.add(blr_parameter2); + tmp.add(e_extproc_output_message); + tmp.add(UCHAR(i * 2)); + tmp.add(UCHAR((i * 2) >> 8)); + tmp.add(UCHAR((i * 2) + 1)); // null indicator + tmp.add(UCHAR(((i * 2) + 1) >> 8)); + } + else + { + tmp.add(blr_parameter2); + tmp.add(e_extproc_output_message); + tmp.add(UCHAR(i * 2)); + tmp.add(UCHAR((i * 2) >> 8)); + tmp.add(UCHAR((i * 2) + 1)); // null indicator + tmp.add(UCHAR(((i * 2) + 1) >> 8)); + tmp.add(blr_null); + } + } } tmp.add(blr_end); Modified: firebird/trunk/src/jrd/par.cpp =================================================================== --- firebird/trunk/src/jrd/par.cpp 2011-07-09 04:17:52 UTC (rev 53284) +++ firebird/trunk/src/jrd/par.cpp 2011-07-10 01:23:53 UTC (rev 53285) @@ -81,6 +81,7 @@ static NodeParseFunc blr_parsers[256] = {NULL}; +static void par_error(BlrReader& blrReader, const Arg::StatusVector& v, bool isSyntaxError = true); static PlanNode* par_plan(thread_db*, CompilerScratch*); @@ -328,143 +329,145 @@ } -USHORT PAR_desc(thread_db* tdbb, CompilerScratch* csb, DSC* desc, ItemInfo* itemInfo) +// Parse a BLR datatype. Return the alignment requirements of the datatype. +USHORT PAR_datatype(thread_db* tdbb, BlrReader& blrReader, dsc* desc) { -/************************************** - * - * P A R _ d e s c - * - ************************************** - * - * Functional description - * Parse a BLR descriptor. Return the alignment requirements - * of the datatype. - * - **************************************/ - if (itemInfo) - { - itemInfo->nullable = true; - itemInfo->explicitCollation = false; - itemInfo->fullDomain = false; - } + desc->clear(); - desc->dsc_scale = 0; - desc->dsc_sub_type = 0; - desc->dsc_address = NULL; - desc->dsc_flags = 0; - - const USHORT dtype = csb->csb_blr_reader.getByte(); + const USHORT dtype = blrReader.getByte(); USHORT textType; switch (dtype) { - case blr_not_nullable: - PAR_desc(tdbb, csb, desc, itemInfo); - if (itemInfo) - itemInfo->nullable = false; - break; + case blr_text: + desc->makeText(blrReader.getWord(), ttype_dynamic); + desc->dsc_flags |= DSC_no_subtype; + break; - case blr_text: - desc->makeText(csb->csb_blr_reader.getWord(), ttype_dynamic); - desc->dsc_flags |= DSC_no_subtype; - break; + case blr_cstring: + desc->dsc_dtype = dtype_cstring; + desc->dsc_flags |= DSC_no_subtype; + desc->dsc_length = blrReader.getWord(); + desc-... [truncated message content] |
From: <fir...@us...> - 2011-07-10 03:22:59
|
Revision: 53286 http://firebird.svn.sourceforge.net/firebird/?rev=53286&view=rev Author: firebirds Date: 2011-07-10 03:22:52 +0000 (Sun, 10 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-10 01:23:53 UTC (rev 53285) +++ firebird/trunk/ChangeLog 2011-07-10 03:22:52 UTC (rev 53286) @@ -1,3 +1,33 @@ + 2011-07-10 01:23 asfernandes + M examples/udr/UdrCppExample.cpp + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/dsql/DdlNodes.epp + M src/include/firebird/ExternalEngine.h + M src/include/firebird/Message.h + M src/include/firebird/UdrCppEngine.h + M src/include/firebird/UdrEngine.h + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/jrd/BlrReader.h + M src/jrd/ExtEngineManager.cpp + M src/jrd/ExtEngineManager.h + M src/jrd/Function.epp + M src/jrd/Function.h + M src/jrd/exe.cpp + M src/jrd/exe.h + M src/jrd/met.epp + M src/jrd/par.cpp + M src/jrd/par_proto.h + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql + M src/plugins/udr_engine/UdrEngine.cpp +Use the BLR message definition of external procedures and functions. + 2011-07-07 07:58 robocop M src/common/StatusHolder.cpp M src/common/StatusHolder.h Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-10 01:23:53 UTC (rev 53285) +++ firebird/trunk/src/jrd/build_no.h 2011-07-10 03:22:52 UTC (rev 53286) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29484 + FORMAL BUILD NUMBER:29485 */ -#define PRODUCT_VER_STRING "3.0.0.29484" -#define FILE_VER_STRING "WI-T3.0.0.29484" -#define LICENSE_VER_STRING "WI-T3.0.0.29484" -#define FILE_VER_NUMBER 3, 0, 0, 29484 +#define PRODUCT_VER_STRING "3.0.0.29485" +#define FILE_VER_STRING "WI-T3.0.0.29485" +#define LICENSE_VER_STRING "WI-T3.0.0.29485" +#define FILE_VER_NUMBER 3, 0, 0, 29485 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29484" +#define FB_BUILD_NO "29485" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-10 01:23:53 UTC (rev 53285) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-10 03:22:52 UTC (rev 53286) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29484 +BuildNum=29485 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-13 03:17:13
|
Revision: 53290 http://firebird.svn.sourceforge.net/firebird/?rev=53290&view=rev Author: firebirds Date: 2011-07-13 03:17:02 +0000 (Wed, 13 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-13 02:10:28 UTC (rev 53289) +++ firebird/trunk/ChangeLog 2011-07-13 03:17:02 UTC (rev 53290) @@ -1,3 +1,21 @@ + 2011-07-13 02:10 asfernandes + M src/include/firebird/ExternalEngine.h + M src/jrd/ExtEngineManager.cpp + M src/plugins/udr_engine/UdrEngine.cpp +Remove the old getVersion method from external engines. + + 2011-07-12 16:07 asfernandes + M src/dsql/sqlda_pub.h + M src/include/fb_types.h + M src/include/firebird/ExternalEngine.h + M src/include/firebird/Interface.h + M src/include/firebird/Message.h + M src/include/firebird/Provider.h + M src/include/ibase.h + M src/include/types_pub.h + M src/yvalve/why.cpp +Fixed problems in public headers. + 2011-07-10 01:23 asfernandes M examples/udr/UdrCppExample.cpp M lang_helpers/gds_codes.ftn Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-13 02:10:28 UTC (rev 53289) +++ firebird/trunk/src/jrd/build_no.h 2011-07-13 03:17:02 UTC (rev 53290) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29485 + FORMAL BUILD NUMBER:29487 */ -#define PRODUCT_VER_STRING "3.0.0.29485" -#define FILE_VER_STRING "WI-T3.0.0.29485" -#define LICENSE_VER_STRING "WI-T3.0.0.29485" -#define FILE_VER_NUMBER 3, 0, 0, 29485 +#define PRODUCT_VER_STRING "3.0.0.29487" +#define FILE_VER_STRING "WI-T3.0.0.29487" +#define LICENSE_VER_STRING "WI-T3.0.0.29487" +#define FILE_VER_NUMBER 3, 0, 0, 29487 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29485" +#define FB_BUILD_NO "29487" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-13 02:10:28 UTC (rev 53289) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-13 03:17:02 UTC (rev 53290) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29485 +BuildNum=29487 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-14 03:17:11
|
Revision: 53296 http://firebird.svn.sourceforge.net/firebird/?rev=53296&view=rev Author: firebirds Date: 2011-07-14 03:16:59 +0000 (Thu, 14 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-13 15:15:34 UTC (rev 53295) +++ firebird/trunk/ChangeLog 2011-07-14 03:16:59 UTC (rev 53296) @@ -1,3 +1,13 @@ + 2011-07-13 15:15 dimitr + M src/jrd/btr.cpp + M src/jrd/sort.cpp + M src/jrd/sort.h +Front ported CORE-3547: Floating-point negative zero doesn't match positive zero in the index. + + 2011-07-13 14:50 dimitr + M src/dsql/ExprNodes.cpp +Poor man's attempt to fix the expression indices. In the old code, we didn't require node1->stream and node2->stream to be the same, we just needed node2->stream to be the one we considered for index matching. Different contexts don't necessarily mean different nodes, the relation could still be the same. + 2011-07-13 02:10 asfernandes M src/include/firebird/ExternalEngine.h M src/jrd/ExtEngineManager.cpp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-13 15:15:34 UTC (rev 53295) +++ firebird/trunk/src/jrd/build_no.h 2011-07-14 03:16:59 UTC (rev 53296) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29487 + FORMAL BUILD NUMBER:29489 */ -#define PRODUCT_VER_STRING "3.0.0.29487" -#define FILE_VER_STRING "WI-T3.0.0.29487" -#define LICENSE_VER_STRING "WI-T3.0.0.29487" -#define FILE_VER_NUMBER 3, 0, 0, 29487 +#define PRODUCT_VER_STRING "3.0.0.29489" +#define FILE_VER_STRING "WI-T3.0.0.29489" +#define LICENSE_VER_STRING "WI-T3.0.0.29489" +#define FILE_VER_NUMBER 3, 0, 0, 29489 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29487" +#define FB_BUILD_NO "29489" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-13 15:15:34 UTC (rev 53295) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-14 03:16:59 UTC (rev 53296) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29487 +BuildNum=29489 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-15 03:24:20
|
Revision: 53305 http://firebird.svn.sourceforge.net/firebird/?rev=53305&view=rev Author: firebirds Date: 2011-07-15 03:24:13 +0000 (Fri, 15 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-14 15:56:40 UTC (rev 53304) +++ firebird/trunk/ChangeLog 2011-07-15 03:24:13 UTC (rev 53305) @@ -1,3 +1,35 @@ + 2011-07-14 15:56 asfernandes + M src/common/config/config_file.cpp + M src/include/gen/ids.h +Correction and improvement to the config system. + + 2011-07-14 15:34 dimitr + M src/include/gen/ids.h + M src/jrd/names.h + M src/jrd/relations.h +Removed the accidentally committed lines. + + 2011-07-14 15:27 dimitr + M src/burp/backup.epp + M src/burp/burp.h + M src/burp/restore.epp + M src/dsql/DdlNodes.epp + M src/dsql/DdlNodes.h + M src/dsql/Nodes.h + M src/include/gen/ids.h + M src/jrd/names.h + M src/jrd/relations.h +Added the missing RDB$SYSTEM_FLAG and RDB$DESCRIPTION columns into RDB$FUNCTION_ARGUMENTS. + + 2011-07-14 12:31 dimitr + M src/jrd/btr.cpp +Fixed CORE-2709: Many indexed reads in a compound index with NULLs. Note that it's an ODS change, so nullable compound indices may require recreation. + + 2011-07-14 11:54 dimitr + M src/dsql/ExprNodes.cpp + M src/jrd/Optimizer.cpp +Methinks this is a more correct logic than the one committed yesterday. Also, fixed the stream comparison for views. + 2011-07-13 15:15 dimitr M src/jrd/btr.cpp M src/jrd/sort.cpp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-14 15:56:40 UTC (rev 53304) +++ firebird/trunk/src/jrd/build_no.h 2011-07-15 03:24:13 UTC (rev 53305) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29489 + FORMAL BUILD NUMBER:29494 */ -#define PRODUCT_VER_STRING "3.0.0.29489" -#define FILE_VER_STRING "WI-T3.0.0.29489" -#define LICENSE_VER_STRING "WI-T3.0.0.29489" -#define FILE_VER_NUMBER 3, 0, 0, 29489 +#define PRODUCT_VER_STRING "3.0.0.29494" +#define FILE_VER_STRING "WI-T3.0.0.29494" +#define LICENSE_VER_STRING "WI-T3.0.0.29494" +#define FILE_VER_NUMBER 3, 0, 0, 29494 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29489" +#define FB_BUILD_NO "29494" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-14 15:56:40 UTC (rev 53304) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-15 03:24:13 UTC (rev 53305) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29489 +BuildNum=29494 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2011-07-15 08:54:07
|
Revision: 53307 http://firebird.svn.sourceforge.net/firebird/?rev=53307&view=rev Author: dimitr Date: 2011-07-15 08:54:00 +0000 (Fri, 15 Jul 2011) Log Message: ----------- Implemented COMMENT for function arguments. Modified Paths: -------------- firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/dsql/DdlNodes.epp firebird/trunk/src/dsql/dsql.h firebird/trunk/src/dsql/parse.y firebird/trunk/src/include/gen/codetext.h firebird/trunk/src/include/gen/iberror.h firebird/trunk/src/include/gen/msgs.h firebird/trunk/src/include/gen/sql_code.h firebird/trunk/src/include/gen/sql_state.h firebird/trunk/src/msgs/facilities2.sql firebird/trunk/src/msgs/messages2.sql firebird/trunk/src/msgs/system_errors2.sql Modified: firebird/trunk/lang_helpers/gds_codes.ftn =================================================================== --- firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-15 08:54:00 UTC (rev 53307) @@ -1710,6 +1710,12 @@ PARAMETER (GDS__dyn_invalid_ddl_func = 336068878) INTEGER*4 GDS__dyn_newfc_oldsyntax PARAMETER (GDS__dyn_newfc_oldsyntax = 336068879) + INTEGER*4 GDS__dyn_func_param_not_found + PARAMETER (GDS__dyn_func_param_not_found = 336068886) + INTEGER*4 GDS__dyn_routine_param_not_found + PARAMETER (GDS__dyn_routine_param_not_found = 336068887) + INTEGER*4 GDS__dyn_routine_param_ambiguous + PARAMETER (GDS__dyn_routine_param_ambiguous = 336068888) INTEGER*4 GDS__gbak_unknown_switch PARAMETER (GDS__gbak_unknown_switch = 336330753) INTEGER*4 GDS__gbak_page_size_missing Modified: firebird/trunk/lang_helpers/gds_codes.pas =================================================================== --- firebird/trunk/lang_helpers/gds_codes.pas 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/lang_helpers/gds_codes.pas 2011-07-15 08:54:00 UTC (rev 53307) @@ -862,6 +862,9 @@ gds_dyn_package_body_exists = 336068877; gds_dyn_invalid_ddl_func = 336068878; gds_dyn_newfc_oldsyntax = 336068879; + gds_dyn_func_param_not_found = 336068886; + gds_dyn_routine_param_not_found = 336068887; + gds_dyn_routine_param_ambiguous = 336068888; gds_gbak_unknown_switch = 336330753; gds_gbak_page_size_missing = 336330754; gds_gbak_page_size_toobig = 336330755; Modified: firebird/trunk/src/dsql/DdlNodes.epp =================================================================== --- firebird/trunk/src/dsql/DdlNodes.epp 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/dsql/DdlNodes.epp 2011-07-15 08:54:00 UTC (rev 53307) @@ -38,6 +38,7 @@ #include "../common/os/path_utils.h" #include "../jrd/IntlManager.h" #include "../jrd/PreparedStatement.h" +#include "../jrd/ResultSet.h" #include "../jrd/blb_proto.h" #include "../jrd/cmp_proto.h" #include "../common/dsc_proto.h" @@ -881,6 +882,54 @@ const char* addWhereClause = NULL; Arg::StatusVector status; + if (objType == ddl_unknown) + { + fb_assert(subName.hasData()); + + PreparedStatement::Builder sql; + sql << "select 1 from rdb$procedures p join rdb$procedure_parameters pp using (rdb$procedure_name)" << + "where p.rdb$procedure_name =" << objName << + "and pp.rdb$parameter_name =" << subName << + "union all" << + "select 2 from rdb$functions f join rdb$function_arguments fa using (rdb$function_name)" << + "where f.rdb$function_name =" << objName << + "and fa.rdb$argument_name =" << subName; + + AutoPreparedStatement ps(attachment->prepareStatement(tdbb, transaction, sql)); + AutoResultSet rs(ps->executeQuery(tdbb, transaction)); + + if (!rs->fetch(tdbb)) + { + status_exception::raise(Arg::Gds(isc_dyn_routine_param_not_found) << + Arg::Str(subName) << Arg::Str(objName)); + } + + fb_assert(!rs->isNull(1)); + dsc& desc = rs->getDesc(1); + fb_assert(desc.dsc_dtype == dtype_long); + const SLONG result = *reinterpret_cast<SLONG*>(desc.dsc_address); + + switch (result) + { + case 1: + objType = ddl_procedure; + break; + + case 2: + objType = ddl_udf; + break; + + default: + fb_assert(false); + } + + if (rs->fetch(tdbb)) + { + status_exception::raise(Arg::Gds(isc_dyn_routine_param_ambiguous) << + Arg::Str(subName) << Arg::Str(objName)); + } + } + switch (objType) { case ddl_database: @@ -942,10 +991,21 @@ break; case ddl_udf: - tableClause = "rdb$functions"; + if (subName.hasData()) + { + tableClause = "rdb$function_arguments"; + subColumnClause = "rdb$argument_name"; + status << Arg::Gds(isc_dyn_func_param_not_found) << + Arg::Str(subName) << Arg::Str(objName); + } + else + { + tableClause = "rdb$functions"; + status << Arg::Gds(isc_dyn_func_not_found) << Arg::Str(objName); + } + + addWhereClause = "rdb$package_name is null"; columnClause = "rdb$function_name"; - addWhereClause = "rdb$package_name is null"; - status << Arg::Gds(isc_dyn_func_not_found) << Arg::Str(objName); break; case ddl_blob_filter: Modified: firebird/trunk/src/dsql/dsql.h =================================================================== --- firebird/trunk/src/dsql/dsql.h 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/dsql/dsql.h 2011-07-15 08:54:00 UTC (rev 53307) @@ -787,6 +787,7 @@ // CVC: Enumeration used for the COMMENT command. enum { + ddl_unknown, ddl_database, ddl_domain, ddl_relation, ddl_view, ddl_procedure, ddl_trigger, ddl_udf, ddl_blob_filter, ddl_exception, ddl_generator, ddl_index, ddl_role, ddl_charset, ddl_collation, ddl_package, ddl_schema, Modified: firebird/trunk/src/dsql/parse.y =================================================================== --- firebird/trunk/src/dsql/parse.y 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/dsql/parse.y 2011-07-15 08:54:00 UTC (rev 53307) @@ -867,7 +867,7 @@ // New nodes -%type <intVal> ddl_type0 ddl_type1 ddl_type2 +%type <intVal> ddl_type0 ddl_type1 ddl_type2 ddl_param_opt %type <boolVal> release_only_opt @@ -4220,9 +4220,15 @@ ddl_type2 : COLUMN { $$ = ddl_relation; } - | PARAMETER { $$ = ddl_procedure; } + | ddl_param_opt PARAMETER { $$ = $1; } ; +ddl_param_opt + : { $$ = ddl_unknown; } + | PROCEDURE { $$ = ddl_procedure; } + | FUNCTION { $$ = ddl_udf; } + ; + ddl_subname : '.' symbol_ddl_name { $$ = $2; } ; Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/include/gen/codetext.h 2011-07-15 08:54:00 UTC (rev 53307) @@ -851,6 +851,9 @@ {"dyn_package_body_exists", 336068877}, {"dyn_invalid_ddl_func", 336068878}, {"dyn_newfc_oldsyntax", 336068879}, + {"dyn_func_param_not_found", 336068886}, + {"dyn_routine_param_not_found", 336068887}, + {"dyn_routine_param_ambiguous", 336068888}, {"gbak_unknown_switch", 336330753}, {"gbak_page_size_missing", 336330754}, {"gbak_page_size_toobig", 336330755}, Modified: firebird/trunk/src/include/gen/iberror.h =================================================================== --- firebird/trunk/src/include/gen/iberror.h 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/include/gen/iberror.h 2011-07-15 08:54:00 UTC (rev 53307) @@ -885,6 +885,9 @@ 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; +const ISC_STATUS isc_dyn_func_param_not_found = 336068886L; +const ISC_STATUS isc_dyn_routine_param_not_found = 336068887L; +const ISC_STATUS isc_dyn_routine_param_ambiguous = 336068888L; 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; @@ -1182,7 +1185,7 @@ 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 = 1126; +const ISC_STATUS isc_err_max = 1129; #else /* c definitions */ @@ -2037,6 +2040,9 @@ #define isc_dyn_package_body_exists 336068877L #define isc_dyn_invalid_ddl_func 336068878L #define isc_dyn_newfc_oldsyntax 336068879L +#define isc_dyn_func_param_not_found 336068886L +#define isc_dyn_routine_param_not_found 336068887L +#define isc_dyn_routine_param_ambiguous 336068888L #define isc_gbak_unknown_switch 336330753L #define isc_gbak_page_size_missing 336330754L #define isc_gbak_page_size_toobig 336330755L @@ -2334,7 +2340,7 @@ #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 1126 +#define isc_err_max 1129 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/include/gen/msgs.h 2011-07-15 08:54:00 UTC (rev 53307) @@ -854,6 +854,9 @@ {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 */ + {336068886, "Parameter @1 in function @2 is not found"}, /* dyn_func_param_not_found */ + {336068887, "Parameter @1 of routine @2 is not found"}, /* dyn_routine_param_not_found */ + {336068888, "Parameter @1 of routine @2 is ambiguous (found in both procedures and functions). Use a specifier keyword."}, /* dyn_routine_param_ambiguous */ {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 */ Modified: firebird/trunk/src/include/gen/sql_code.h =================================================================== --- firebird/trunk/src/include/gen/sql_code.h 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/include/gen/sql_code.h 2011-07-15 08:54:00 UTC (rev 53307) @@ -850,6 +850,9 @@ {336068877, -901}, /* 269 dyn_package_body_exists */ {336068878, -607}, /* 270 dyn_invalid_ddl_func */ {336068879, -901}, /* 271 dyn_newfc_oldsyntax */ + {336068886, -901}, /* 278 dyn_func_param_not_found */ + {336068887, -901}, /* 279 dyn_routine_param_not_found */ + {336068888, -901}, /* 280 dyn_routine_param_ambiguous */ {336330753, -901}, /* 1 gbak_unknown_switch */ {336330754, -901}, /* 2 gbak_page_size_missing */ {336330755, -901}, /* 3 gbak_page_size_toobig */ Modified: firebird/trunk/src/include/gen/sql_state.h =================================================================== --- firebird/trunk/src/include/gen/sql_state.h 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/include/gen/sql_state.h 2011-07-15 08:54:00 UTC (rev 53307) @@ -850,6 +850,9 @@ {336068877, "42000"}, // 269 dyn_package_body_exists {336068878, "HY000"}, // 270 dyn_invalid_ddl_func {336068879, "42000"}, // 271 dyn_newfc_oldsyntax + {336068886, "42000"}, // 278 dyn_func_param_not_found + {336068887, "42000"}, // 279 dyn_routine_param_not_found + {336068888, "42000"}, // 280 dyn_routine_param_ambiguous {336330753, "00000"}, // 1 gbak_unknown_switch {336330754, "00000"}, // 2 gbak_page_size_missing {336330755, "00000"}, // 3 gbak_page_size_toobig Modified: firebird/trunk/src/msgs/facilities2.sql =================================================================== --- firebird/trunk/src/msgs/facilities2.sql 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/msgs/facilities2.sql 2011-07-15 08:54:00 UTC (rev 53307) @@ -13,7 +13,7 @@ --('1996-11-07 13:39:40', 'GRST', 6, 1) -- ('2005-11-05 13:09:00', 'DSQL', 7, 32) -('2010-06-26 01:52:06', 'DYN', 8, 278) +('2011-07-15 12:08:00', 'DYN', 8, 281) -- --('1996-11-07 13:39:40', 'FRED', 9, 1) -- Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/msgs/messages2.sql 2011-07-15 08:54:00 UTC (rev 53307) @@ -1851,6 +1851,9 @@ (NULL, 'DYN_modify_sql_field', 'dyn_mod.epp', NULL, 8, 275, NULL, 'Identity column @1 of table @2 cannot have default value', NULL, NULL); (NULL, 'DYN_modify_global_field', 'dyn_mod.epp', NULL, 8, 276, NULL, 'Domain @1 must be of exact number type with zero scale because it''s used in an identity column', NULL, NULL); (NULL, 'DYN_UTIL_generate_generator_name', 'dyn_util.epp', NULL, 8, 277, NULL, 'Generation of generator name failed', NULL, NULL); +('dyn_func_param_not_found', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 278, NULL, 'Parameter @1 in function @2 not found', NULL, NULL); +('dyn_routine_param_not_found', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 279, NULL, 'Parameter @1 of routine @2 not found', NULL, NULL); +('dyn_routine_param_ambiguous', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 280, NULL, 'Parameter @1 of routine @2 is ambiguous (found in both procedures and functions). Use a specifier keyword.', NULL, NULL); COMMIT WORK; -- TEST (NULL, 'main', 'test.c', NULL, 11, 0, NULL, 'This is a modified text message', NULL, NULL); Modified: firebird/trunk/src/msgs/system_errors2.sql =================================================================== --- firebird/trunk/src/msgs/system_errors2.sql 2011-07-15 03:50:12 UTC (rev 53306) +++ firebird/trunk/src/msgs/system_errors2.sql 2011-07-15 08:54:00 UTC (rev 53307) @@ -838,6 +838,9 @@ (-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) +(-901, '42', '000', 8, 278, 'dyn_func_param_not_found', NULL, NULL) +(-901, '42', '000', 8, 279, 'dyn_routine_param_not_found', NULL, NULL) +(-901, '42', '000', 8, 280, 'dyn_routine_param_ambiguous', NULL, NULL) -- GBAK (-901, '00', '000', 12, 1, 'gbak_unknown_switch', NULL, NULL) (-901, '00', '000', 12, 2, 'gbak_page_size_missing', NULL, NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <di...@us...> - 2011-07-15 11:52:23
|
Revision: 53313 http://firebird.svn.sourceforge.net/firebird/?rev=53313&view=rev Author: dimitr Date: 2011-07-15 11:52:16 +0000 (Fri, 15 Jul 2011) Log Message: ----------- Completed some missing parts of the PSQL functions implementation. Adriano, please review. Modified Paths: -------------- firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/dsql/DdlNodes.epp firebird/trunk/src/dsql/PackageNodes.epp firebird/trunk/src/include/gen/codetext.h firebird/trunk/src/include/gen/iberror.h firebird/trunk/src/include/gen/msgs.h firebird/trunk/src/include/gen/sql_code.h firebird/trunk/src/include/gen/sql_state.h firebird/trunk/src/jrd/drq.h firebird/trunk/src/msgs/facilities2.sql firebird/trunk/src/msgs/messages2.sql firebird/trunk/src/msgs/system_errors2.sql Modified: firebird/trunk/lang_helpers/gds_codes.ftn =================================================================== --- firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-15 11:52:16 UTC (rev 53313) @@ -1716,6 +1716,10 @@ PARAMETER (GDS__dyn_routine_param_not_found = 336068887) INTEGER*4 GDS__dyn_routine_param_ambiguous PARAMETER (GDS__dyn_routine_param_ambiguous = 336068888) + INTEGER*4 GDS__dyn_coll_used_function + PARAMETER (GDS__dyn_coll_used_function = 336068889) + INTEGER*4 GDS__dyn_domain_used_function + PARAMETER (GDS__dyn_domain_used_function = 336068890) INTEGER*4 GDS__gbak_unknown_switch PARAMETER (GDS__gbak_unknown_switch = 336330753) INTEGER*4 GDS__gbak_page_size_missing Modified: firebird/trunk/lang_helpers/gds_codes.pas =================================================================== --- firebird/trunk/lang_helpers/gds_codes.pas 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/lang_helpers/gds_codes.pas 2011-07-15 11:52:16 UTC (rev 53313) @@ -865,6 +865,8 @@ gds_dyn_func_param_not_found = 336068886; gds_dyn_routine_param_not_found = 336068887; gds_dyn_routine_param_ambiguous = 336068888; + gds_dyn_coll_used_function = 336068889; + gds_dyn_domain_used_function = 336068890; gds_gbak_unknown_switch = 336330753; gds_gbak_page_size_missing = 336330754; gds_gbak_page_size_toobig = 336330755; Modified: firebird/trunk/src/dsql/DdlNodes.epp =================================================================== --- firebird/trunk/src/dsql/DdlNodes.epp 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/dsql/DdlNodes.epp 2011-07-15 11:52:16 UTC (rev 53313) @@ -3433,6 +3433,25 @@ } END_FOR + request2.reset(tdbb, drq_l_arg_coll, DYN_REQUESTS); + + FOR (REQUEST_HANDLE request2 TRANSACTION_HANDLE transaction) + ARG IN RDB$FUNCTION_ARGUMENTS CROSS F IN RDB$FIELDS + WITH ARG.RDB$FIELD_SOURCE EQ F.RDB$FIELD_NAME AND + F.RDB$CHARACTER_SET_ID EQ COLL.RDB$CHARACTER_SET_ID AND + ARG.RDB$COLLATION_ID EQ COLL.RDB$COLLATION_ID + { + fb_utils::exact_name_limit(ARG.RDB$ARGUMENT_NAME, sizeof(ARG.RDB$ARGUMENT_NAME)); + + status_exception::raise( + Arg::Gds(isc_dyn_coll_used_function) << + COLL.RDB$COLLATION_NAME << + QualifiedName(ARG.RDB$FUNCTION_NAME, + (ARG.RDB$PACKAGE_NAME.NULL ? NULL : ARG.RDB$PACKAGE_NAME)).toString().c_str() << + ARG.RDB$ARGUMENT_NAME); + } + END_FOR + request2.reset(tdbb, drq_l_fld_coll, DYN_REQUESTS); FOR (REQUEST_HANDLE request2 TRANSACTION_HANDLE transaction) @@ -4408,7 +4427,24 @@ } END_FOR - //// FIXME: Check domain usage in functions. + request.reset(tdbb, drq_l_arg_src, DYN_REQUESTS); + + FOR(REQUEST_HANDLE request TRANSACTION_HANDLE transaction) + X IN RDB$FUNCTION_ARGUMENTS + WITH X.RDB$FIELD_SOURCE EQ name.c_str() + { + fb_utils::exact_name_limit(X.RDB$FIELD_SOURCE, sizeof(X.RDB$FIELD_SOURCE)); + fb_utils::exact_name_limit(X.RDB$FUNCTION_NAME, sizeof(X.RDB$FUNCTION_NAME)); + fb_utils::exact_name_limit(X.RDB$ARGUMENT_NAME, sizeof(X.RDB$ARGUMENT_NAME)); + + // msg 239: "Domain %s is used in function %s (parameter name %s) and cannot be dropped" + status_exception::raise( + Arg::Gds(isc_dyn_domain_used_function) << X.RDB$FIELD_SOURCE << + QualifiedName(X.RDB$FUNCTION_NAME, + (X.RDB$PACKAGE_NAME.NULL ? NULL : X.RDB$PACKAGE_NAME)).toString().c_str() << + X.RDB$ARGUMENT_NAME); + } + END_FOR } @@ -6970,7 +7006,19 @@ } END_FOR - //// FIXME: Check usage in functions. + request2.reset(); + + FOR(REQUEST_HANDLE request2 TRANSACTION_HANDLE transaction) + ARG IN RDB$FUNCTION_ARGUMENTS + WITH ARG.RDB$RELATION_NAME = name.c_str() AND + ARG.RDB$FIELD_NAME = field->fld_name.c_str() + { + MODIFY ARG USING + strcpy(ARG.RDB$FIELD_SOURCE, RFR.RDB$FIELD_SOURCE); + END_MODIFY + } + END_FOR + } END_FOR @@ -7013,8 +7061,10 @@ FLD.RDB$FIELD_NAME STARTING WITH IMPLICIT_DOMAIN_PREFIX AND (NOT ANY RFR IN RDB$RELATION_FIELDS WITH RFR.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME) AND - (NOT ANY PRC IN RDB$PROCEDURE_PARAMETERS WITH - PRC.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME) + (NOT ANY PRM IN RDB$PROCEDURE_PARAMETERS WITH + PRM.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME) AND + (NOT ANY ARG IN RDB$FUNCTION_ARGUMENTS WITH + ARG.RDB$FIELD_SOURCE EQ FLD.RDB$FIELD_NAME) { DropDomainNode::deleteDimensionRecords(tdbb, transaction, globalName); ERASE FLD; Modified: firebird/trunk/src/dsql/PackageNodes.epp =================================================================== --- firebird/trunk/src/dsql/PackageNodes.epp 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/dsql/PackageNodes.epp 2011-07-15 11:52:16 UTC (rev 53313) @@ -960,7 +960,7 @@ } } - // Lets recreate default of public procedure parameters + // Lets recreate default of public procedure/function parameters requestHandle.reset(tdbb, drq_m_pkg_prm_defs, DYN_REQUESTS); @@ -993,6 +993,36 @@ } 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() + { + 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); Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/include/gen/codetext.h 2011-07-15 11:52:16 UTC (rev 53313) @@ -854,6 +854,8 @@ {"dyn_func_param_not_found", 336068886}, {"dyn_routine_param_not_found", 336068887}, {"dyn_routine_param_ambiguous", 336068888}, + {"dyn_coll_used_function", 336068889}, + {"dyn_domain_used_function", 336068890}, {"gbak_unknown_switch", 336330753}, {"gbak_page_size_missing", 336330754}, {"gbak_page_size_toobig", 336330755}, Modified: firebird/trunk/src/include/gen/iberror.h =================================================================== --- firebird/trunk/src/include/gen/iberror.h 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/include/gen/iberror.h 2011-07-15 11:52:16 UTC (rev 53313) @@ -888,6 +888,8 @@ const ISC_STATUS isc_dyn_func_param_not_found = 336068886L; const ISC_STATUS isc_dyn_routine_param_not_found = 336068887L; const ISC_STATUS isc_dyn_routine_param_ambiguous = 336068888L; +const ISC_STATUS isc_dyn_coll_used_function = 336068889L; +const ISC_STATUS isc_dyn_domain_used_function = 336068890L; 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; @@ -1185,7 +1187,7 @@ 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 = 1129; +const ISC_STATUS isc_err_max = 1131; #else /* c definitions */ @@ -2043,6 +2045,8 @@ #define isc_dyn_func_param_not_found 336068886L #define isc_dyn_routine_param_not_found 336068887L #define isc_dyn_routine_param_ambiguous 336068888L +#define isc_dyn_coll_used_function 336068889L +#define isc_dyn_domain_used_function 336068890L #define isc_gbak_unknown_switch 336330753L #define isc_gbak_page_size_missing 336330754L #define isc_gbak_page_size_toobig 336330755L @@ -2340,7 +2344,7 @@ #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 1129 +#define isc_err_max 1131 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/include/gen/msgs.h 2011-07-15 11:52:16 UTC (rev 53313) @@ -854,9 +854,11 @@ {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 */ - {336068886, "Parameter @1 in function @2 is not found"}, /* dyn_func_param_not_found */ - {336068887, "Parameter @1 of routine @2 is not found"}, /* dyn_routine_param_not_found */ + {336068886, "Parameter @1 in function @2 not found"}, /* dyn_func_param_not_found */ + {336068887, "Parameter @1 of routine @2 not found"}, /* dyn_routine_param_not_found */ {336068888, "Parameter @1 of routine @2 is ambiguous (found in both procedures and functions). Use a specifier keyword."}, /* dyn_routine_param_ambiguous */ + {336068889, "Collation @1 is used in function @2 (parameter name @3) and cannot be dropped"}, /* dyn_coll_used_function */ + {336068890, "Domain @1 is used in function @2 (parameter name @3) and cannot be dropped"}, /* dyn_domain_used_function */ {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 */ Modified: firebird/trunk/src/include/gen/sql_code.h =================================================================== --- firebird/trunk/src/include/gen/sql_code.h 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/include/gen/sql_code.h 2011-07-15 11:52:16 UTC (rev 53313) @@ -853,6 +853,8 @@ {336068886, -901}, /* 278 dyn_func_param_not_found */ {336068887, -901}, /* 279 dyn_routine_param_not_found */ {336068888, -901}, /* 280 dyn_routine_param_ambiguous */ + {336068889, -901}, /* 281 dyn_coll_used_function */ + {336068890, -901}, /* 282 dyn_domain_used_function */ {336330753, -901}, /* 1 gbak_unknown_switch */ {336330754, -901}, /* 2 gbak_page_size_missing */ {336330755, -901}, /* 3 gbak_page_size_toobig */ Modified: firebird/trunk/src/include/gen/sql_state.h =================================================================== --- firebird/trunk/src/include/gen/sql_state.h 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/include/gen/sql_state.h 2011-07-15 11:52:16 UTC (rev 53313) @@ -853,6 +853,8 @@ {336068886, "42000"}, // 278 dyn_func_param_not_found {336068887, "42000"}, // 279 dyn_routine_param_not_found {336068888, "42000"}, // 280 dyn_routine_param_ambiguous + {336068889, "HY000"}, // 281 dyn_coll_used_function + {336068890, "HY000"}, // 282 dyn_domain_used_function {336330753, "00000"}, // 1 gbak_unknown_switch {336330754, "00000"}, // 2 gbak_page_size_missing {336330755, "00000"}, // 3 gbak_page_size_toobig Modified: firebird/trunk/src/jrd/drq.h =================================================================== --- firebird/trunk/src/jrd/drq.h 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/jrd/drq.h 2011-07-15 11:52:16 UTC (rev 53313) @@ -162,7 +162,9 @@ drq_l_rfld_coll, // lookup relation field collation drq_l_fld_coll, // lookup field collation drq_l_prp_src, // lookup a procedure parameter source + drq_l_arg_src, // lookup a function argument source drq_l_prm_coll, // lookup procedure parameter collation + drq_l_arg_coll, // lookup function argument collation drq_m_map, // modify os=>db names mapping drq_l_idx_name, // lookup index name drq_l_collation, // DSQL/DdlNodes: lookup collation @@ -206,6 +208,7 @@ drq_s_pkg_usr_prvs, // store package privileges 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 Modified: firebird/trunk/src/msgs/facilities2.sql =================================================================== --- firebird/trunk/src/msgs/facilities2.sql 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/msgs/facilities2.sql 2011-07-15 11:52:16 UTC (rev 53313) @@ -13,7 +13,7 @@ --('1996-11-07 13:39:40', 'GRST', 6, 1) -- ('2005-11-05 13:09:00', 'DSQL', 7, 32) -('2011-07-15 12:08:00', 'DYN', 8, 281) +('2011-07-15 12:08:00', 'DYN', 8, 283) -- --('1996-11-07 13:39:40', 'FRED', 9, 1) -- Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/msgs/messages2.sql 2011-07-15 11:52:16 UTC (rev 53313) @@ -1854,6 +1854,8 @@ ('dyn_func_param_not_found', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 278, NULL, 'Parameter @1 in function @2 not found', NULL, NULL); ('dyn_routine_param_not_found', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 279, NULL, 'Parameter @1 of routine @2 not found', NULL, NULL); ('dyn_routine_param_ambiguous', 'OnCommentNode::execute', 'DdlNodes.epp', NULL, 8, 280, NULL, 'Parameter @1 of routine @2 is ambiguous (found in both procedures and functions). Use a specifier keyword.', NULL, NULL); +('dyn_coll_used_function', 'DropCollationNode::execute', 'DdlNodes.epp', NULL, 8, 281, NULL, 'Collation @1 is used in function @2 (parameter name @3) and cannot be dropped', NULL, NULL); +('dyn_domain_used_function', 'DropDomainNode', 'DdlNodes.epp', NULL, 8, 282, NULL, 'Domain @1 is used in function @2 (parameter name @3) and cannot be dropped', NULL, NULL); COMMIT WORK; -- TEST (NULL, 'main', 'test.c', NULL, 11, 0, NULL, 'This is a modified text message', NULL, NULL); Modified: firebird/trunk/src/msgs/system_errors2.sql =================================================================== --- firebird/trunk/src/msgs/system_errors2.sql 2011-07-15 11:24:00 UTC (rev 53312) +++ firebird/trunk/src/msgs/system_errors2.sql 2011-07-15 11:52:16 UTC (rev 53313) @@ -841,6 +841,8 @@ (-901, '42', '000', 8, 278, 'dyn_func_param_not_found', NULL, NULL) (-901, '42', '000', 8, 279, 'dyn_routine_param_not_found', NULL, NULL) (-901, '42', '000', 8, 280, 'dyn_routine_param_ambiguous', NULL, NULL) +(-901, 'HY', '000', 8, 281, 'dyn_coll_used_function', NULL, NULL) +(-901, 'HY', '000', 8, 282, 'dyn_domain_used_function', NULL, NULL) -- GBAK (-901, '00', '000', 12, 1, 'gbak_unknown_switch', NULL, NULL) (-901, '00', '000', 12, 2, 'gbak_page_size_missing', NULL, NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-16 03:17:30
|
Revision: 53314 http://firebird.svn.sourceforge.net/firebird/?rev=53314&view=rev Author: firebirds Date: 2011-07-16 03:17:23 +0000 (Sat, 16 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-15 11:52:16 UTC (rev 53313) +++ firebird/trunk/ChangeLog 2011-07-16 03:17:23 UTC (rev 53314) @@ -1,3 +1,57 @@ + 2011-07-15 11:52 dimitr + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/dsql/DdlNodes.epp + M src/dsql/PackageNodes.epp + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/jrd/drq.h + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql +Completed some missing parts of the PSQL functions implementation. Adriano, please review. + + 2011-07-15 11:24 dimitr + M builds/win32/create_msgs.bat +Fixed the standalone running of the create_msgs script. + + 2011-07-15 09:48 dimitr + M builds/win32/msvc9/Firebird3.sln +Misc. + + 2011-07-15 09:46 dimitr + M builds/win32/msvc8/Firebird3.sln +Misc. + + 2011-07-15 09:43 dimitr + M builds/win32/defs/udr_engine.def +Fixed the build. + + 2011-07-15 09:05 dimitr + M src/dsql/dsql.cpp + M src/remote/client/interface.cpp + M src/remote/protocol.cpp +Front ported CORE-3554: Server crashes during prepare or throws incorrect parsing error if the remotely passed SQL query is empty. + + 2011-07-15 08:54 dimitr + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/dsql/DdlNodes.epp + M src/dsql/dsql.h + M src/dsql/parse.y + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql +Implemented COMMENT for function arguments. + 2011-07-14 15:56 asfernandes M src/common/config/config_file.cpp M src/include/gen/ids.h Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-15 11:52:16 UTC (rev 53313) +++ firebird/trunk/src/jrd/build_no.h 2011-07-16 03:17:23 UTC (rev 53314) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29494 + FORMAL BUILD NUMBER:29501 */ -#define PRODUCT_VER_STRING "3.0.0.29494" -#define FILE_VER_STRING "WI-T3.0.0.29494" -#define LICENSE_VER_STRING "WI-T3.0.0.29494" -#define FILE_VER_NUMBER 3, 0, 0, 29494 +#define PRODUCT_VER_STRING "3.0.0.29501" +#define FILE_VER_STRING "WI-T3.0.0.29501" +#define LICENSE_VER_STRING "WI-T3.0.0.29501" +#define FILE_VER_NUMBER 3, 0, 0, 29501 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29494" +#define FB_BUILD_NO "29501" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-15 11:52:16 UTC (rev 53313) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-16 03:17:23 UTC (rev 53314) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29494 +BuildNum=29501 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-17 03:17:38
|
Revision: 53323 http://firebird.svn.sourceforge.net/firebird/?rev=53323&view=rev Author: firebirds Date: 2011-07-17 03:17:31 +0000 (Sun, 17 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-17 02:58:50 UTC (rev 53322) +++ firebird/trunk/ChangeLog 2011-07-17 03:17:31 UTC (rev 53323) @@ -1,3 +1,24 @@ + 2011-07-16 20:15 asfernandes + M src/gpre/c_cxx.cpp + M src/jrd/nbak.cpp +Warnings. + + 2011-07-16 18:49 asfernandes + M src/dsql/ExprNodes.cpp + M src/dsql/dsql.cpp + M src/dsql/parse.y + M src/include/firebird/Message.h + M src/jrd/Optimizer.cpp +Misc. + + 2011-07-16 18:46 asfernandes + M src/dsql/DdlNodes.epp +Correct the lookup of unspecified parameters wrt packages. + + 2011-07-16 10:41 hvlad + M src/jrd/vio.cpp +Port forward fix for bug CORE-3557 : AV in engine when preparing query against dropping table + 2011-07-15 11:52 dimitr M lang_helpers/gds_codes.ftn M lang_helpers/gds_codes.pas Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-17 02:58:50 UTC (rev 53322) +++ firebird/trunk/src/jrd/build_no.h 2011-07-17 03:17:31 UTC (rev 53323) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29501 + FORMAL BUILD NUMBER:29505 */ -#define PRODUCT_VER_STRING "3.0.0.29501" -#define FILE_VER_STRING "WI-T3.0.0.29501" -#define LICENSE_VER_STRING "WI-T3.0.0.29501" -#define FILE_VER_NUMBER 3, 0, 0, 29501 +#define PRODUCT_VER_STRING "3.0.0.29505" +#define FILE_VER_STRING "WI-T3.0.0.29505" +#define LICENSE_VER_STRING "WI-T3.0.0.29505" +#define FILE_VER_NUMBER 3, 0, 0, 29505 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29501" +#define FB_BUILD_NO "29505" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-17 02:58:50 UTC (rev 53322) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-17 03:17:31 UTC (rev 53323) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29501 +BuildNum=29505 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-18 03:18:47
|
Revision: 53331 http://firebird.svn.sourceforge.net/firebird/?rev=53331&view=rev Author: firebirds Date: 2011-07-18 03:18:40 +0000 (Mon, 18 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-17 09:59:42 UTC (rev 53330) +++ firebird/trunk/ChangeLog 2011-07-18 03:18:40 UTC (rev 53331) @@ -1,3 +1,7 @@ + 2011-07-17 09:49 hvlad + M src/jrd/dfw.epp +Port forward fix for bug CORE-3549 : Database corruption after end of session : page xxx is of wrong type expected 4 found 7 + 2011-07-16 20:15 asfernandes M src/gpre/c_cxx.cpp M src/jrd/nbak.cpp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-17 09:59:42 UTC (rev 53330) +++ firebird/trunk/src/jrd/build_no.h 2011-07-18 03:18:40 UTC (rev 53331) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29505 + FORMAL BUILD NUMBER:29506 */ -#define PRODUCT_VER_STRING "3.0.0.29505" -#define FILE_VER_STRING "WI-T3.0.0.29505" -#define LICENSE_VER_STRING "WI-T3.0.0.29505" -#define FILE_VER_NUMBER 3, 0, 0, 29505 +#define PRODUCT_VER_STRING "3.0.0.29506" +#define FILE_VER_STRING "WI-T3.0.0.29506" +#define LICENSE_VER_STRING "WI-T3.0.0.29506" +#define FILE_VER_NUMBER 3, 0, 0, 29506 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29505" +#define FB_BUILD_NO "29506" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-17 09:59:42 UTC (rev 53330) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-18 03:18:40 UTC (rev 53331) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29505 +BuildNum=29506 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2011-07-18 10:57:32
|
Revision: 53334 http://firebird.svn.sourceforge.net/firebird/?rev=53334&view=rev Author: alexpeshkoff Date: 2011-07-18 10:57:21 +0000 (Mon, 18 Jul 2011) Log Message: ----------- Front-ported Darwin port changes Modified Paths: -------------- firebird/trunk/configure.in firebird/trunk/src/common/os/posix/divorce.cpp Modified: firebird/trunk/configure.in =================================================================== --- firebird/trunk/configure.in 2011-07-18 03:30:03 UTC (rev 53333) +++ firebird/trunk/configure.in 2011-07-18 10:57:21 UTC (rev 53334) @@ -787,7 +787,14 @@ AC_CHECK_FUNCS(semtimedop) AC_CHECK_FUNCS(fegetenv) AC_CHECK_FUNCS(strerror_r) -AC_CHECK_FUNCS(fdatasync fsync) +case $host in + *-darwin*) + ac_cv_func_fdatasync=no + ;; + *) + AC_CHECK_FUNCS(fdatasync fsync) + ;; +esac AC_CHECK_FUNCS(poll) dnl AC_CHECK_FUNCS(AO_compare_and_swap_full) AC_COMPILE_IFELSE( Modified: firebird/trunk/src/common/os/posix/divorce.cpp =================================================================== --- firebird/trunk/src/common/os/posix/divorce.cpp 2011-07-18 03:30:03 UTC (rev 53333) +++ firebird/trunk/src/common/os/posix/divorce.cpp 2011-07-18 10:57:21 UTC (rev 53334) @@ -99,12 +99,14 @@ for (fid = 0; fid < NOFILE; fid++) { -#ifdef MIXED_SEMAPHORE_AND_FILE_HANDLE - if (Firebird::SignalSafeSemaphore::checkHandle(fid)) +#ifdef DARWIN +#ifdef HAVE_UNISTD_H + if (isatty(fid) <= 0) { continue; } #endif +#endif if (!(mask & (1 << fid))) { close(fid); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-19 03:20:38
|
Revision: 53337 http://firebird.svn.sourceforge.net/firebird/?rev=53337&view=rev Author: firebirds Date: 2011-07-19 03:20:29 +0000 (Tue, 19 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-18 11:50:51 UTC (rev 53336) +++ firebird/trunk/ChangeLog 2011-07-19 03:20:29 UTC (rev 53337) @@ -1,3 +1,16 @@ + 2011-07-18 11:50 alexpeshkoff + M src/remote/server/server.cpp +Simplified code - thanks to Claudio + + 2011-07-18 11:19 alexpeshkoff + M src/yvalve/PluginManager.cpp +Fixed assertion - thanks to Adriano + + 2011-07-18 10:57 alexpeshkoff + M configure.in + M src/common/os/posix/divorce.cpp +Front-ported Darwin port changes + 2011-07-17 09:49 hvlad M src/jrd/dfw.epp Port forward fix for bug CORE-3549 : Database corruption after end of session : page xxx is of wrong type expected 4 found 7 Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-18 11:50:51 UTC (rev 53336) +++ firebird/trunk/src/jrd/build_no.h 2011-07-19 03:20:29 UTC (rev 53337) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29506 + FORMAL BUILD NUMBER:29509 */ -#define PRODUCT_VER_STRING "3.0.0.29506" -#define FILE_VER_STRING "WI-T3.0.0.29506" -#define LICENSE_VER_STRING "WI-T3.0.0.29506" -#define FILE_VER_NUMBER 3, 0, 0, 29506 +#define PRODUCT_VER_STRING "3.0.0.29509" +#define FILE_VER_STRING "WI-T3.0.0.29509" +#define LICENSE_VER_STRING "WI-T3.0.0.29509" +#define FILE_VER_NUMBER 3, 0, 0, 29509 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29506" +#define FB_BUILD_NO "29509" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-18 11:50:51 UTC (rev 53336) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-19 03:20:29 UTC (rev 53337) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29506 +BuildNum=29509 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-23 03:17:55
|
Revision: 53347 http://firebird.svn.sourceforge.net/firebird/?rev=53347&view=rev Author: firebirds Date: 2011-07-23 03:17:49 +0000 (Sat, 23 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-22 08:17:12 UTC (rev 53346) +++ firebird/trunk/ChangeLog 2011-07-23 03:17:49 UTC (rev 53347) @@ -1,3 +1,8 @@ + 2011-07-22 07:00 dimitr + M src/jrd/DatabaseSnapshot.cpp + M src/jrd/btr.cpp +Front ported recent commits. + 2011-07-18 11:50 alexpeshkoff M src/remote/server/server.cpp Simplified code - thanks to Claudio Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-22 08:17:12 UTC (rev 53346) +++ firebird/trunk/src/jrd/build_no.h 2011-07-23 03:17:49 UTC (rev 53347) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29509 + FORMAL BUILD NUMBER:29510 */ -#define PRODUCT_VER_STRING "3.0.0.29509" -#define FILE_VER_STRING "WI-T3.0.0.29509" -#define LICENSE_VER_STRING "WI-T3.0.0.29509" -#define FILE_VER_NUMBER 3, 0, 0, 29509 +#define PRODUCT_VER_STRING "3.0.0.29510" +#define FILE_VER_STRING "WI-T3.0.0.29510" +#define LICENSE_VER_STRING "WI-T3.0.0.29510" +#define FILE_VER_NUMBER 3, 0, 0, 29510 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29509" +#define FB_BUILD_NO "29510" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-22 08:17:12 UTC (rev 53346) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-23 03:17:49 UTC (rev 53347) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29509 +BuildNum=29510 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-25 03:17:57
|
Revision: 53353 http://firebird.svn.sourceforge.net/firebird/?rev=53353&view=rev Author: firebirds Date: 2011-07-25 03:17:50 +0000 (Mon, 25 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-25 02:19:34 UTC (rev 53352) +++ firebird/trunk/ChangeLog 2011-07-25 03:17:50 UTC (rev 53353) @@ -1,3 +1,16 @@ + 2011-07-25 02:19 asfernandes + M src/dsql/BoolNodes.cpp +Fixed the bug with NOT IN (list) reported by Ivan Prenosil in fb-devel. + + 2011-07-25 01:40 asfernandes + M src/common/classes/stack.h + M src/dsql/StmtNodes.cpp +Fixed the INSERT INTO ... SELECT bug reported by Ivan Prenosil in fb-devel. + + 2011-07-24 22:15 asfernandes + M src/common/config/config_file.cpp +Correction for symlinks with relative path. + 2011-07-22 07:00 dimitr M src/jrd/DatabaseSnapshot.cpp M src/jrd/btr.cpp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-25 02:19:34 UTC (rev 53352) +++ firebird/trunk/src/jrd/build_no.h 2011-07-25 03:17:50 UTC (rev 53353) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29510 + FORMAL BUILD NUMBER:29513 */ -#define PRODUCT_VER_STRING "3.0.0.29510" -#define FILE_VER_STRING "WI-T3.0.0.29510" -#define LICENSE_VER_STRING "WI-T3.0.0.29510" -#define FILE_VER_NUMBER 3, 0, 0, 29510 +#define PRODUCT_VER_STRING "3.0.0.29513" +#define FILE_VER_STRING "WI-T3.0.0.29513" +#define LICENSE_VER_STRING "WI-T3.0.0.29513" +#define FILE_VER_NUMBER 3, 0, 0, 29513 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29510" +#define FB_BUILD_NO "29513" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-25 02:19:34 UTC (rev 53352) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-25 03:17:50 UTC (rev 53353) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29510 +BuildNum=29513 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-29 03:20:20
|
Revision: 53363 http://firebird.svn.sourceforge.net/firebird/?rev=53363&view=rev Author: firebirds Date: 2011-07-29 03:20:14 +0000 (Fri, 29 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-28 10:33:07 UTC (rev 53362) +++ firebird/trunk/ChangeLog 2011-07-29 03:20:14 UTC (rev 53363) @@ -1,3 +1,7 @@ + 2011-07-27 09:06 alexpeshkoff + M src/remote/client/interface.cpp +Fixed a hang in client when trying to attach to non-existent database with old-version firebird server running on same box + 2011-07-25 02:19 asfernandes M src/dsql/BoolNodes.cpp Fixed the bug with NOT IN (list) reported by Ivan Prenosil in fb-devel. Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-28 10:33:07 UTC (rev 53362) +++ firebird/trunk/src/jrd/build_no.h 2011-07-29 03:20:14 UTC (rev 53363) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29513 + FORMAL BUILD NUMBER:29514 */ -#define PRODUCT_VER_STRING "3.0.0.29513" -#define FILE_VER_STRING "WI-T3.0.0.29513" -#define LICENSE_VER_STRING "WI-T3.0.0.29513" -#define FILE_VER_NUMBER 3, 0, 0, 29513 +#define PRODUCT_VER_STRING "3.0.0.29514" +#define FILE_VER_STRING "WI-T3.0.0.29514" +#define LICENSE_VER_STRING "WI-T3.0.0.29514" +#define FILE_VER_NUMBER 3, 0, 0, 29514 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29513" +#define FB_BUILD_NO "29514" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-28 10:33:07 UTC (rev 53362) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-29 03:20:14 UTC (rev 53363) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29513 +BuildNum=29514 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-07-31 03:17:50
|
Revision: 53365 http://firebird.svn.sourceforge.net/firebird/?rev=53365&view=rev Author: firebirds Date: 2011-07-31 03:17:44 +0000 (Sun, 31 Jul 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-07-30 07:14:00 UTC (rev 53364) +++ firebird/trunk/ChangeLog 2011-07-31 03:17:44 UTC (rev 53365) @@ -1,3 +1,9 @@ + 2011-07-30 07:14 robocop + M src/common/classes/stack.h + M src/dsql/DdlNodes.epp + M src/jrd/met.epp +Misc. + 2011-07-27 09:06 alexpeshkoff M src/remote/client/interface.cpp Fixed a hang in client when trying to attach to non-existent database with old-version firebird server running on same box Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-07-30 07:14:00 UTC (rev 53364) +++ firebird/trunk/src/jrd/build_no.h 2011-07-31 03:17:44 UTC (rev 53365) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29514 + FORMAL BUILD NUMBER:29515 */ -#define PRODUCT_VER_STRING "3.0.0.29514" -#define FILE_VER_STRING "WI-T3.0.0.29514" -#define LICENSE_VER_STRING "WI-T3.0.0.29514" -#define FILE_VER_NUMBER 3, 0, 0, 29514 +#define PRODUCT_VER_STRING "3.0.0.29515" +#define FILE_VER_STRING "WI-T3.0.0.29515" +#define LICENSE_VER_STRING "WI-T3.0.0.29515" +#define FILE_VER_NUMBER 3, 0, 0, 29515 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29514" +#define FB_BUILD_NO "29515" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-07-30 07:14:00 UTC (rev 53364) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-07-31 03:17:44 UTC (rev 53365) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29514 +BuildNum=29515 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2011-08-02 09:26:56
|
Revision: 53366 http://firebird.svn.sourceforge.net/firebird/?rev=53366&view=rev Author: alexpeshkoff Date: 2011-08-02 09:26:49 +0000 (Tue, 02 Aug 2011) Log Message: ----------- Make diagnostics about wrong array subscript a bit better Modified Paths: -------------- firebird/trunk/lang_helpers/gds_codes.ftn firebird/trunk/lang_helpers/gds_codes.pas firebird/trunk/src/common/sdl.cpp firebird/trunk/src/include/gen/codetext.h firebird/trunk/src/include/gen/iberror.h firebird/trunk/src/include/gen/msgs.h firebird/trunk/src/include/gen/sql_code.h firebird/trunk/src/include/gen/sql_state.h firebird/trunk/src/msgs/facilities2.sql firebird/trunk/src/msgs/messages2.sql firebird/trunk/src/msgs/system_errors2.sql Modified: firebird/trunk/lang_helpers/gds_codes.ftn =================================================================== --- firebird/trunk/lang_helpers/gds_codes.ftn 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/lang_helpers/gds_codes.ftn 2011-08-02 09:26:49 UTC (rev 53366) @@ -1466,6 +1466,8 @@ PARAMETER (GDS__ee_blr_mismatch_null = 335545026) INTEGER*4 GDS__ee_blr_mismatch_length PARAMETER (GDS__ee_blr_mismatch_length = 335545027) + INTEGER*4 GDS__ss_out_of_bounds + PARAMETER (GDS__ss_out_of_bounds = 335545028) INTEGER*4 GDS__gfix_db_name PARAMETER (GDS__gfix_db_name = 335740929) INTEGER*4 GDS__gfix_invalid_sw Modified: firebird/trunk/lang_helpers/gds_codes.pas =================================================================== --- firebird/trunk/lang_helpers/gds_codes.pas 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/lang_helpers/gds_codes.pas 2011-08-02 09:26:49 UTC (rev 53366) @@ -740,6 +740,7 @@ gds_spb_no_id = 335545025; gds_ee_blr_mismatch_null = 335545026; gds_ee_blr_mismatch_length = 335545027; + gds_ss_out_of_bounds = 335545028; gds_gfix_db_name = 335740929; gds_gfix_invalid_sw = 335740930; gds_gfix_incmp_sw = 335740932; Modified: firebird/trunk/src/common/sdl.cpp =================================================================== --- firebird/trunk/src/common/sdl.cpp 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/common/sdl.cpp 2011-08-02 09:26:49 UTC (rev 53366) @@ -148,7 +148,8 @@ const SLONG n = *subscripts++; if (n < range->iad_lower || n > range->iad_upper) { - error(status_vector, Arg::Gds(isc_out_of_bounds)); + error(status_vector, Arg::Gds(isc_ss_out_of_bounds) << + Arg::Num(n) << Arg::Num(range->iad_lower) << Arg::Num(range->iad_upper)); return -1; } subscript += (n - range->iad_lower) * range->iad_length; @@ -666,7 +667,8 @@ const SLONG n = *stack_ptr++; if (n < range->iad_lower || n > range->iad_upper) { - error(arg->sdl_arg_status_vector, Arg::Gds(isc_out_of_bounds)); + error(arg->sdl_arg_status_vector, Arg::Gds(isc_ss_out_of_bounds) << + Arg::Num(n) << Arg::Num(range->iad_lower) << Arg::Num(range->iad_upper)); return false; } subscript += (n - range->iad_lower) * range->iad_length; Modified: firebird/trunk/src/include/gen/codetext.h =================================================================== --- firebird/trunk/src/include/gen/codetext.h 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/include/gen/codetext.h 2011-08-02 09:26:49 UTC (rev 53366) @@ -729,6 +729,7 @@ {"spb_no_id", 335545025}, {"ee_blr_mismatch_null", 335545026}, {"ee_blr_mismatch_length", 335545027}, + {"ss_out_of_bounds", 335545028}, {"gfix_db_name", 335740929}, {"gfix_invalid_sw", 335740930}, {"gfix_incmp_sw", 335740932}, Modified: firebird/trunk/src/include/gen/iberror.h =================================================================== --- firebird/trunk/src/include/gen/iberror.h 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/include/gen/iberror.h 2011-08-02 09:26:49 UTC (rev 53366) @@ -763,6 +763,7 @@ const ISC_STATUS isc_spb_no_id = 335545025L; const ISC_STATUS isc_ee_blr_mismatch_null = 335545026L; const ISC_STATUS isc_ee_blr_mismatch_length = 335545027L; +const ISC_STATUS isc_ss_out_of_bounds = 335545028L; const ISC_STATUS isc_gfix_db_name = 335740929L; const ISC_STATUS isc_gfix_invalid_sw = 335740930L; const ISC_STATUS isc_gfix_incmp_sw = 335740932L; @@ -1187,7 +1188,7 @@ 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 = 1131; +const ISC_STATUS isc_err_max = 1132; #else /* c definitions */ @@ -1920,6 +1921,7 @@ #define isc_spb_no_id 335545025L #define isc_ee_blr_mismatch_null 335545026L #define isc_ee_blr_mismatch_length 335545027L +#define isc_ss_out_of_bounds 335545028L #define isc_gfix_db_name 335740929L #define isc_gfix_invalid_sw 335740930L #define isc_gfix_incmp_sw 335740932L @@ -2344,7 +2346,7 @@ #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 1131 +#define isc_err_max 1132 #endif Modified: firebird/trunk/src/include/gen/msgs.h =================================================================== --- firebird/trunk/src/include/gen/msgs.h 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/include/gen/msgs.h 2011-08-02 09:26:49 UTC (rev 53366) @@ -732,6 +732,7 @@ {335545025, "missing service ID in spb"}, /* spb_no_id */ {335545026, "External BLR message mismatch: invalid null descriptor at field @1"}, /* ee_blr_mismatch_null */ {335545027, "External BLR message mismatch: length = @1, expected @2"}, /* ee_blr_mismatch_length */ + {335545028, "Subscript @1 out of bounds [@2, @3]"}, /* ss_out_of_bounds */ {335740929, "data base file name (@1) already given"}, /* gfix_db_name */ {335740930, "invalid switch @1"}, /* gfix_invalid_sw */ {335740932, "incompatible switch combination"}, /* gfix_incmp_sw */ Modified: firebird/trunk/src/include/gen/sql_code.h =================================================================== --- firebird/trunk/src/include/gen/sql_code.h 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/include/gen/sql_code.h 2011-08-02 09:26:49 UTC (rev 53366) @@ -728,6 +728,7 @@ {335545025, -901}, /* 705 spb_no_id */ {335545026, -901}, /* 706 ee_blr_mismatch_null */ {335545027, -901}, /* 707 ee_blr_mismatch_length */ + {335545028, -406}, /* 708 ss_out_of_bounds */ {335740929, -901}, /* 1 gfix_db_name */ {335740930, -901}, /* 2 gfix_invalid_sw */ {335740932, -901}, /* 4 gfix_incmp_sw */ Modified: firebird/trunk/src/include/gen/sql_state.h =================================================================== --- firebird/trunk/src/include/gen/sql_state.h 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/include/gen/sql_state.h 2011-08-02 09:26:49 UTC (rev 53366) @@ -728,6 +728,7 @@ {335545025, "HY000"}, // 705 spb_no_id {335545026, "42000"}, // 706 ee_blr_mismatch_null {335545027, "42000"}, // 707 ee_blr_mismatch_length + {335545028, "42000"}, // 708 ss_out_of_bounds {335740929, "00000"}, // 1 gfix_db_name {335740930, "00000"}, // 2 gfix_invalid_sw {335740932, "00000"}, // 4 gfix_incmp_sw Modified: firebird/trunk/src/msgs/facilities2.sql =================================================================== --- firebird/trunk/src/msgs/facilities2.sql 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/msgs/facilities2.sql 2011-08-02 09:26:49 UTC (rev 53366) @@ -1,7 +1,7 @@ /* MAX_NUMBER is the next number to be used, always one more than the highest message number. */ set bulk_insert INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES (?, ?, ?, ?); -- -('2011-07-07 12:33:00', 'JRD', 0, 708) +('2011-07-29 16:58:38', 'JRD', 0, 709) ('2010-03-15 06:59:09', 'QLI', 1, 531) -- --('2008-11-28 20:27:04', 'GDEF', 2, 346) Modified: firebird/trunk/src/msgs/messages2.sql =================================================================== --- firebird/trunk/src/msgs/messages2.sql 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/msgs/messages2.sql 2011-08-02 09:26:49 UTC (rev 53366) @@ -815,6 +815,7 @@ ('spb_no_id', 'Service::start', 'svc.c', NULL, 0, 705, NULL, 'missing service ID in spb', NULL, NULL); ('ee_blr_mismatch_null', NULL, 'met.epp', NULL, 0, 706, NULL, 'External BLR message mismatch: invalid null descriptor at field @1', NULL, NULL) ('ee_blr_mismatch_length', NULL, 'met.epp', NULL, 0, 707, NULL, 'External BLR message mismatch: length = @1, expected @2', NULL, NULL) +('ss_out_of_bounds', NULL, 'sdl.cpp', NULL, 0, 708, NULL, 'Subscript @1 out of bounds [@2, @3]', NULL, NULL) -- QLI (NULL, NULL, NULL, NULL, 1, 0, NULL, 'expected type', NULL, NULL); (NULL, NULL, NULL, NULL, 1, 1, NULL, 'bad block type', NULL, NULL); Modified: firebird/trunk/src/msgs/system_errors2.sql =================================================================== --- firebird/trunk/src/msgs/system_errors2.sql 2011-07-31 03:17:44 UTC (rev 53365) +++ firebird/trunk/src/msgs/system_errors2.sql 2011-08-02 09:26:49 UTC (rev 53366) @@ -713,6 +713,7 @@ (-901, 'HY', '000', 0, 705, 'spb_no_id', NULL, NULL) (-901, '42', '000', 0, 706, 'ee_blr_mismatch_null', NULL, NULL) (-901, '42', '000', 0, 707, 'ee_blr_mismatch_length', NULL, NULL) +(-406, '42', '000', 0, 708, 'ss_out_of_bounds', NULL, NULL) -- GFIX (-901, '00', '000', 3, 1, 'gfix_db_name', NULL, NULL) (-901, '00', '000', 3, 2, 'gfix_invalid_sw', NULL, NULL) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <ale...@us...> - 2011-08-02 11:54:36
|
Revision: 53367 http://firebird.svn.sourceforge.net/firebird/?rev=53367&view=rev Author: alexpeshkoff Date: 2011-08-02 11:54:30 +0000 (Tue, 02 Aug 2011) Log Message: ----------- Enabled use of any available on the target system ICU version for non-collation calls Modified Paths: -------------- firebird/trunk/builds/posix/darwin.defaults firebird/trunk/builds/posix/make.defaults firebird/trunk/builds/posix/prefix.aix_powerpc firebird/trunk/builds/posix/prefix.aix_powerpc_xlc firebird/trunk/builds/posix/prefix.hpux_aCC firebird/trunk/builds/posix/prefix.mingw firebird/trunk/src/common/unicode_util.cpp firebird/trunk/src/common/unicode_util.h firebird/trunk/src/intl/cs_icu.cpp firebird/trunk/src/intl/cv_icu.cpp Modified: firebird/trunk/builds/posix/darwin.defaults =================================================================== --- firebird/trunk/builds/posix/darwin.defaults 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/builds/posix/darwin.defaults 2011-08-02 11:54:30 UTC (rev 53367) @@ -27,7 +27,7 @@ LIB_LINK_RPATH:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Libraries/ LIB_EMBED_LINK_OPTIONS:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Firebird LIB_CLIENT_LINK_OPTIONS:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Firebird -FBEMBED_LINK:=-F../gen/firebird -framework Firebird -L$(LIB) -lfbembed $(ICU_LIBS) +FBEMBED_LINK:=-F../gen/firebird -framework Firebird -L$(LIB) -lfbembed PLATFORM_PATH=os/darwin PLATFORM_FALLBACK=os/posix Modified: firebird/trunk/builds/posix/make.defaults =================================================================== --- firebird/trunk/builds/posix/make.defaults 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/builds/posix/make.defaults 2011-08-02 11:54:30 UTC (rev 53367) @@ -162,7 +162,6 @@ STATICEXE_LINK:= @CXX@ $(GLOB_OPTIONS) LINK_LIBS = @LIBS@ -ICU_LIBS = -licuuc STATICLINK_LIBS = @LIBS@ SO_LINK_LIBS = @LIBS@ @@ -301,11 +300,11 @@ LINK_INTL = $(LIB_LINK) $(LINK_FBINTL_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\ $(call LIB_LINK_SONAME,libintl.$(SHRLIB_EXT).1) $(call LIB_LINK_RPATH,lib) -LINK_INTL_LIBS = -L$(LIB) $(ICU_LIBS) $(SO_LINK_LIBS) $(FIREBIRD_LIBRARY_LINK) +LINK_INTL_LIBS = -L$(LIB) $(SO_LINK_LIBS) $(FIREBIRD_LIBRARY_LINK) LINK_TRACE = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(UNDEF_FLAGS)\ $(call LIB_LINK_SONAME,$(LIB_PREFIX)fbtrace.$(SHRLIB_EXT).0) $(call LIB_LINK_RPATH,lib) -LINK_TRACE_LIBS = -L$(LIB) $(SO_LINK_LIBS) $(ICU_LIBS) +LINK_TRACE_LIBS = -L$(LIB) $(SO_LINK_LIBS) LINK_FIREBIRD = $(LIB_LINK) $(LINK_FIREBIRD_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_FIREBIRD_OPTIONS) $(UNDEF_FLAGS)\ $(call LIB_LINK_SONAME,$(LibrarySoName)) $(call LIB_LINK_RPATH,lib) @@ -313,7 +312,7 @@ LINK_ENGINE = $(LIB_LINK) $(LINK_PLUGIN_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_FIREBIRD_OPTIONS) $(UNDEF_FLAGS)\ $(call LIB_LINK_SONAME,$(EngineSoName)) $(call LIB_LINK_RPATH,lib) -LINK_ENGINE_LIBS = $(LINK_FIREBIRD_LIBS) $(FIREBIRD_LIBRARY_LINK) $(ICU_LIBS) +LINK_ENGINE_LIBS = $(LINK_FIREBIRD_LIBS) $(FIREBIRD_LIBRARY_LINK) LINK_UDRENG = $(LIB_LINK) $(LINK_UDRENG_SYMBOLS) $(LIB_LINK_OPTIONS) $(call LIB_LINK_RPATH,lib) $(UNDEF_FLAGS) LINK_UDRENG_LIBS = -L$(LIB) $(SO_LINK_LIBS) Modified: firebird/trunk/builds/posix/prefix.aix_powerpc =================================================================== --- firebird/trunk/builds/posix/prefix.aix_powerpc 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/builds/posix/prefix.aix_powerpc 2011-08-02 11:54:30 UTC (rev 53367) @@ -51,10 +51,6 @@ # Additional -blibpath options are not additive! All paths must be provided as a colon separated list. LIB_PATH_OPTS= -Wl,-blibpath:@FB_LIBDIR@:@FB_INTLDIR@:/usr/local/lib:/usr/lib:/lib:$(GCC_RUNTIME) -ifeq ($(STD_ICU),true) - ICU_LIBS= -L/usr/local/lib -licuuc -endif - # non-firebird libraries have .a extension SHRLIB_FOREIGN_EXT=a Modified: firebird/trunk/builds/posix/prefix.aix_powerpc_xlc =================================================================== --- firebird/trunk/builds/posix/prefix.aix_powerpc_xlc 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/builds/posix/prefix.aix_powerpc_xlc 2011-08-02 11:54:30 UTC (rev 53367) @@ -57,10 +57,6 @@ # Additional -blibpath options are not additive! All paths must be provided as a colon separated list. LIB_PATH_OPTS= -blibpath:@FB_LIBDIR@:@FB_INTLDIR@:/usr/local/lib:/usr/lib:/lib -ifeq ($(STD_ICU),true) - ICU_LIBS= -L/usr/local/lib -licuuc -endif - # non-firebird libraries have .a extension SHRLIB_FOREIGN_EXT=a Modified: firebird/trunk/builds/posix/prefix.hpux_aCC =================================================================== --- firebird/trunk/builds/posix/prefix.hpux_aCC 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/builds/posix/prefix.hpux_aCC 2011-08-02 11:54:30 UTC (rev 53367) @@ -81,11 +81,8 @@ # link options for HP-UX linker, /usr/bin/ld LINK_OPTS= $(LDFLAGS) $(THR_FLAGS) $(UNDEF_FLAGS) $(LIB_PATH_OPTS) -AA +e -Wl,+concatrpath -LINK_LIBS+= $(ICU_LIBS) LIB_LINK_OPTIONS= $(LDFLAGS) $(THR_FLAGS) -b +e -Wl,+concatrpath -LINK_UDF_LIBS+=$(ICU_LIBS) - # From original HPUX prefix file LIB_LINK_RPATH= -Wl,+b,$(1) LIB_LINK_SONAME= -Wl,+h,$(1) Modified: firebird/trunk/builds/posix/prefix.mingw =================================================================== --- firebird/trunk/builds/posix/prefix.mingw 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/builds/posix/prefix.mingw 2011-08-02 11:54:30 UTC (rev 53367) @@ -66,4 +66,4 @@ LINK_UDF_LIBS = # Special options for trace plugin link -LINK_TRACE_LIBS = -L$(LIB) $(SO_LINK_LIBS) $(ICU_LIBS) +LINK_TRACE_LIBS = -L$(LIB) $(SO_LINK_LIBS) Modified: firebird/trunk/src/common/unicode_util.cpp =================================================================== --- firebird/trunk/src/common/unicode_util.cpp 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/src/common/unicode_util.cpp 2011-08-02 11:54:30 UTC (rev 53367) @@ -37,46 +37,45 @@ #include "../common/classes/init.h" #include "../common/classes/objects_array.h" #include "../common/classes/rwlock.h" +#include "../common/StatusHolder.h" #include <unicode/ustring.h> #include <unicode/utrans.h> #include <unicode/uchar.h> -#include <unicode/ucnv.h> #include <unicode/ucol.h> using namespace Firebird; +namespace { +#if defined(WIN_NT) +const char* const inTemplate = "icuin%d%d.dll"; +const char* const ucTemplate = "icuuc%d%d.dll"; +#elif defined(DARWIN) +const char* const inTemplate = "/Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicui18n.dylib"; +const char* const ucTemplate = "/Library/Frameworks/Firebird.framework/versions/A/Libraries/libicuuc.dylib"; +#elif defined(HPUX) +const char* const inTemplate = "libicui18n.sl.%d%d"; +const char* const ucTemplate = "libicuuc.sl.%d%d"; +#else +const char* const inTemplate = "libicui18n.so.%d%d"; +const char* const ucTemplate = "libicuuc.so.%d%d"; +#endif -namespace Jrd { - - -const char* const UnicodeUtil::DEFAULT_ICU_VERSION = - STRINGIZE(U_ICU_VERSION_MAJOR_NUM)"."STRINGIZE(U_ICU_VERSION_MINOR_NUM); - - -// encapsulate ICU collations libraries -struct UnicodeUtil::ICU +// encapsulate ICU library +struct BaseICU { private: - ICU(const ICU&); // not implemented - ICU& operator =(const ICU&); // not implemented + BaseICU(const BaseICU&); // not implemented + BaseICU& operator =(const BaseICU&); // not implemented public: - ICU(int aMajorVersion, int aMinorVersion) + BaseICU(int aMajorVersion, int aMinorVersion) : majorVersion(aMajorVersion), - minorVersion(aMinorVersion), - inModule(NULL), - ucModule(NULL) + minorVersion(aMinorVersion) { } - ~ICU() - { - delete ucModule; - delete inModule; - } - template <typename T> void getEntryPoint(const char* name, ModuleLoader::Module* module, T& ptr) { string symbol; @@ -97,11 +96,39 @@ int majorVersion; int minorVersion; + + void (U_EXPORT2 *uInit)(UErrorCode* status); +}; +} + +namespace Jrd { + + +const char* const UnicodeUtil::DEFAULT_ICU_VERSION = + STRINGIZE(U_ICU_VERSION_MAJOR_NUM)"."STRINGIZE(U_ICU_VERSION_MINOR_NUM); + + +// encapsulate ICU collations libraries +struct UnicodeUtil::ICU : public BaseICU +{ +public: + ICU(int aMajorVersion, int aMinorVersion) + : BaseICU(aMajorVersion, aMinorVersion), + inModule(NULL), + ucModule(NULL) + { + } + + ~ICU() + { + delete ucModule; + delete inModule; + } + ModuleLoader::Module* inModule; ModuleLoader::Module* ucModule; UVersionInfo collVersion; - void (U_EXPORT2 *uInit)(UErrorCode* status); void (U_EXPORT2 *uVersionToString)(UVersionInfo versionArray, char* versionString); int32_t (U_EXPORT2 *ulocCountAvailable)(); @@ -143,6 +170,77 @@ }; +// encapsulate ICU conversion library +struct ImplementConversionICU : public UnicodeUtil::ConversionICU, BaseICU +{ +public: + ImplementConversionICU(int aMajorVersion, int aMinorVersion) + : BaseICU(aMajorVersion, aMinorVersion), + module(NULL) + { + PathName filename; + filename.printf(ucTemplate, aMajorVersion, aMinorVersion); + + module = ModuleLoader::fixAndLoadModule(filename); + if (!module) + { + //(Arg::Gds(isc_random) << "Missing library" << + // Arg::Gds(isc_random) << filename).raise(); + // Instead raise 'empty' exception in order to ignore "Missing library" later + LongJump::raise(); + } + + try + { + getEntryPoint("u_init", module, uInit); + } + catch (const status_exception&) + { } + + getEntryPoint("ucnv_open", module, ucnv_open); + getEntryPoint("ucnv_close", module, ucnv_close); + getEntryPoint("ucnv_fromUChars", module, ucnv_fromUChars); + getEntryPoint("u_tolower", module, u_tolower); + getEntryPoint("u_toupper", module, u_toupper); + getEntryPoint("u_strCompare", module, u_strCompare); + getEntryPoint("u_countChar32", module, u_countChar32); + getEntryPoint("utf8_nextCharSafeBody", module, utf8_nextCharSafeBody); + + getEntryPoint("UCNV_FROM_U_CALLBACK_STOP", module, UCNV_FROM_U_CALLBACK_STOP); + getEntryPoint("UCNV_TO_U_CALLBACK_STOP", module, UCNV_TO_U_CALLBACK_STOP); + getEntryPoint("ucnv_fromUnicode", module, ucnv_fromUnicode); + getEntryPoint("ucnv_toUnicode", module, ucnv_toUnicode); + getEntryPoint("ucnv_getInvalidChars", module, ucnv_getInvalidChars); + getEntryPoint("ucnv_getMaxCharSize", module, ucnv_getMaxCharSize); + getEntryPoint("ucnv_getMinCharSize", module, ucnv_getMinCharSize); + getEntryPoint("ucnv_setFromUCallBack", module, ucnv_setFromUCallBack); + getEntryPoint("ucnv_setToUCallBack", module, ucnv_setToUCallBack); + + if (uInit) + { + UErrorCode status = U_ZERO_ERROR; + uInit(&status); + if (status != U_ZERO_ERROR) + { + string diag; + diag.printf("u_init() error %d", status); + (Arg::Gds(isc_random) << diag).raise(); + } + } + } + + ~ImplementConversionICU() + { + delete module; + } + + ModuleLoader::Module* module; +}; + +static ImplementConversionICU* convIcu = 0; +static GlobalPtr<Mutex> convIcuMutex; + + // cache ICU module instances to not load and unload many times class UnicodeUtil::ICUModules { @@ -224,15 +322,16 @@ return INTL_BAD_KEY_LENGTH; UErrorCode status = U_ZERO_ERROR; - UConverter* conv = ucnv_open("BOCU-1", &status); + ConversionICU& cIcu(getConversionICU()); + UConverter* conv = cIcu.ucnv_open("BOCU-1", &status); fb_assert(U_SUCCESS(status)); - const int32_t len = ucnv_fromUChars(conv, reinterpret_cast<char*>(dst), dstLen, + const int32_t len = cIcu.ucnv_fromUChars(conv, reinterpret_cast<char*>(dst), dstLen, // safe cast - alignment not changed reinterpret_cast<const UChar*>(src), srcLen / sizeof(*src), &status); fb_assert(U_SUCCESS(status)); - ucnv_close(conv); + cIcu.ucnv_close(conv); return len; } @@ -278,6 +377,7 @@ dstLen /= sizeof(*dst); ULONG n = 0; + ConversionICU& cIcu(getConversionICU()); for (ULONG i = 0; i < srcLen;) { @@ -285,7 +385,7 @@ U16_NEXT(src, i, srcLen, c); if (!exceptions) - c = u_tolower(c); + c = cIcu.u_tolower(c); else { const ULONG* p = exceptions; @@ -293,7 +393,7 @@ ++p; if (*p == 0) - c = u_tolower(c); + c = cIcu.u_tolower(c); } bool error; @@ -344,6 +444,7 @@ dstLen /= sizeof(*dst); ULONG n = 0; + ConversionICU& cIcu(getConversionICU()); for (ULONG i = 0; i < srcLen;) { @@ -351,7 +452,7 @@ U16_NEXT(src, i, srcLen, c); if (!exceptions) - c = u_toupper(c); + c = cIcu.u_toupper(c); else { const ULONG* p = exceptions; @@ -359,7 +460,7 @@ ++p; if (*p == 0) - c = u_toupper(c); + c = cIcu.u_toupper(c); } bool error; @@ -453,6 +554,7 @@ const USHORT* const dstStart = dst; const USHORT* const dstEnd = dst + dstLen / sizeof(*dst); + ConversionICU& cIcu(getConversionICU()); for (ULONG i = 0; i < srcLen; ) { @@ -471,7 +573,7 @@ { *err_position = i - 1; - c = utf8_nextCharSafeBody(src, reinterpret_cast<int32_t*>(&i), srcLen, c, -1); + c = cIcu.utf8_nextCharSafeBody(src, reinterpret_cast<int32_t*>(&i), srcLen, c, -1); if (c < 0) { @@ -618,7 +720,7 @@ *error_flag = false; // safe casts - alignment not changed - int32_t cmp = u_strCompare(reinterpret_cast<const UChar*>(str1), len1 / sizeof(*str1), + int32_t cmp = getConversionICU().u_strCompare(reinterpret_cast<const UChar*>(str1), len1 / sizeof(*str1), reinterpret_cast<const UChar*>(str2), len2 / sizeof(*str2), true); return (cmp < 0 ? -1 : (cmp > 0 ? 1 : 0)); @@ -629,7 +731,7 @@ { fb_assert(len % sizeof(*str) == 0); // safe cast - alignment not changed - return u_countChar32(reinterpret_cast<const UChar*>(str), len / sizeof(*str)); + return getConversionICU().u_countChar32(reinterpret_cast<const UChar*>(str), len / sizeof(*str)); } @@ -687,6 +789,7 @@ { fb_assert(str != NULL); + ConversionICU& cIcu(getConversionICU()); for (ULONG i = 0; i < len; ) { UChar32 c = str[i++]; @@ -695,7 +798,7 @@ { const ULONG save_i = i - 1; - c = utf8_nextCharSafeBody(str, reinterpret_cast<int32_t*>(&i), len, c, -1); + c = cIcu.utf8_nextCharSafeBody(str, reinterpret_cast<int32_t*>(&i), len, c, -1); if (c < 0) { @@ -762,20 +865,6 @@ UnicodeUtil::ICU* UnicodeUtil::loadICU(const Firebird::string& icuVersion, const Firebird::string& configInfo) { -#if defined(WIN_NT) - const char* const inTemplate = "icuin%d%d.dll"; - const char* const ucTemplate = "icuuc%d%d.dll"; -#elif defined(DARWIN) - const char* const inTemplate = "/Library/Frameworks/Firebird.framework/Versions/A/Libraries/libicui18n.dylib"; - const char* const ucTemplate = "/Library/Frameworks/Firebird.framework/versions/A/Libraries/libicuuc.dylib"; -#elif defined(HPUX) - const char* const inTemplate = "libicui18n.sl.%d%d"; - const char* const ucTemplate = "libicuuc.sl.%d%d"; -#else - const char* const inTemplate = "libicui18n.so.%d%d"; - const char* const ucTemplate = "libicuuc.so.%d%d"; -#endif - ObjectsArray<string> versions; getVersions(configInfo, versions); @@ -916,6 +1005,56 @@ } +UnicodeUtil::ConversionICU& UnicodeUtil::getConversionICU() +{ + if (convIcu) + { + return *convIcu; + } + + MutexLockGuard g(convIcuMutex); + + if (convIcu) + { + return *convIcu; + } + + LocalStatus lastError; + string version; + int majorArray[] = {4, 3, 5, 6, 0}; + for (int* major = majorArray; *major; ++major) + { + for (int minor = 20; --minor; ) /* from 19 down to 0 */ + { + try + { + convIcu = FB_NEW(*getDefaultMemoryPool()) ImplementConversionICU(*major, minor); + return *convIcu; + } + catch (const LongJump&) { } + catch (const Exception& ex) + { + ex.stuffException(&lastError); + version.printf("Error loading ICU library version %d.%d", *major, minor); + } + } + } + + if (!lastError.isSuccess()) + { + (Arg::Gds(isc_random) << "Could not find acceptable ICU library" + << Arg::StatusVector(lastError.get())).raise(); + } + else + { + (Arg::Gds(isc_random) << "Could not find acceptable ICU library").raise(); + } + + // compiler warning silencer + return *convIcu; +} + + bool UnicodeUtil::getCollVersion(const Firebird::string& icuVersion, const Firebird::string& configInfo, Firebird::string& collVersion) { @@ -1128,6 +1267,7 @@ // Remove last bytes of key if they are start of a contraction // to correctly find in the index. + ConversionICU& cIcu(getConversionICU()); for (int i = 0; i < contractionsCount; ++i) { UChar str[10]; @@ -1140,7 +1280,7 @@ --len; // safe cast - alignment not changed - if (u_strCompare(str, len, reinterpret_cast<const UChar*>(src) + srcLen - len, len, true) == 0) + if (cIcu.u_strCompare(str, len, reinterpret_cast<const UChar*>(src) + srcLen - len, len, true) == 0) { srcLen -= len; break; Modified: firebird/trunk/src/common/unicode_util.h =================================================================== --- firebird/trunk/src/common/unicode_util.h 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/src/common/unicode_util.h 2011-08-02 11:54:30 UTC (rev 53367) @@ -30,6 +30,7 @@ #include "intlobj_new.h" #include "../common/IntlUtil.h" #include "../common/os/mod_loader.h" +#include <unicode/ucnv.h> struct UCollator; struct USet; @@ -42,9 +43,85 @@ struct ICU; public: + // encapsulate ICU conversion library + struct ConversionICU + { + UConverter* (U_EXPORT2* ucnv_open) (const char* converterName, UErrorCode* err); + void (U_EXPORT2* ucnv_close) (UConverter *converter); + int32_t (U_EXPORT2* ucnv_fromUChars) (UConverter *cnv, + char *dest, int32_t destCapacity, + const UChar *src, int32_t srcLength, + UErrorCode *pErrorCode); + + UChar32 (U_EXPORT2* u_tolower) (UChar32 c); + UChar32 (U_EXPORT2* u_toupper) (UChar32 c); + int32_t (U_EXPORT2* u_strCompare) (const UChar* s1, int32_t length1, + const UChar* s2, int32_t length2, UBool codePointOrder); + int32_t (U_EXPORT2* u_countChar32) (const UChar* s, int32_t length); + + UChar32 (U_EXPORT2* utf8_nextCharSafeBody) (const uint8_t* s, int32_t* pi, int32_t length, UChar32 c, UBool strict); + + void (U_EXPORT2* UCNV_FROM_U_CALLBACK_STOP) ( + const void *context, + UConverterFromUnicodeArgs *fromUArgs, + const UChar* codeUnits, + int32_t length, + UChar32 codePoint, + UConverterCallbackReason reason, + UErrorCode * err); + void (U_EXPORT2* UCNV_TO_U_CALLBACK_STOP) ( + const void *context, + UConverterToUnicodeArgs *toUArgs, + const char* codeUnits, + int32_t length, + UConverterCallbackReason reason, + UErrorCode * err); + + void (U_EXPORT2* ucnv_setToUCallBack) ( + UConverter * converter, + UConverterToUCallback newAction, + const void* newContext, + UConverterToUCallback *oldAction, + const void** oldContext, + UErrorCode * err); + void (U_EXPORT2* ucnv_setFromUCallBack) ( + UConverter * converter, + UConverterFromUCallback newAction, + const void *newContext, + UConverterFromUCallback *oldAction, + const void **oldContext, + UErrorCode * err); + + void (U_EXPORT2* ucnv_fromUnicode) ( + UConverter * converter, + char **target, + const char *targetLimit, + const UChar ** source, + const UChar * sourceLimit, + int32_t* offsets, + UBool flush, + UErrorCode * err); + void (U_EXPORT2* ucnv_toUnicode) ( + UConverter *converter, + UChar **target, + const UChar *targetLimit, + const char **source, + const char *sourceLimit, + int32_t *offsets, + UBool flush, + UErrorCode *err); + + void (U_EXPORT2* ucnv_getInvalidChars) ( + const UConverter *converter, + char *errBytes, + int8_t *len, + UErrorCode *err); + int8_t (U_EXPORT2* ucnv_getMaxCharSize) (const UConverter *converter); + int8_t (U_EXPORT2* ucnv_getMinCharSize) (const UConverter *converter); + }; + static const char* const DEFAULT_ICU_VERSION; -public: class ICUModules; // routines semantically equivalent with intlobj_new.h @@ -72,6 +149,7 @@ static INTL_BOOL utf16WellFormed(ULONG len, const USHORT* str, ULONG* offending_position); static INTL_BOOL utf32WellFormed(ULONG len, const ULONG* str, ULONG* offending_position); + static ConversionICU& getConversionICU(); static ICU* loadICU(const Firebird::string& icuVersion, const Firebird::string& configInfo); static bool getCollVersion(const Firebird::string& icuVersion, const Firebird::string& configInfo, Firebird::string& collVersion); Modified: firebird/trunk/src/intl/cs_icu.cpp =================================================================== --- firebird/trunk/src/intl/cs_icu.cpp 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/src/intl/cs_icu.cpp 2011-08-02 11:54:30 UTC (rev 53367) @@ -29,6 +29,7 @@ #include "cs_icu.h" #include "cv_icu.h" #include <unicode/ucnv.h> +#include "../common/unicode_util.h" static void charset_destroy(charset* cs) @@ -42,7 +43,8 @@ const ASCII* charSetName) { UErrorCode status = U_ZERO_ERROR; - UConverter* conv = ucnv_open(charSetName, &status); + Jrd::UnicodeUtil::ConversionICU& cIcu(Jrd::UnicodeUtil::getConversionICU()); + UConverter* conv = cIcu.ucnv_open(charSetName, &status); if (U_SUCCESS(status)) { @@ -53,8 +55,8 @@ cs->charset_version = CHARSET_VERSION_1; cs->charset_flags |= CHARSET_ASCII_BASED; - cs->charset_min_bytes_per_char = ucnv_getMinCharSize(conv); - cs->charset_max_bytes_per_char = ucnv_getMaxCharSize(conv); + cs->charset_min_bytes_per_char = cIcu.ucnv_getMinCharSize(conv); + cs->charset_max_bytes_per_char = cIcu.ucnv_getMaxCharSize(conv); cs->charset_fn_destroy = charset_destroy; cs->charset_fn_well_formed = NULL; @@ -62,11 +64,11 @@ BYTE* p2 = new BYTE[cs->charset_max_bytes_per_char]; cs->charset_space_character = p2; - cs->charset_space_length = ucnv_fromUChars(conv, reinterpret_cast<char*>(p2), + cs->charset_space_length = cIcu.ucnv_fromUChars(conv, reinterpret_cast<char*>(p2), cs->charset_max_bytes_per_char, &unicodeSpace, 1, &status); fb_assert(U_SUCCESS(status)); - ucnv_close(conv); + cIcu.ucnv_close(conv); CVICU_convert_init(cs); } Modified: firebird/trunk/src/intl/cv_icu.cpp =================================================================== --- firebird/trunk/src/intl/cv_icu.cpp 2011-08-02 09:26:49 UTC (rev 53366) +++ firebird/trunk/src/intl/cv_icu.cpp 2011-08-02 11:54:30 UTC (rev 53367) @@ -29,26 +29,28 @@ #include "ld_proto.h" #include "cv_icu.h" #include <unicode/ucnv.h> +#include "../common/unicode_util.h" static UConverter* create_converter(csconvert* cv, UErrorCode* status) { - UConverter* conv = ucnv_open(cv->csconvert_impl->cs->charset_name, status); + Jrd::UnicodeUtil::ConversionICU& cIcu(Jrd::UnicodeUtil::getConversionICU()); + UConverter* conv = cIcu.ucnv_open(cv->csconvert_impl->cs->charset_name, status); const void* oldContext; UConverterFromUCallback oldFromAction; - ucnv_setFromUCallBack( + cIcu.ucnv_setFromUCallBack( conv, - UCNV_FROM_U_CALLBACK_STOP, + cIcu.UCNV_FROM_U_CALLBACK_STOP, NULL, &oldFromAction, &oldContext, status); UConverterToUCallback oldToAction; - ucnv_setToUCallBack( + cIcu.ucnv_setToUCallBack( conv, - UCNV_TO_U_CALLBACK_STOP, + cIcu.UCNV_TO_U_CALLBACK_STOP, NULL, &oldToAction, &oldContext, @@ -88,7 +90,8 @@ Firebird::Aligner<UChar> alignedSource(src, srcLen); const UChar* source = alignedSource; char* target = reinterpret_cast<char*>(dst); - ucnv_fromUnicode(conv, &target, target + dstLen, &source, + Jrd::UnicodeUtil::ConversionICU& cIcu(Jrd::UnicodeUtil::getConversionICU()); + cIcu.ucnv_fromUnicode(conv, &target, target + dstLen, &source, source + srcLen / sizeof(UChar), NULL, TRUE, &status); *errPosition = (source - alignedSource) * sizeof(UChar); @@ -115,7 +118,7 @@ } } - ucnv_close(conv); + cIcu.ucnv_close(conv); return target - reinterpret_cast<char*>(dst); } @@ -143,7 +146,8 @@ const char* source = reinterpret_cast<const char*>(src); Firebird::OutAligner<UChar> alignedTarget(dst, dstLen); UChar* target = alignedTarget; - ucnv_toUnicode(conv, &target, target + dstLen / sizeof(UChar), &source, + Jrd::UnicodeUtil::ConversionICU& cIcu(Jrd::UnicodeUtil::getConversionICU()); + cIcu.ucnv_toUnicode(conv, &target, target + dstLen / sizeof(UChar), &source, source + srcLen, NULL, TRUE, &status); *errPosition = source - reinterpret_cast<const char*>(src); @@ -164,7 +168,7 @@ status = U_ZERO_ERROR; char errBytes[16]; int8_t errLen = sizeof(errBytes); - ucnv_getInvalidChars(conv, errBytes, &errLen, &status); + cIcu.ucnv_getInvalidChars(conv, errBytes, &errLen, &status); if (!U_SUCCESS(status)) *errCode = CS_CONVERT_ERROR; else @@ -184,7 +188,7 @@ } } - ucnv_close(conv); + cIcu.ucnv_close(conv); return (target - alignedTarget) * sizeof(UChar); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-08-03 03:19:14
|
Revision: 53368 http://firebird.svn.sourceforge.net/firebird/?rev=53368&view=rev Author: firebirds Date: 2011-08-03 03:19:07 +0000 (Wed, 03 Aug 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-08-02 11:54:30 UTC (rev 53367) +++ firebird/trunk/ChangeLog 2011-08-03 03:19:07 UTC (rev 53368) @@ -1,3 +1,30 @@ + 2011-08-02 11:54 alexpeshkoff + M builds/posix/darwin.defaults + M builds/posix/make.defaults + M builds/posix/prefix.aix_powerpc + M builds/posix/prefix.aix_powerpc_xlc + M builds/posix/prefix.hpux_aCC + M builds/posix/prefix.mingw + M src/common/unicode_util.cpp + M src/common/unicode_util.h + M src/intl/cs_icu.cpp + M src/intl/cv_icu.cpp +Enabled use of any available on the target system ICU version for non-collation calls + + 2011-08-02 09:26 alexpeshkoff + M lang_helpers/gds_codes.ftn + M lang_helpers/gds_codes.pas + M src/common/sdl.cpp + M src/include/gen/codetext.h + M src/include/gen/iberror.h + M src/include/gen/msgs.h + M src/include/gen/sql_code.h + M src/include/gen/sql_state.h + M src/msgs/facilities2.sql + M src/msgs/messages2.sql + M src/msgs/system_errors2.sql +Make diagnostics about wrong array subscript a bit better + 2011-07-30 07:14 robocop M src/common/classes/stack.h M src/dsql/DdlNodes.epp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-08-02 11:54:30 UTC (rev 53367) +++ firebird/trunk/src/jrd/build_no.h 2011-08-03 03:19:07 UTC (rev 53368) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29515 + FORMAL BUILD NUMBER:29517 */ -#define PRODUCT_VER_STRING "3.0.0.29515" -#define FILE_VER_STRING "WI-T3.0.0.29515" -#define LICENSE_VER_STRING "WI-T3.0.0.29515" -#define FILE_VER_NUMBER 3, 0, 0, 29515 +#define PRODUCT_VER_STRING "3.0.0.29517" +#define FILE_VER_STRING "WI-T3.0.0.29517" +#define LICENSE_VER_STRING "WI-T3.0.0.29517" +#define FILE_VER_NUMBER 3, 0, 0, 29517 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29515" +#define FB_BUILD_NO "29517" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-08-02 11:54:30 UTC (rev 53367) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-08-03 03:19:07 UTC (rev 53368) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29515 +BuildNum=29517 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-08-04 03:18:39
|
Revision: 53371 http://firebird.svn.sourceforge.net/firebird/?rev=53371&view=rev Author: firebirds Date: 2011-08-04 03:18:32 +0000 (Thu, 04 Aug 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-08-03 12:13:18 UTC (rev 53370) +++ firebird/trunk/ChangeLog 2011-08-04 03:18:32 UTC (rev 53371) @@ -1,3 +1,16 @@ + 2011-08-03 12:13 dimitr + M src/common/ThreadStart.cpp + M src/common/config/config.cpp + M src/common/config/config.h + D src/jrd/os/thd_priority.h + D src/jrd/os/win32/thd_priority.cpp +Cleanup. + + 2011-08-03 12:06 dimitr + M builds/win32/msvc8/engine.vcproj + M builds/win32/msvc9/engine.vcproj +Cleanup. + 2011-08-02 11:54 alexpeshkoff M builds/posix/darwin.defaults M builds/posix/make.defaults Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-08-03 12:13:18 UTC (rev 53370) +++ firebird/trunk/src/jrd/build_no.h 2011-08-04 03:18:32 UTC (rev 53371) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29517 + FORMAL BUILD NUMBER:29519 */ -#define PRODUCT_VER_STRING "3.0.0.29517" -#define FILE_VER_STRING "WI-T3.0.0.29517" -#define LICENSE_VER_STRING "WI-T3.0.0.29517" -#define FILE_VER_NUMBER 3, 0, 0, 29517 +#define PRODUCT_VER_STRING "3.0.0.29519" +#define FILE_VER_STRING "WI-T3.0.0.29519" +#define LICENSE_VER_STRING "WI-T3.0.0.29519" +#define FILE_VER_NUMBER 3, 0, 0, 29519 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29517" +#define FB_BUILD_NO "29519" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-08-03 12:13:18 UTC (rev 53370) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-08-04 03:18:32 UTC (rev 53371) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29517 +BuildNum=29519 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-08-05 03:19:24
|
Revision: 53377 http://firebird.svn.sourceforge.net/firebird/?rev=53377&view=rev Author: firebirds Date: 2011-08-05 03:19:17 +0000 (Fri, 05 Aug 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-08-05 02:21:18 UTC (rev 53376) +++ firebird/trunk/ChangeLog 2011-08-05 03:19:17 UTC (rev 53377) @@ -1,3 +1,18 @@ + 2011-08-05 02:21 asfernandes + M src/common/unicode_util.cpp +Use exception-safe code. + + 2011-08-05 02:10 asfernandes + M src/common/ThreadStart.cpp + M src/jrd/Database.h + M src/jrd/jrd.cpp +Fix build. + + 2011-08-05 02:09 asfernandes + M src/common/unicode_util.cpp + M src/jrd/met.epp +Misc. + 2011-08-03 12:13 dimitr M src/common/ThreadStart.cpp M src/common/config/config.cpp Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-08-05 02:21:18 UTC (rev 53376) +++ firebird/trunk/src/jrd/build_no.h 2011-08-05 03:19:17 UTC (rev 53377) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29519 + FORMAL BUILD NUMBER:29522 */ -#define PRODUCT_VER_STRING "3.0.0.29519" -#define FILE_VER_STRING "WI-T3.0.0.29519" -#define LICENSE_VER_STRING "WI-T3.0.0.29519" -#define FILE_VER_NUMBER 3, 0, 0, 29519 +#define PRODUCT_VER_STRING "3.0.0.29522" +#define FILE_VER_STRING "WI-T3.0.0.29522" +#define LICENSE_VER_STRING "WI-T3.0.0.29522" +#define FILE_VER_NUMBER 3, 0, 0, 29522 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29519" +#define FB_BUILD_NO "29522" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-08-05 02:21:18 UTC (rev 53376) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-08-05 03:19:17 UTC (rev 53377) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29519 +BuildNum=29522 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-08-06 03:18:32
|
Revision: 53380 http://firebird.svn.sourceforge.net/firebird/?rev=53380&view=rev Author: firebirds Date: 2011-08-06 03:18:25 +0000 (Sat, 06 Aug 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-08-05 08:35:45 UTC (rev 53379) +++ firebird/trunk/ChangeLog 2011-08-06 03:18:25 UTC (rev 53380) @@ -1,3 +1,7 @@ + 2011-08-05 08:35 hvlad + M src/common/unicode_util.cpp +Correction : don't miss minor == 0 when trying ICU versions + 2011-08-05 02:21 asfernandes M src/common/unicode_util.cpp Use exception-safe code. Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-08-05 08:35:45 UTC (rev 53379) +++ firebird/trunk/src/jrd/build_no.h 2011-08-06 03:18:25 UTC (rev 53380) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29522 + FORMAL BUILD NUMBER:29523 */ -#define PRODUCT_VER_STRING "3.0.0.29522" -#define FILE_VER_STRING "WI-T3.0.0.29522" -#define LICENSE_VER_STRING "WI-T3.0.0.29522" -#define FILE_VER_NUMBER 3, 0, 0, 29522 +#define PRODUCT_VER_STRING "3.0.0.29523" +#define FILE_VER_STRING "WI-T3.0.0.29523" +#define LICENSE_VER_STRING "WI-T3.0.0.29523" +#define FILE_VER_NUMBER 3, 0, 0, 29523 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29522" +#define FB_BUILD_NO "29523" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-08-05 08:35:45 UTC (rev 53379) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-08-06 03:18:25 UTC (rev 53380) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29522 +BuildNum=29523 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <fir...@us...> - 2011-08-07 03:18:18
|
Revision: 53383 http://firebird.svn.sourceforge.net/firebird/?rev=53383&view=rev Author: firebirds Date: 2011-08-07 03:18:11 +0000 (Sun, 07 Aug 2011) Log Message: ----------- nightly update Modified Paths: -------------- firebird/trunk/ChangeLog firebird/trunk/src/jrd/build_no.h firebird/trunk/src/misc/writeBuildNum.sh Modified: firebird/trunk/ChangeLog =================================================================== --- firebird/trunk/ChangeLog 2011-08-06 07:24:00 UTC (rev 53382) +++ firebird/trunk/ChangeLog 2011-08-07 03:18:11 UTC (rev 53383) @@ -1,3 +1,8 @@ + 2011-08-06 05:49 robocop + M src/common/unicode_util.cpp + M src/jrd/par.cpp +Misc. + 2011-08-05 08:35 hvlad M src/common/unicode_util.cpp Correction : don't miss minor == 0 when trying ICU versions Modified: firebird/trunk/src/jrd/build_no.h =================================================================== --- firebird/trunk/src/jrd/build_no.h 2011-08-06 07:24:00 UTC (rev 53382) +++ firebird/trunk/src/jrd/build_no.h 2011-08-07 03:18:11 UTC (rev 53383) @@ -3,16 +3,16 @@ *** DO NOT EDIT *** TO CHANGE ANY INFORMATION IN HERE PLEASE EDIT src/misc/writeBuildNum.sh - FORMAL BUILD NUMBER:29523 + FORMAL BUILD NUMBER:29524 */ -#define PRODUCT_VER_STRING "3.0.0.29523" -#define FILE_VER_STRING "WI-T3.0.0.29523" -#define LICENSE_VER_STRING "WI-T3.0.0.29523" -#define FILE_VER_NUMBER 3, 0, 0, 29523 +#define PRODUCT_VER_STRING "3.0.0.29524" +#define FILE_VER_STRING "WI-T3.0.0.29524" +#define LICENSE_VER_STRING "WI-T3.0.0.29524" +#define FILE_VER_NUMBER 3, 0, 0, 29524 #define FB_MAJOR_VER "3" #define FB_MINOR_VER "0" #define FB_REV_NO "0" -#define FB_BUILD_NO "29523" +#define FB_BUILD_NO "29524" #define FB_BUILD_TYPE "T" #define FB_BUILD_SUFFIX "Firebird 3.0 Unstable" Modified: firebird/trunk/src/misc/writeBuildNum.sh =================================================================== --- firebird/trunk/src/misc/writeBuildNum.sh 2011-08-06 07:24:00 UTC (rev 53382) +++ firebird/trunk/src/misc/writeBuildNum.sh 2011-08-07 03:18:11 UTC (rev 53383) @@ -9,7 +9,7 @@ MajorVer=3 MinorVer=0 RevNo=0 -BuildNum=29523 +BuildNum=29524 NowAt=`pwd` cd `dirname $0` This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |