|
From: <asf...@us...> - 2015-01-13 14:43:27
|
Revision: 60492
http://sourceforge.net/p/firebird/code/60492
Author: asfernandes
Date: 2015-01-13 14:43:24 +0000 (Tue, 13 Jan 2015)
Log Message:
-----------
Make UDR StatusType customizable.
Modified Paths:
--------------
firebird/trunk/examples/udr/UdrCppExample.cpp
firebird/trunk/src/include/firebird/UdrCppEngine.h
firebird/trunk/src/plugins/udr_engine/UdrEngine.cpp
Modified: firebird/trunk/examples/udr/UdrCppExample.cpp
===================================================================
--- firebird/trunk/examples/udr/UdrCppExample.cpp 2015-01-13 12:53:48 UTC (rev 60491)
+++ firebird/trunk/examples/udr/UdrCppExample.cpp 2015-01-13 14:43:24 UTC (rev 60492)
@@ -20,6 +20,8 @@
* Contributor(s): ______________________________________.
*/
+#define FB_UDR_STATUS_TYPE ::Firebird::ThrowStatusWrapper
+
#include "ibase.h"
#include "firebird/UdrCppEngine.h"
#include <assert.h>
Modified: firebird/trunk/src/include/firebird/UdrCppEngine.h
===================================================================
--- firebird/trunk/src/include/firebird/UdrCppEngine.h 2015-01-13 12:53:48 UTC (rev 60491)
+++ firebird/trunk/src/include/firebird/UdrCppEngine.h 2015-01-13 14:43:24 UTC (rev 60492)
@@ -23,6 +23,10 @@
#ifndef FIREBIRD_UDR_CPP_ENGINE
#define FIREBIRD_UDR_CPP_ENGINE
+#ifndef FB_UDR_STATUS_TYPE
+#error FB_UDR_STATUS_TYPE must be defined with the Status class before UdrCppEngine.h inclusion.
+#endif
+
#include "./UdrEngine.h"
#include "./Message.h"
#ifndef JRD_IBASE_H
@@ -32,7 +36,6 @@
#include <string.h>
-//// TODO: Make StatusType customizable.
namespace Firebird
{
namespace Udr
@@ -45,9 +48,9 @@
{ \
class Impl; \
\
- static ::Firebird::Udr::FunctionFactoryImpl<Impl> factory(#name); \
+ static ::Firebird::Udr::FunctionFactoryImpl<Impl, FB_UDR_STATUS_TYPE> factory(#name); \
\
- class Impl : public ::Firebird::Udr::Function<Impl> \
+ class Impl : public ::Firebird::Udr::Function<Impl, FB_UDR_STATUS_TYPE> \
{ \
public: \
FB__UDR_COMMON_IMPL
@@ -57,13 +60,13 @@
}
#define FB_UDR_EXECUTE_FUNCTION \
- void execute(::Firebird::ThrowStatusWrapper* status, ::Firebird::IExternalContext* context, \
+ void execute(FB_UDR_STATUS_TYPE* status, ::Firebird::IExternalContext* context, \
void* in, void* out) \
{ \
internalExecute(status, context, (InMessage::Type*) in, (OutMessage::Type*) out); \
} \
\
- void internalExecute(::Firebird::ThrowStatusWrapper* status, ::Firebird::IExternalContext* context, \
+ void internalExecute(FB_UDR_STATUS_TYPE* status, ::Firebird::IExternalContext* context, \
InMessage::Type* in, OutMessage::Type* out)
@@ -72,9 +75,9 @@
{ \
class Impl; \
\
- static ::Firebird::Udr::ProcedureFactoryImpl<Impl> factory(#name); \
+ static ::Firebird::Udr::ProcedureFactoryImpl<Impl, FB_UDR_STATUS_TYPE> factory(#name); \
\
- class Impl : public ::Firebird::Udr::Procedure<Impl> \
+ class Impl : public ::Firebird::Udr::Procedure<Impl, FB_UDR_STATUS_TYPE> \
{ \
public: \
FB__UDR_COMMON_IMPL
@@ -85,27 +88,27 @@
}
#define FB_UDR_EXECUTE_PROCEDURE \
- ::Firebird::IExternalResultSet* open(::Firebird::ThrowStatusWrapper* status, \
+ ::Firebird::IExternalResultSet* open(FB_UDR_STATUS_TYPE* status, \
::Firebird::IExternalContext* context, void* in, void* out) \
{ \
return new ResultSet(status, context, this, (InMessage::Type*) in, (OutMessage::Type*) out); \
} \
\
- class ResultSet : public ::Firebird::Udr::ResultSet<ResultSet, Impl, InMessage, OutMessage> \
+ class ResultSet : public ::Firebird::Udr::ResultSet<ResultSet, Impl, InMessage, OutMessage, FB_UDR_STATUS_TYPE> \
{ \
public: \
- ResultSet(::Firebird::ThrowStatusWrapper* status, ::Firebird::IExternalContext* context, \
+ ResultSet(FB_UDR_STATUS_TYPE* status, ::Firebird::IExternalContext* context, \
Impl* const procedure, InMessage::Type* const in, OutMessage::Type* const out) \
- : ::Firebird::Udr::ResultSet<ResultSet, Impl, InMessage, OutMessage>( \
+ : ::Firebird::Udr::ResultSet<ResultSet, Impl, InMessage, OutMessage, FB_UDR_STATUS_TYPE>( \
context, procedure, in, out)
#define FB_UDR_FETCH_PROCEDURE \
- FB_BOOLEAN fetch(::Firebird::ThrowStatusWrapper* status) \
+ FB_BOOLEAN fetch(FB_UDR_STATUS_TYPE* status) \
{ \
return (FB_BOOLEAN) internalFetch(status); \
} \
\
- bool internalFetch(::Firebird::ThrowStatusWrapper* status)
+ bool internalFetch(FB_UDR_STATUS_TYPE* status)
#define FB_UDR_BEGIN_TRIGGER(name) \
@@ -113,9 +116,9 @@
{ \
class Impl; \
\
- static ::Firebird::Udr::TriggerFactoryImpl<Impl> factory(#name); \
+ static ::Firebird::Udr::TriggerFactoryImpl<Impl, FB_UDR_STATUS_TYPE> factory(#name); \
\
- class Impl : public ::Firebird::Udr::Trigger<Impl> \
+ class Impl : public ::Firebird::Udr::Trigger<Impl, FB_UDR_STATUS_TYPE> \
{ \
public: \
FB__UDR_COMMON_IMPL
@@ -125,20 +128,20 @@
}
#define FB_UDR_EXECUTE_TRIGGER \
- void execute(::Firebird::ThrowStatusWrapper* status, ::Firebird::IExternalContext* context, \
+ void execute(FB_UDR_STATUS_TYPE* status, ::Firebird::IExternalContext* context, \
unsigned int action, void* oldFields, void* newFields) \
{ \
internalExecute(status, context, action, \
(FieldsMessage::Type*) oldFields, (FieldsMessage::Type*) newFields); \
} \
\
- void internalExecute(::Firebird::ThrowStatusWrapper* status, ::Firebird::IExternalContext* context, \
+ void internalExecute(FB_UDR_STATUS_TYPE* status, ::Firebird::IExternalContext* context, \
unsigned int action, \
FieldsMessage::Type* oldFields, FieldsMessage::Type* newFields)
#define FB_UDR_CONSTRUCTOR \
- Impl(::Firebird::ThrowStatusWrapper* const status, ::Firebird::IExternalContext* const context, \
+ Impl(FB_UDR_STATUS_TYPE* const status, ::Firebird::IExternalContext* const context, \
::Firebird::IRoutineMetadata* const metadata__) \
: master(context->getMaster()), \
metadata(metadata__)
@@ -162,11 +165,11 @@
struct name \
{ \
typedef unsigned char Type; \
- static void setup(::Firebird::ThrowStatusWrapper*, ::Firebird::IMetadataBuilder*) {} \
+ static void setup(FB_UDR_STATUS_TYPE*, ::Firebird::IMetadataBuilder*) {} \
}
-template <typename T> class Procedure;
+template <typename T, typename StatusType> class Procedure;
class Helper
@@ -218,8 +221,8 @@
};
-template <typename This, typename Procedure, typename InMessage, typename OutMessage>
-class ResultSet : public IExternalResultSetImpl<This, ThrowStatusWrapper>, public Helper
+template <typename This, typename Procedure, typename InMessage, typename OutMessage, typename StatusType>
+class ResultSet : public IExternalResultSetImpl<This, StatusType>, public Helper
{
public:
ResultSet(IExternalContext* aContext, Procedure* aProcedure,
@@ -245,8 +248,8 @@
};
-template <typename This>
-class Function : public IExternalFunctionImpl<This, ThrowStatusWrapper>, public Helper
+template <typename This, typename StatusType>
+class Function : public IExternalFunctionImpl<This, StatusType>, public Helper
{
public:
FB__UDR_COMMON_TYPE(InMessage);
@@ -257,15 +260,15 @@
delete static_cast<This*>(this);
}
- void getCharSet(ThrowStatusWrapper* /*status*/, IExternalContext* /*context*/,
+ void getCharSet(StatusType* /*status*/, IExternalContext* /*context*/,
char* /*name*/, unsigned /*nameSize*/)
{
}
};
-template <typename This>
-class Procedure : public IExternalProcedureImpl<This, ThrowStatusWrapper>, public Helper
+template <typename This, typename StatusType>
+class Procedure : public IExternalProcedureImpl<This, StatusType>, public Helper
{
public:
FB__UDR_COMMON_TYPE(InMessage);
@@ -276,15 +279,15 @@
delete static_cast<This*>(this);
}
- void getCharSet(ThrowStatusWrapper* /*status*/, IExternalContext* /*context*/,
+ void getCharSet(StatusType* /*status*/, IExternalContext* /*context*/,
char* /*name*/, unsigned /*nameSize*/)
{
}
};
-template <typename This>
-class Trigger : public IExternalTriggerImpl<This, ThrowStatusWrapper>, public Helper
+template <typename This, typename StatusType>
+class Trigger : public IExternalTriggerImpl<This, StatusType>, public Helper
{
public:
FB__UDR_COMMON_TYPE(FieldsMessage);
@@ -294,15 +297,15 @@
delete static_cast<This*>(this);
}
- void getCharSet(ThrowStatusWrapper* /*status*/, IExternalContext* /*context*/,
+ void getCharSet(StatusType* /*status*/, IExternalContext* /*context*/,
char* /*name*/, unsigned /*nameSize*/)
{
}
};
-template <typename T> class FunctionFactoryImpl :
- public IUdrFunctionFactoryImpl<FunctionFactoryImpl<T>, ThrowStatusWrapper>
+template <typename T, typename StatusType> class FunctionFactoryImpl :
+ public IUdrFunctionFactoryImpl<FunctionFactoryImpl<T, StatusType>, StatusType>
{
public:
explicit FunctionFactoryImpl(const char* name)
@@ -310,14 +313,14 @@
fbUdrRegFunction(name, this);
}
- void setup(ThrowStatusWrapper* status, IExternalContext* /*context*/,
+ void setup(StatusType* status, IExternalContext* /*context*/,
IRoutineMetadata* /*metadata*/, IMetadataBuilder* in, IMetadataBuilder* out)
{
T::InMessage::setup(status, in);
T::OutMessage::setup(status, out);
}
- IExternalFunction* newItem(ThrowStatusWrapper* status, IExternalContext* context,
+ IExternalFunction* newItem(StatusType* status, IExternalContext* context,
IRoutineMetadata* metadata)
{
return new T(status, context, metadata);
@@ -325,8 +328,8 @@
};
-template <typename T> class ProcedureFactoryImpl :
- public IUdrProcedureFactoryImpl<ProcedureFactoryImpl<T>, ThrowStatusWrapper>
+template <typename T, typename StatusType> class ProcedureFactoryImpl :
+ public IUdrProcedureFactoryImpl<ProcedureFactoryImpl<T, StatusType>, StatusType>
{
public:
explicit ProcedureFactoryImpl(const char* name)
@@ -334,14 +337,14 @@
fbUdrRegProcedure(name, this);
}
- void setup(ThrowStatusWrapper* status, IExternalContext* /*context*/,
+ void setup(StatusType* status, IExternalContext* /*context*/,
IRoutineMetadata* /*metadata*/, IMetadataBuilder* in, IMetadataBuilder* out)
{
T::InMessage::setup(status, in);
T::OutMessage::setup(status, out);
}
- IExternalProcedure* newItem(ThrowStatusWrapper* status, IExternalContext* context,
+ IExternalProcedure* newItem(StatusType* status, IExternalContext* context,
IRoutineMetadata* metadata)
{
return new T(status, context, metadata);
@@ -349,8 +352,8 @@
};
-template <typename T> class TriggerFactoryImpl :
- public IUdrTriggerFactoryImpl<TriggerFactoryImpl<T>, ThrowStatusWrapper>
+template <typename T, typename StatusType> class TriggerFactoryImpl :
+ public IUdrTriggerFactoryImpl<TriggerFactoryImpl<T, StatusType>, StatusType>
{
public:
explicit TriggerFactoryImpl(const char* name)
@@ -358,13 +361,13 @@
fbUdrRegTrigger(name, this);
}
- void setup(ThrowStatusWrapper* status, IExternalContext* /*context*/,
+ void setup(StatusType* status, IExternalContext* /*context*/,
IRoutineMetadata* /*metadata*/, IMetadataBuilder* fields)
{
T::FieldsMessage::setup(status, fields);
}
- IExternalTrigger* newItem(ThrowStatusWrapper* status, IExternalContext* context,
+ IExternalTrigger* newItem(StatusType* status, IExternalContext* context,
IRoutineMetadata* metadata)
{
return new T(status, context, metadata);
Modified: firebird/trunk/src/plugins/udr_engine/UdrEngine.cpp
===================================================================
--- firebird/trunk/src/plugins/udr_engine/UdrEngine.cpp 2015-01-13 12:53:48 UTC (rev 60491)
+++ firebird/trunk/src/plugins/udr_engine/UdrEngine.cpp 2015-01-13 14:43:24 UTC (rev 60492)
@@ -23,7 +23,6 @@
#include "firebird.h"
#include "../jrd/ibase.h"
#include "firebird/UdrEngine.h"
-#include "firebird/UdrCppEngine.h"
#include "firebird/Interface.h"
#include "../common/classes/alloc.h"
#include "../common/classes/array.h"
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|