|
From: <ale...@us...> - 2011-05-19 16:24:55
|
Revision: 52968
http://firebird.svn.sourceforge.net/firebird/?rev=52968&view=rev
Author: alexpeshkoff
Date: 2011-05-19 16:24:46 +0000 (Thu, 19 May 2011)
Log Message:
-----------
Better interfaces hierarchy: all of them are derived from IVersioned
Modified Paths:
--------------
firebird/trunk/examples/udr/UdrCppExample.cpp
firebird/trunk/src/auth/AuthInterface.h
firebird/trunk/src/auth/SecurityDatabase/LegacyServer.cpp
firebird/trunk/src/common/Auth.cpp
firebird/trunk/src/common/Auth.h
firebird/trunk/src/common/StatementMetadata.h
firebird/trunk/src/common/StatusHolder.h
firebird/trunk/src/common/classes/GetPlugins.h
firebird/trunk/src/common/classes/ImplementHelper.h
firebird/trunk/src/common/config/config.h
firebird/trunk/src/common/security.h
firebird/trunk/src/gpre/boot/gpre_meta_boot.cpp
firebird/trunk/src/include/FirebirdExternalApi.h
firebird/trunk/src/include/FirebirdPluginApi.h
firebird/trunk/src/include/Interface.h
firebird/trunk/src/include/ProviderInterface.h
firebird/trunk/src/include/Timer.h
firebird/trunk/src/jrd/EngineInterface.h
firebird/trunk/src/jrd/ExtEngineManager.h
firebird/trunk/src/jrd/UserManagement.cpp
firebird/trunk/src/jrd/UserManagement.h
firebird/trunk/src/jrd/dyn.epp
firebird/trunk/src/jrd/jrd.cpp
firebird/trunk/src/jrd/ntrace.h
firebird/trunk/src/jrd/trace/TraceConfigStorage.h
firebird/trunk/src/jrd/trace/TraceObjects.cpp
firebird/trunk/src/jrd/trace/TraceObjects.h
firebird/trunk/src/remote/client/interface.cpp
firebird/trunk/src/utilities/gsec/gsec.cpp
firebird/trunk/src/utilities/ntrace/PluginLogWriter.h
firebird/trunk/src/utilities/ntrace/TracePluginImpl.h
firebird/trunk/src/yvalve/DistributedTransaction.cpp
firebird/trunk/src/yvalve/MasterImplementation.cpp
firebird/trunk/src/yvalve/MasterImplementation.h
firebird/trunk/src/yvalve/PluginManager.cpp
firebird/trunk/src/yvalve/PluginManager.h
firebird/trunk/src/yvalve/why.cpp
Modified: firebird/trunk/examples/udr/UdrCppExample.cpp
===================================================================
--- firebird/trunk/examples/udr/UdrCppExample.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/examples/udr/UdrCppExample.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -350,7 +350,7 @@
"select data_source from replicate_config where name = ?",
SQL_DIALECT_CURRENT, NULL), statusVector);
- AutoDispose<IMaster> master(funcGetMasterInterface());
+ IMaster* master(funcGetMasterInterface());
AutoDispose<IStatus> status(master->getStatus());
const char* table = metadata->getTriggerTable(status);
Modified: firebird/trunk/src/auth/AuthInterface.h
===================================================================
--- firebird/trunk/src/auth/AuthInterface.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/auth/AuthInterface.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -39,20 +39,22 @@
enum Result {AUTH_SUCCESS, AUTH_CONTINUE, AUTH_FAILED, AUTH_MORE_DATA};
-class IWriter : public Firebird::IDisposable
+class IWriter : public Firebird::IVersioned
{
public:
virtual void FB_CARG reset() = 0;
virtual void FB_CARG add(const char* user, const char* method, const char* details) = 0;
};
+#define FB_AUTH_WRITER_VERSION (FB_VERSIONED_VERSION + 2)
-class IDpbReader : public Firebird::IDisposable
+class IDpbReader : public Firebird::IVersioned
{
public:
virtual int FB_CARG find(UCHAR tag) = 0;
virtual void FB_CARG add(UCHAR tag, const void* bytes, unsigned int count) = 0;
virtual void FB_CARG drop() = 0;
};
+#define FB_AUTH_DPB_READER_VERSION (FB_VERSIONED_VERSION + 3)
class IServer : public Firebird::IPluginBase
{
@@ -75,13 +77,14 @@
};
#define FB_AUTH_CLIENT_VERSION (FB_PLUGIN_VERSION + 3)
-class IUserField : public Firebird::IDisposable
+class IUserField : public Firebird::IVersioned
{
public:
virtual int FB_CARG entered() = 0;
virtual int FB_CARG specified() = 0;
virtual void FB_CARG setEntered(int newValue) = 0;
};
+#define FB_AUTH_FIELD_VERSION (FB_VERSIONED_VERSION + 3)
class ICharUserField : public IUserField
{
@@ -89,6 +92,7 @@
virtual const char* FB_CARG get() = 0;
virtual void FB_CARG set(const char* newValue) = 0;
};
+#define FB_AUTH_CHAR_FIELD_VERSION (FB_AUTH_FIELD_VERSION + 2)
class IIntUserField : public IUserField
{
@@ -96,8 +100,9 @@
virtual int FB_CARG get() = 0;
virtual void FB_CARG set(int newValue) = 0;
};
+#define FB_AUTH_INT_FIELD_VERSION (FB_AUTH_FIELD_VERSION + 2)
-class IUser : public Firebird::IDisposable
+class IUser : public Firebird::IVersioned
{
public:
virtual int FB_CARG operation() = 0;
@@ -116,14 +121,16 @@
virtual void FB_CARG clear() = 0;
};
+#define FB_AUTH_USER_VERSION (FB_VERSIONED_VERSION + 11)
-class IListUsers : public Firebird::IDisposable
+class IListUsers : public Firebird::IVersioned
{
public:
virtual void FB_CARG list(IUser* user) = 0;
};
+#define FB_AUTH_LIST_USERS_VERSION (FB_VERSIONED_VERSION + 1)
-class ILogonInfo : public Firebird::IDisposable
+class ILogonInfo : public Firebird::IVersioned
{
public:
virtual const char* FB_CARG name() = 0;
@@ -132,6 +139,7 @@
virtual const char* FB_CARG networkProtocol() = 0;
virtual const char* FB_CARG remoteAddress() = 0;
};
+#define FB_AUTH_LOGON_INFO_VERSION (FB_VERSIONED_VERSION + 5)
class IManagement : public Firebird::IPluginBase
{
Modified: firebird/trunk/src/auth/SecurityDatabase/LegacyServer.cpp
===================================================================
--- firebird/trunk/src/auth/SecurityDatabase/LegacyServer.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/auth/SecurityDatabase/LegacyServer.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -122,7 +122,7 @@
namespace Auth {
-class SecurityDatabase : public Firebird::StdIface<Firebird::ITimer, FB_I_TIMER_VERSION>
+class SecurityDatabase : public Firebird::RefCntIface<Firebird::ITimer, FB_TIMER_VERSION>
{
public:
Result verify(IWriter* authBlock, Firebird::ClumpletReader& originalDpb);
Modified: firebird/trunk/src/common/Auth.cpp
===================================================================
--- firebird/trunk/src/common/Auth.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/common/Auth.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -33,7 +33,8 @@
namespace Auth {
WriterImplementation::WriterImplementation(bool svcFlag)
- : body(getPool()), sequence(0), tag(svcFlag ? isc_spb_auth_block : isc_dpb_auth_block)
+ : body(*getDefaultMemoryPool()),
+ sequence(0), tag(svcFlag ? isc_spb_auth_block : isc_dpb_auth_block)
{ }
void WriterImplementation::store(Firebird::ClumpletWriter& to)
Modified: firebird/trunk/src/common/Auth.h
===================================================================
--- firebird/trunk/src/common/Auth.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/common/Auth.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -41,7 +41,7 @@
bool legacy(const char* nm);
-class WriterImplementation : public Firebird::StackIface<IWriter>
+class WriterImplementation : public Firebird::AutoIface<IWriter, FB_AUTH_WRITER_VERSION>
{
public:
WriterImplementation(bool svcFlag);
@@ -58,7 +58,7 @@
unsigned char tag;
};
-class DpbImplementation : public Firebird::StackIface<IDpbReader>
+class DpbImplementation : public Firebird::AutoIface<IDpbReader, FB_AUTH_DPB_READER_VERSION>
{
public:
DpbImplementation(Firebird::ClumpletWriter& base);
Modified: firebird/trunk/src/common/StatementMetadata.h
===================================================================
--- firebird/trunk/src/common/StatementMetadata.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/common/StatementMetadata.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -30,6 +30,7 @@
#include "../common/classes/array.h"
#include "../common/classes/fb_string.h"
#include "../common/classes/objects_array.h"
+#include "../common/classes/ImplementHelper.h"
namespace Firebird {
@@ -38,7 +39,8 @@
class StatementMetadata : public PermanentStorage
{
public:
- class Parameters : public IParametersMetadata, public PermanentStorage
+ class Parameters : public VersionedIface<IParametersMetadata, FB_PARAMETERS_METADATA_VERSION>,
+ public PermanentStorage
{
public:
struct Item : public PermanentStorage
Modified: firebird/trunk/src/common/StatusHolder.h
===================================================================
--- firebird/trunk/src/common/StatusHolder.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/common/StatusHolder.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -80,8 +80,11 @@
ISC_STATUS vector[40]; // FixMe - may be a kind of dynamic storage will be better?
};
-class LocalStatus : public StackIface<BaseStatus>
+class LocalStatus : public AutoIface<BaseStatus, FB_STATUS_VERSION>
{
+public:
+ virtual void FB_CARG dispose()
+ { }
};
class StatusHolder
Modified: firebird/trunk/src/common/classes/GetPlugins.h
===================================================================
--- firebird/trunk/src/common/classes/GetPlugins.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/common/classes/GetPlugins.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -1,7 +1,7 @@
/*
* PROGRAM: Firebird interface.
* MODULE: ImplementHelper.h
- * DESCRIPTION: Tools to help write plugins.
+ * DESCRIPTION: Tools to help access plugins.
*
* The contents of this file are subject to the Initial
* Developer's Public License Version 1.0 (the "License");
@@ -50,7 +50,7 @@
{
public:
GetPlugins(unsigned int interfaceType, unsigned int desiredVersion, const char* namesList = NULL)
- : masterInterface(fb_get_master_interface()), pluginInterface(masterInterface->getPluginManager()), missing(),
+ : masterInterface(), pluginInterface(masterInterface), missing(),
pluginSet(pluginInterface->getPlugins(interfaceType, namesList ? namesList : Config::getPlugins(interfaceType),
desiredVersion, &missing, NULL)),
currentPlugin(NULL)
@@ -61,7 +61,7 @@
GetPlugins(unsigned int interfaceType, unsigned int desiredVersion,
Config* knownConfig, const char* namesList = NULL)
- : masterInterface(fb_get_master_interface()), pluginInterface(masterInterface->getPluginManager()), missing(),
+ : masterInterface(), pluginInterface(masterInterface), missing(),
pluginSet(pluginInterface->getPlugins(interfaceType, namesList ? namesList : Config::getPlugins(interfaceType),
desiredVersion, &missing, new FirebirdConf(knownConfig))),
currentPlugin(NULL)
@@ -122,8 +122,8 @@
}
private:
- AutoPtr<IMaster, AutoDisposable> masterInterface;
- AutoPtr<IPluginManager, AutoDisposable> pluginInterface;
+ MasterInterfacePtr masterInterface;
+ PluginManagerInterfacePtr pluginInterface;
M missing;
RefPtr<IPluginSet> pluginSet;
P* currentPlugin;
Modified: firebird/trunk/src/common/classes/ImplementHelper.h
===================================================================
--- firebird/trunk/src/common/classes/ImplementHelper.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/common/classes/ImplementHelper.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -1,7 +1,7 @@
/*
* PROGRAM: Firebird interface.
* MODULE: ImplementHelper.h
- * DESCRIPTION: Tools to help write plugins.
+ * DESCRIPTION: Tools to help create interfaces.
*
* The contents of this file are subject to the Initial
* Developer's Public License Version 1.0 (the "License");
@@ -59,25 +59,30 @@
// Implement standard interface and plugin functions
-// Helps to implement disposable interfaces
-template <class C, typename S = GlobalStorage>
-class DisposeIface : public C, public S
+// Helps to implement generic versioned interfaces
+template <class C, int V>
+class VersionedIface : public C
{
public:
- DisposeIface() { }
+ VersionedIface() { }
+ int FB_CARG getVersion()
+ {
+ return V;
+ }
+
private:
- DisposeIface(const DisposeIface&);
- DisposeIface& operator=(const DisposeIface&);
+ VersionedIface(const VersionedIface&);
+ VersionedIface& operator=(const VersionedIface&);
};
-// Helps to implement disposable interfaces on stack or static
-template <class C, typename S = GlobalStorage>
-class StackIface : public DisposeIface<C, S>
+
+// Helps to implement versioned interfaces on stack or static
+template <class C, int V>
+class AutoIface : public VersionedIface<C, V>
{
public:
- void FB_CARG dispose()
- { }
+ AutoIface() { }
void* operator new(size_t, void* memory) throw()
{
@@ -85,20 +90,23 @@
}
};
+// Helps to implement disposable interfaces
+template <class C, int V>
+class DisposeIface : public VersionedIface<C, V>, public GlobalStorage
+{
+public:
+ DisposeIface() { }
+};
+
// Helps to implement standard interfaces
-template <class C, int V, typename S = GlobalStorage>
-class StdIface : public C, public S
+template <class C, int V>
+class RefCntIface : public VersionedIface<C, V>, public GlobalStorage
{
public:
- StdIface() : refCounter(0) { }
+ RefCntIface() : refCounter(0) { }
- int FB_CARG getVersion()
- {
- return V;
- }
-
#ifdef DEV_BUILD
- ~StdIface()
+ ~RefCntIface()
{
fb_assert(refCounter.value() == 0);
}
@@ -111,30 +119,26 @@
protected:
AtomicCounter refCounter;
-
-private:
- StdIface(const StdIface&);
- StdIface& operator=(const StdIface&);
};
// Helps to implement plugins
-template <class C, int V, typename S = GlobalStorage>
-class StdPlugin : public StdIface<C, V, S>
+template <class C, int V>
+class StdPlugin : public RefCntIface<C, V>
{
private:
- IInterface* owner;
+ IRefCounted* owner;
public:
StdPlugin() : owner(NULL)
{ }
- IInterface* FB_CARG getOwner()
+ IRefCounted* FB_CARG getOwner()
{
return owner;
}
- void FB_CARG setOwner(IInterface* iface)
+ void FB_CARG setOwner(IRefCounted* iface)
{
owner = iface;
}
@@ -143,7 +147,7 @@
// Trivial factory
template <class P>
-class SimpleFactoryBase : public StackIface<IPluginFactory>
+class SimpleFactoryBase : public AutoIface<IPluginFactory, FB_PLUGIN_FACTORY_VERSION>
{
public:
IPluginBase* FB_CARG createPlugin(IPluginConfig* factoryParameter)
@@ -160,40 +164,68 @@
};
+// Base for interface type indpendent accessors
+template <typename C>
+class AccessAutoInterface
+{
+public:
+ AccessAutoInterface(C* aPtr)
+ : ptr(aPtr)
+ { }
+
+ operator C*()
+ {
+ return ptr;
+ }
+
+ C* operator->()
+ {
+ return ptr;
+ }
+
+private:
+ C* ptr;
+};
+
// Master interface access
-class MasterInterfacePtr : public AutoPtr<IMaster, AutoDisposable>
+class MasterInterfacePtr : public AccessAutoInterface<IMaster>
{
public:
- MasterInterfacePtr() : AutoPtr<IMaster, AutoDisposable>(fb_get_master_interface())
+ MasterInterfacePtr()
+ : AccessAutoInterface<IMaster>(fb_get_master_interface())
{ }
};
// Generic plugins interface access
-class PluginManagerInterfacePtr : public AutoPtr<IPluginManager, AutoDisposable>
+class PluginManagerInterfacePtr : public AccessAutoInterface<IPluginManager>
{
public:
- PluginManagerInterfacePtr() : AutoPtr<IPluginManager, AutoDisposable>(fb_get_master_interface()->getPluginManager())
+ PluginManagerInterfacePtr()
+ : AccessAutoInterface<IPluginManager>(MasterInterfacePtr()->getPluginManager())
{ }
- PluginManagerInterfacePtr(IMaster* master) : AutoPtr<IPluginManager, AutoDisposable>(master->getPluginManager())
+ PluginManagerInterfacePtr(IMaster* master)
+ : AccessAutoInterface<IPluginManager>(master->getPluginManager())
{ }
};
// Control timer interface access
-class TimerInterfacePtr : public AutoPtr<ITimerControl, AutoDisposable>
+class TimerInterfacePtr : public AccessAutoInterface<ITimerControl>
{
public:
- TimerInterfacePtr() : AutoPtr<ITimerControl, AutoDisposable>(fb_get_master_interface()->getTimerControl())
+ TimerInterfacePtr()
+ : AccessAutoInterface<ITimerControl>(fb_get_master_interface()->getTimerControl())
{ }
};
// Distributed transactions coordinator access
-class DtcInterfacePtr : public AutoPtr<IDtc, AutoDisposable>
+class DtcInterfacePtr : public AccessAutoInterface<IDtc>
{
public:
- DtcInterfacePtr() : AutoPtr<IDtc, AutoDisposable>(fb_get_master_interface()->getDtc())
+ DtcInterfacePtr()
+ : AccessAutoInterface<IDtc>(fb_get_master_interface()->getDtc())
{ }
};
@@ -203,12 +235,8 @@
// when yvalve is starting fb_shutdown(). This causes almost unavoidable segfault.
// To avoid it this class is added - it detects spontaneous (not by PluginManager)
// module unload and notifies PluginManager about this said fact.
-class DummyStorage
+class UnloadDetectorHelper : public VersionedIface<IPluginModule, FB_PLUGIN_MODULE_VERSION>
{
-};
-
-class UnloadDetectorHelper : public DisposeIface<IPluginModule, DummyStorage>
-{
public:
explicit UnloadDetectorHelper(MemoryPool&)
: flagOsUnload(true)
@@ -230,11 +258,6 @@
return !flagOsUnload;
}
- void FB_CARG dispose()
- {
- // delete this; -don't do that!
- }
-
private:
bool flagOsUnload;
Modified: firebird/trunk/src/common/config/config.h
===================================================================
--- firebird/trunk/src/common/config/config.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/common/config/config.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -351,7 +351,7 @@
};
// Implementation of interface to access master configuration file
-class FirebirdConf : public Firebird::StdIface<Firebird::IFirebirdConf, FB_I_FIREBIRD_CONF_VERSION>
+class FirebirdConf : public Firebird::RefCntIface<Firebird::IFirebirdConf, FB_FIREBIRD_CONF_VERSION>
{
public:
FirebirdConf(Config* existingConfig)
Modified: firebird/trunk/src/common/security.h
===================================================================
--- firebird/trunk/src/common/security.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/common/security.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -30,7 +30,7 @@
namespace Auth {
-class CharField : public Firebird::StackIface<ICharUserField>
+class CharField : public Firebird::AutoIface<ICharUserField, FB_AUTH_CHAR_FIELD_VERSION>
{
public:
CharField()
@@ -88,7 +88,7 @@
Firebird::string value;
};
-class IntField : public Firebird::StackIface<IIntUserField>
+class IntField : public Firebird::AutoIface<IIntUserField, FB_AUTH_INT_FIELD_VERSION>
{
public:
IntField()
@@ -207,7 +207,7 @@
CharField database, dba, dbaPassword, role, trustedUser;
};
-class StackUserData : public Firebird::StackIface<UserData>
+class StackUserData : public Firebird::AutoIface<UserData, FB_AUTH_USER_VERSION>
{
};
Modified: firebird/trunk/src/gpre/boot/gpre_meta_boot.cpp
===================================================================
--- firebird/trunk/src/gpre/boot/gpre_meta_boot.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/gpre/boot/gpre_meta_boot.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -678,8 +678,9 @@
{
public:
// IMaster implementation (almost dummy, for boot build)
- virtual void FB_CARG dispose()
+ virtual int FB_CARG getVersion()
{
+ return FB_MASTER_VERSION;
}
virtual IStatus* FB_CARG getStatus()
@@ -700,7 +701,7 @@
return NULL;
}
- virtual int FB_CARG upgradeInterface(IInterface* /*toUpgrade*/, int /*desiredVersion*/,
+ virtual int FB_CARG upgradeInterface(IVersioned* /*toUpgrade*/, int /*desiredVersion*/,
void* /*missingFunctionClass*/)
{
fb_assert(false);
Modified: firebird/trunk/src/include/FirebirdExternalApi.h
===================================================================
--- firebird/trunk/src/include/FirebirdExternalApi.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/include/FirebirdExternalApi.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -152,7 +152,7 @@
};
-class IRoutineMetadata // : public IVersioned
+class IRoutineMetadata : public IVersioned
{
public:
virtual const char* FB_CARG getPackage(IStatus* status) const = 0;
@@ -162,7 +162,7 @@
virtual const char* FB_CARG getTriggerTable(IStatus* status) const = 0;
virtual ExternalTrigger::Type FB_CARG getTriggerType(IStatus* status) const = 0;
};
-// #define FB_I_ROUTINE_METADATA_VERSION (FB_VERSIONED_VERSION + 6)
+#define FB_ROUTINE_METADATA_VERSION (FB_VERSIONED_VERSION + 6)
// In SuperServer, shared by all attachments to one database and disposed when last (non-external)
Modified: firebird/trunk/src/include/FirebirdPluginApi.h
===================================================================
--- firebird/trunk/src/include/FirebirdPluginApi.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/include/FirebirdPluginApi.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -70,7 +70,7 @@
namespace Firebird {
// IPluginBase interface - base for master plugin interfaces (factories are registered for them)
-class IPluginBase : public IInterface
+class IPluginBase : public IRefCounted
{
public:
// Additional (compared with Interface) functions getOwner() and setOwner()
@@ -79,13 +79,13 @@
// after plugin itself, and therefore module is unloaded after release of last plugin from it.
// Releasing owner from release() of plugin will unload module and after returning control
// to missing code segfault is unavoidable.
- virtual void FB_CARG setOwner(IInterface*) = 0;
- virtual IInterface* FB_CARG getOwner() = 0;
+ virtual void FB_CARG setOwner(IRefCounted*) = 0;
+ virtual IRefCounted* FB_CARG getOwner() = 0;
};
-#define FB_PLUGIN_VERSION (FB_INTERFACE_VERSION + 2)
+#define FB_PLUGIN_VERSION (FB_REFCOUNTED_VERSION + 2)
// IPluginSet - low level tool to access plugins according to parameter from firebird.conf
-class IPluginSet : public IInterface
+class IPluginSet : public IRefCounted
{
public:
virtual const char* FB_CARG getName() const = 0;
@@ -94,33 +94,33 @@
virtual void FB_CARG next() = 0;
virtual void FB_CARG set(const char*) = 0;
};
-#define FB_PLUGIN_SET_VERSION (FB_INTERFACE_VERSION + 5)
+#define FB_PLUGIN_SET_VERSION (FB_REFCOUNTED_VERSION + 5)
// Interfaces to work with configuration data
class IConfig;
// Entry in configuration file
-class IConfigEntry : public IInterface
+class IConfigEntry : public IRefCounted
{
public:
virtual const char* FB_CARG getName() = 0;
virtual const char* FB_CARG getValue() = 0;
virtual IConfig* FB_CARG getSubConfig() = 0;
};
-#define FB_I_CONFIG_PARAMETER_VERSION (FB_INTERFACE_VERSION + 3)
+#define FB_CONFIG_PARAMETER_VERSION (FB_REFCOUNTED_VERSION + 3)
// Generic form of access to configuration file - find specific entry in it
-class IConfig : public IInterface
+class IConfig : public IRefCounted
{
public:
virtual IConfigEntry* FB_CARG find(const char* name) = 0;
virtual IConfigEntry* FB_CARG findValue(const char* name, const char* value) = 0;
virtual IConfigEntry* FB_CARG findPos(const char* name, unsigned int pos) = 0;
};
-#define FB_I_CONFIG_VERSION (FB_INTERFACE_VERSION + 3)
+#define FB_CONFIG_VERSION (FB_REFCOUNTED_VERSION + 3)
// Used to access config values from firebird.conf (may be DB specific)
-class IFirebirdConf : public IInterface
+class IFirebirdConf : public IRefCounted
{
public:
// Get integer key by it's name
@@ -132,37 +132,40 @@
// Use to access string values
virtual const char* FB_CARG asString(unsigned int key) = 0;
};
-#define FB_I_FIREBIRD_CONF_VERSION (FB_INTERFACE_VERSION + 3)
+#define FB_FIREBIRD_CONF_VERSION (FB_REFCOUNTED_VERSION + 3)
// This interface is passed to plugin's factory as it's single parameter
// and contains methods to access specific plugin's configuration data
-class IPluginConfig : public IInterface
+class IPluginConfig : public IRefCounted
{
public:
virtual const char* FB_CARG getConfigFileName() = 0;
virtual IConfig* FB_CARG getDefaultConfig() = 0;
virtual IFirebirdConf* FB_CARG getFirebirdConf() = 0;
};
-#define FB_FACTORY_PARAMETER_VERSION (FB_INTERFACE_VERSION + 3)
+#define FB_PLUGIN_CONFIG_VERSION (FB_REFCOUNTED_VERSION + 3)
// Required to creat instances of given plugin
-class IPluginFactory : public IDisposable
+class IPluginFactory : public IVersioned
{
public:
virtual IPluginBase* FB_CARG createPlugin(IPluginConfig* factoryParameter) = 0;
};
+#define FB_PLUGIN_FACTORY_VERSION (FB_VERSIONED_VERSION + 1)
// Required to let plugins manager invoke module's cleanup routine before unloading it.
// For some OS/compiler this may be done in dtor of global variable in module itself.
// Others (Windows/VC) fail to create some very useful resources (threads) when module is unloading.
-class IPluginModule : public IDisposable
+class IPluginModule : public IVersioned
{
public:
virtual void FB_CARG doClean() = 0;
};
+#define FB_PLUGIN_MODULE_VERSION (FB_VERSIONED_VERSION + 1)
+
// Interface to deal with plugins here and there, returned by master interface
-class IPluginManager : public IDisposable
+class IPluginManager : public IVersioned
{
public:
// Main function called by plugin modules in firebird_plugin()
@@ -192,7 +195,9 @@
// will cause resources leak
virtual void FB_CARG releasePlugin(IPluginBase* plugin) = 0;
};
+#define FB_PLUGIN_MANAGER_VERSION (FB_VERSIONED_VERSION + 6)
+
typedef void PluginEntrypoint(IMaster* masterInterface);
namespace PluginType {
Modified: firebird/trunk/src/include/Interface.h
===================================================================
--- firebird/trunk/src/include/Interface.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/include/Interface.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -39,22 +39,33 @@
namespace Firebird {
-// Regular interface - base for refCounted FB interfaces
-class IInterface
+// Versioned interface - base for all FB interfaces
+class IVersioned
{
public:
+ virtual int FB_CARG getVersion() = 0;
+};
+// If this is changed, types of all interfaces must be changed
+#define FB_VERSIONED_VERSION 1
+
+// Reference counted interface - base for refCounted FB interfaces
+class IRefCounted : public IVersioned
+{
+public:
virtual void FB_CARG addRef() = 0;
virtual int FB_CARG release() = 0;
- virtual int FB_CARG getVersion() = 0;
};
-#define FB_INTERFACE_VERSION 3 // If this is changed, types of all interfaces must be changed
+// If this is changed, types of refCounted interfaces must be changed
+#define FB_REFCOUNTED_VERSION (FB_VERSIONED_VERSION + 2)
-// Disposable interface - base for static and onStack interfaces, may be used in regular case too
+// Disposable interface - base for disposable FB interfaces
class IDisposable
{
public:
virtual void FB_CARG dispose() = 0;
};
+// If this is changed, types of disposable interfaces must be changed
+#define FB_DISPOSABLE_VERSION (FB_VERSIONED_VERSION + 1)
// Interface to work with status vector
// Created by master interface by request
@@ -69,6 +80,7 @@
virtual const ISC_STATUS* FB_CARG get() const = 0;
virtual int FB_CARG isSuccess() const = 0;
};
+#define FB_STATUS_VERSION (FB_DISPOSABLE_VERSION + 5)
class IProvider;
class IPluginManager;
@@ -78,22 +90,20 @@
class IDtc;
// Master interface is used to access almost all other interfaces.
-class IMaster : public IDisposable
+class IMaster : public IVersioned
{
public:
- // This interface can't be upgraded - therefore another form of version is used
- const static unsigned int VERSION = 1; // To be changed each time any interface, passed
- // by firebird to plugins is changed
virtual IStatus* FB_CARG getStatus() = 0;
virtual IProvider* FB_CARG getDispatcher() = 0;
virtual IPluginManager* FB_CARG getPluginManager() = 0;
- virtual int FB_CARG upgradeInterface(IInterface* toUpgrade, int desiredVersion, void* missingFunctionClass) = 0;
+ virtual int FB_CARG upgradeInterface(IVersioned* toUpgrade, int desiredVersion, void* missingFunctionClass) = 0;
virtual const char* FB_CARG circularAlloc(const char* s, size_t len, intptr_t thr) = 0;
virtual ITimerControl* FB_CARG getTimerControl() = 0;
virtual IDtc* FB_CARG getDtc() = 0;
virtual IAttachment* registerAttachment(IProvider* provider, IAttachment* attachment) = 0;
virtual ITransaction* registerTransaction(IAttachment* attachment, ITransaction* transaction) = 0;
};
+#define FB_MASTER_VERSION (FB_VERSIONED_VERSION + 6)
} // namespace Firebird
Modified: firebird/trunk/src/include/ProviderInterface.h
===================================================================
--- firebird/trunk/src/include/ProviderInterface.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/include/ProviderInterface.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -46,11 +46,12 @@
unsigned int bufferLength;
};
-class IEventCallback
+class IEventCallback : public IVersioned
{
public:
virtual void FB_CARG eventCallbackFunction(unsigned int length, const unsigned char* events) = 0;
};
+#define FB_EVENT_CALLBACK_VERSION (FB_VERSIONED_VERSION + 1)
/*
class ShutdownCallback
@@ -60,7 +61,7 @@
};
*/
-class IBlob : public IInterface
+class IBlob : public IRefCounted
{
public:
virtual void FB_CARG getInfo(IStatus* status,
@@ -74,9 +75,9 @@
virtual void FB_CARG close(IStatus* status) = 0;
virtual int FB_CARG seek(IStatus* status, int mode, int offset) = 0; // returns position
};
-#define FB_I_BLOB_VERSION (FB_INTERFACE_VERSION + 6)
+#define FB_BLOB_VERSION (FB_REFCOUNTED_VERSION + 6)
-class ITransaction : public IInterface
+class ITransaction : public IRefCounted
{
public:
virtual void FB_CARG getInfo(IStatus* status,
@@ -93,9 +94,9 @@
virtual ITransaction* FB_CARG validate(IStatus* status, IAttachment* attachment) = 0;
virtual ITransaction* FB_CARG enterDtc(IStatus* status) = 0;
};
-#define FB_I_TRANSACTION_VERSION (FB_INTERFACE_VERSION + 10)
+#define FB_TRANSACTION_VERSION (FB_REFCOUNTED_VERSION + 10)
-class IParametersMetadata // : public IVersioned
+class IParametersMetadata : public IVersioned
{
public:
virtual unsigned FB_CARG getCount(IStatus* status) const = 0;
@@ -109,9 +110,9 @@
virtual unsigned FB_CARG getLength(IStatus* status, unsigned index) const = 0;
virtual unsigned FB_CARG getScale(IStatus* status, unsigned index) const = 0;
};
-// #define FB_I_PARAMETERS_METADATA_VERSION (FB_VERSIONED_VERSION + 10)
+#define FB_PARAMETERS_METADATA_VERSION (FB_VERSIONED_VERSION + 10)
-class IStatement : public IInterface
+class IStatement : public IRefCounted
{
public:
// Prepare flags.
@@ -146,9 +147,9 @@
virtual void FB_CARG insert(IStatus* status, const FbMessage* msgBuffer) = 0;
virtual void FB_CARG free(IStatus* status, unsigned int option) = 0;
};
-#define FB_I_STATEMENT_VERSION (FB_INTERFACE_VERSION + 12)
+#define FB_STATEMENT_VERSION (FB_REFCOUNTED_VERSION + 12)
-class IRequest : public IInterface
+class IRequest : public IRefCounted
{
public:
virtual void FB_CARG receive(IStatus* status, int level, unsigned int msgType,
@@ -164,16 +165,16 @@
virtual void FB_CARG unwind(IStatus* status, int level) = 0;
virtual void FB_CARG free(IStatus* status) = 0;
};
-#define FB_I_REQUEST_VERSION (FB_INTERFACE_VERSION + 7)
+#define FB_REQUEST_VERSION (FB_REFCOUNTED_VERSION + 7)
-class IEvents : public IInterface
+class IEvents : public IRefCounted
{
public:
virtual void FB_CARG cancel(IStatus* status) = 0;
};
-#define FB_I_EVENTS_VERSION (FB_INTERFACE_VERSION + 1)
+#define FB_EVENTS_VERSION (FB_REFCOUNTED_VERSION + 1)
-class IAttachment : public IInterface
+class IAttachment : public IRefCounted
{
public:
virtual void FB_CARG getInfo(IStatus* status,
@@ -212,9 +213,9 @@
virtual void FB_CARG detach(IStatus* status) = 0;
virtual void FB_CARG drop(IStatus* status) = 0;
};
-#define FB_I_ATTACHMENT_VERSION (FB_INTERFACE_VERSION + 17)
+#define FB_ATTACHMENT_VERSION (FB_REFCOUNTED_VERSION + 17)
-class IService : public IInterface
+class IService : public IRefCounted
{
public:
virtual void FB_CARG detach(IStatus* status) = 0;
@@ -225,7 +226,7 @@
virtual void FB_CARG start(IStatus* status,
unsigned int spbLength, const unsigned char* spb) = 0;
};
-#define FB_I_SERVICE_VERSION (FB_INTERFACE_VERSION + 3)
+#define FB_SERVICE_VERSION (FB_REFCOUNTED_VERSION + 3)
class IProvider : public IPluginBase
{
@@ -238,7 +239,7 @@
unsigned int spbLength, const unsigned char* spb) = 0;
virtual void FB_CARG shutdown(IStatus* status, unsigned int timeout, const int reason) = 0;
};
-#define FB_I_PROVIDER_VERSION (FB_PLUGIN_VERSION + 4)
+#define FB_PROVIDER_VERSION (FB_PLUGIN_VERSION + 4)
// DtcStart - structure to start transaction over >1 attachments (former TEB)
struct DtcStart
@@ -249,12 +250,13 @@
};
// Distributed transactions coordinator
-class IDtc : public IDisposable
+class IDtc : public IVersioned
{
public:
virtual ITransaction* FB_CARG start(IStatus* status, unsigned int cnt, DtcStart* components) = 0;
virtual ITransaction* FB_CARG join(IStatus* status, ITransaction* one, ITransaction* two) = 0;
};
+#define FB_DTC_VERSION (FB_VERSIONED_VERSION + 2)
} // namespace Firebird
Modified: firebird/trunk/src/include/Timer.h
===================================================================
--- firebird/trunk/src/include/Timer.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/include/Timer.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -35,17 +35,17 @@
// Identifies particular timer.
// Callback function is invoked when timer fires.
-class ITimer : public IInterface
+class ITimer : public IRefCounted
{
public:
virtual void FB_CARG handler() = 0;
};
-#define FB_I_TIMER_VERSION (FB_INTERFACE_VERSION + 1)
+#define FB_TIMER_VERSION (FB_REFCOUNTED_VERSION + 1)
typedef ISC_INT64 TimerDelay;
// Interface to set timer for particular time
-class ITimerControl : public IDisposable
+class ITimerControl : public IVersioned
{
public:
// Set timer
@@ -53,6 +53,7 @@
// Stop timer
virtual void FB_CARG stop(ITimer* timer) = 0;
};
+#define FB_TIMER_CONTROL_VERSION (FB_VERSIONED_VERSION + 2)
} // namespace Firebird
Modified: firebird/trunk/src/jrd/EngineInterface.h
===================================================================
--- firebird/trunk/src/jrd/EngineInterface.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/EngineInterface.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -42,7 +42,7 @@
class JAttachment;
class JProvider;
-class JBlob : public Firebird::StdIface<Firebird::IBlob, FB_I_BLOB_VERSION>
+class JBlob : public Firebird::RefCntIface<Firebird::IBlob, FB_BLOB_VERSION>
{
public:
// IBlob implementation
@@ -79,7 +79,7 @@
void freeEngineData(Firebird::IStatus* status);
};
-class JTransaction : public Firebird::StdIface<Firebird::ITransaction, FB_I_TRANSACTION_VERSION>
+class JTransaction : public Firebird::RefCntIface<Firebird::ITransaction, FB_TRANSACTION_VERSION>
{
public:
// ITransaction implementation
@@ -137,7 +137,7 @@
void freeEngineData(Firebird::IStatus* status);
};
-class JStatement : public Firebird::StdIface<Firebird::IStatement, FB_I_STATEMENT_VERSION>
+class JStatement : public Firebird::RefCntIface<Firebird::IStatement, FB_STATEMENT_VERSION>
{
public:
// IStatement implementation
@@ -185,7 +185,7 @@
void freeEngineData(Firebird::IStatus* status, unsigned int option);
};
-class JRequest : public Firebird::StdIface<Firebird::IRequest, FB_I_REQUEST_VERSION>
+class JRequest : public Firebird::RefCntIface<Firebird::IRequest, FB_REQUEST_VERSION>
{
public:
// IRequest implementation
@@ -226,7 +226,7 @@
void freeEngineData(Firebird::IStatus* status);
};
-class JEvents : public Firebird::StdIface<Firebird::IEvents, FB_I_EVENTS_VERSION>
+class JEvents : public Firebird::RefCntIface<Firebird::IEvents, FB_EVENTS_VERSION>
{
public:
// IEvents implementation
@@ -256,7 +256,7 @@
void freeEngineData(Firebird::IStatus* status);
};
-class JAttachment : public Firebird::StdIface<Firebird::IAttachment, FB_I_ATTACHMENT_VERSION>
+class JAttachment : public Firebird::RefCntIface<Firebird::IAttachment, FB_ATTACHMENT_VERSION>
{
public:
// IAttachment implementation
@@ -334,7 +334,7 @@
void freeEngineData(Firebird::IStatus* status);
};
-class JService : public Firebird::StdIface<Firebird::IService, FB_I_SERVICE_VERSION>
+class JService : public Firebird::RefCntIface<Firebird::IService, FB_SERVICE_VERSION>
{
public:
// IService implementation
@@ -356,7 +356,7 @@
void freeEngineData(Firebird::IStatus* status);
};
-class JProvider : public Firebird::StdPlugin<Firebird::IProvider, FB_I_PROVIDER_VERSION>
+class JProvider : public Firebird::StdPlugin<Firebird::IProvider, FB_PROVIDER_VERSION>
{
public:
explicit JProvider(Firebird::IPluginConfig*)
Modified: firebird/trunk/src/jrd/ExtEngineManager.h
===================================================================
--- firebird/trunk/src/jrd/ExtEngineManager.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/ExtEngineManager.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -33,6 +33,7 @@
#include "../common/classes/NestConst.h"
#include "../common/classes/auto.h"
#include "../common/classes/rwlock.h"
+#include "../common/classes/ImplementHelper.h"
///#include "../dsql/Nodes.h"
struct dsc;
@@ -61,7 +62,8 @@
template <typename T> class ContextManager;
class TransactionImpl;
- class RoutineMetadata : public Firebird::IRoutineMetadata, public Firebird::PermanentStorage
+ class RoutineMetadata : public Firebird::VersionedIface<Firebird::IRoutineMetadata, FB_ROUTINE_METADATA_VERSION>,
+ public Firebird::PermanentStorage
{
public:
RoutineMetadata(MemoryPool& pool)
Modified: firebird/trunk/src/jrd/UserManagement.cpp
===================================================================
--- firebird/trunk/src/jrd/UserManagement.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/UserManagement.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -71,7 +71,7 @@
fb_assert(manager);
manager->addRef();
- class UserIdInfo : public StackIface<Auth::ILogonInfo>
+ class UserIdInfo : public AutoIface<Auth::ILogonInfo, FB_AUTH_LOGON_INFO_VERSION>
{
public:
explicit UserIdInfo(const Attachment* pAtt)
Modified: firebird/trunk/src/jrd/UserManagement.h
===================================================================
--- firebird/trunk/src/jrd/UserManagement.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/UserManagement.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -54,7 +54,7 @@
class UserManagement : public DataDump
{
public:
- class Display : public Firebird::StackIface<Auth::IListUsers>
+ class Display : public Firebird::AutoIface<Auth::IListUsers, FB_AUTH_LIST_USERS_VERSION>
{
public:
explicit Display(UserManagement* um)
Modified: firebird/trunk/src/jrd/dyn.epp
===================================================================
--- firebird/trunk/src/jrd/dyn.epp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/dyn.epp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -1969,16 +1969,24 @@
ISC_STATUS_ARRAY status;
try
{
- class DisposeableUserData : public Firebird::DisposeIface<Auth::UserData, pool_alloc<type_user_data> >
+ class DynamicUserData : public Firebird::VersionedIface<Auth::UserData, FB_AUTH_USER_VERSION>
{
public:
- void FB_CARG dispose()
+
+#ifdef DEBUG_GDS_ALLOC
+ void* operator new(size_t size, Firebird::MemoryPool& pool, const char* fileName, int line)
{
- delete this;
+ return pool.allocate(size, fileName, line);
}
+#else // DEBUG_GDS_ALLOC
+ void* operator new(size_t size, Firebird::MemoryPool& pool)
+ {
+ return pool.allocate(size);
+ }
+#endif // DEBUG_GDS_ALLOC
};
- DisposeableUserData* userData = FB_NEW(*tra->tra_pool) DisposeableUserData;
+ DynamicUserData* userData = FB_NEW(*tra->tra_pool) DynamicUserData;
UCHAR verb;
while ((verb = *(*ptr)++) != isc_user_end)
{
Modified: firebird/trunk/src/jrd/jrd.cpp
===================================================================
--- firebird/trunk/src/jrd/jrd.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/jrd.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -315,7 +315,7 @@
static GlobalPtr<ShutdownBeforeUnload, InstanceControl::PRIORITY_DETECT_UNLOAD> shutdownBeforeUnload;
-class EngineFactory : public StackIface<IPluginFactory>
+class EngineFactory : public AutoIface<IPluginFactory, FB_PLUGIN_FACTORY_VERSION>
{
public:
// IPluginFactory implementation
@@ -745,7 +745,7 @@
/// trace manager support
-class TraceFailedConnection : public StackIface<TraceConnection>
+class TraceFailedConnection : public AutoIface<TraceConnection, FB_TRACE_CONNECTION_VERSION>
{
public:
TraceFailedConnection(const char* filename, const DatabaseOptions* options);
Modified: firebird/trunk/src/jrd/ntrace.h
===================================================================
--- firebird/trunk/src/jrd/ntrace.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/ntrace.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -37,7 +37,7 @@
struct PerformanceInfo;
-class TraceConnection : public Firebird::IDisposable
+class TraceConnection : public Firebird::IVersioned
{
public:
virtual int FB_CARG getConnectionID() = 0;
@@ -52,6 +52,7 @@
virtual int FB_CARG getRemoteProcessID() = 0;
virtual const char* FB_CARG getRemoteProcessName() = 0;
};
+#define FB_TRACE_CONNECTION_VERSION (FB_VERSIONED_VERSION + 10)
enum ntrace_tra_isolation_t
{
@@ -61,7 +62,7 @@
tra_iso_read_committed_norecver
};
-class TraceTransaction : public Firebird::IDisposable
+class TraceTransaction : public Firebird::IVersioned
{
public:
virtual int FB_CARG getTransactionID() = 0;
@@ -70,22 +71,25 @@
virtual ntrace_tra_isolation_t FB_CARG getIsolation() = 0;
virtual PerformanceInfo* FB_CARG getPerf() = 0;
};
+#define FB_TRACE_TRANSACTION_VERSION (FB_VERSIONED_VERSION + 5)
typedef int ntrace_relation_t;
-class TraceParams : public Firebird::IDisposable
+class TraceParams : public Firebird::IVersioned
{
public:
virtual size_t FB_CARG getCount() = 0;
virtual const struct dsc* FB_CARG getParam(size_t idx) = 0;
};
+#define FB_TRACE_PARAMS_VERSION (FB_VERSIONED_VERSION + 2)
-class TraceStatement : public Firebird::IDisposable
+class TraceStatement : public Firebird::IVersioned
{
public:
virtual int FB_CARG getStmtID() = 0;
virtual PerformanceInfo* FB_CARG getPerf() = 0;
};
+#define FB_TRACE_STATEMENT_VERSION (FB_VERSIONED_VERSION + 2)
class TraceSQLStatement : public TraceStatement
{
@@ -95,6 +99,7 @@
virtual TraceParams* FB_CARG getInputs() = 0;
virtual const char* FB_CARG getTextUTF8() = 0;
};
+#define FB_TRACE_SQL_STATEMENT_VERSION (FB_TRACE_STATEMENT_VERSION + 4)
class TraceBLRStatement : public TraceStatement
{
@@ -103,32 +108,36 @@
virtual size_t FB_CARG getDataLength() = 0;
virtual const char* FB_CARG getText() = 0;
};
+#define FB_TRACE_BLR_STATEMENT_VERSION (FB_TRACE_STATEMENT_VERSION + 3)
-class TraceDYNRequest : public Firebird::IDisposable
+class TraceDYNRequest : public Firebird::IVersioned
{
public:
virtual const unsigned char* FB_CARG getData() = 0;
virtual size_t FB_CARG getDataLength() = 0;
virtual const char* FB_CARG getText() = 0;
};
+#define FB_TRACE_DYN_REQUEST_VERSION (FB_VERSIONED_VERSION + 3)
-class TraceContextVariable : public Firebird::IDisposable
+class TraceContextVariable : public Firebird::IVersioned
{
public:
virtual const char* FB_CARG getNameSpace() = 0;
virtual const char* FB_CARG getVarName() = 0;
virtual const char* FB_CARG getVarValue() = 0;
};
+#define FB_TRACE_CONTEXT_VARIABLE_VERSION (FB_VERSIONED_VERSION + 3)
-class TraceProcedure : public Firebird::IDisposable
+class TraceProcedure : public Firebird::IVersioned
{
public:
virtual const char* FB_CARG getProcName() = 0;
virtual TraceParams* FB_CARG getInputs() = 0;
virtual PerformanceInfo* FB_CARG getPerf() = 0;
};
+#define FB_TRACE_PROCEDURE_VERSION (FB_VERSIONED_VERSION + 3)
-class TraceTrigger : public Firebird::IDisposable
+class TraceTrigger : public Firebird::IVersioned
{
public:
virtual const char* FB_CARG getTriggerName() = 0;
@@ -137,10 +146,11 @@
virtual int FB_CARG getWhich() = 0;
virtual PerformanceInfo* FB_CARG getPerf() = 0;
};
+#define FB_TRACE_TRIGGER_VERSION (FB_VERSIONED_VERSION + 5)
typedef void* ntrace_service_t;
-class TraceService : public Firebird::IDisposable
+class TraceService : public Firebird::IVersioned
{
public:
virtual ntrace_service_t FB_CARG getServiceID() = 0;
@@ -155,6 +165,7 @@
virtual int FB_CARG getRemoteProcessID() = 0;
virtual const char* FB_CARG getRemoteProcessName() = 0;
};
+#define FB_TRACE_SERVICE_VERSION (FB_VERSIONED_VERSION + 10)
// Plugin-specific argument. Passed by the engine to each hook
@@ -221,14 +232,14 @@
ntrace_counter_t pin_records_fetched; // records fetched from statement/procedure
};
-class TraceLogWriter : public Firebird::IInterface
+class TraceLogWriter : public Firebird::IRefCounted
{
public:
virtual size_t FB_CARG write(const void* buf, size_t size) = 0;
};
-#define FB_TRACE_LOG_WRITER_VERSION (FB_INTERFACE_VERSION + 1)
+#define FB_TRACE_LOG_WRITER_VERSION (FB_REFCOUNTED_VERSION + 1)
-class TraceInitInfo : public Firebird::IDisposable
+class TraceInitInfo : public Firebird::IVersioned
{
public:
virtual const char* FB_CARG getConfigText() = 0;
@@ -239,10 +250,11 @@
virtual TraceConnection* FB_CARG getConnection() = 0;
virtual TraceLogWriter* FB_CARG getLogWriter() = 0;
};
+#define FB_TRACE_INIT_INFO_VERSION (FB_VERSIONED_VERSION + 7)
// API of trace plugin. Used to deliver notifications for each database
-class TracePlugin : public Firebird::IInterface
+class TracePlugin : public Firebird::IRefCounted
{
public:
// Function to return error string for hook failure
@@ -295,7 +307,7 @@
const ntrace_byte_t* recv_items, ntrace_result_t query_result) = 0;
virtual int FB_CARG trace_service_detach(TraceService* service, ntrace_result_t detach_result) = 0;
};
-#define FB_TRACE_PLUGIN_VERSION (FB_INTERFACE_VERSION + 18)
+#define FB_TRACE_PLUGIN_VERSION (FB_REFCOUNTED_VERSION + 18)
// Trace plugin second level factory (this is what is known to PluginManager as "trace plugin")
class TraceFactory : public Firebird::IPluginBase
Modified: firebird/trunk/src/jrd/trace/TraceConfigStorage.h
===================================================================
--- firebird/trunk/src/jrd/trace/TraceConfigStorage.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/trace/TraceConfigStorage.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -70,7 +70,7 @@
void checkFile();
void touchFile();
- class TouchFile : public Firebird::StdIface<Firebird::ITimer, FB_I_TIMER_VERSION>
+ class TouchFile : public Firebird::RefCntIface<Firebird::ITimer, FB_TIMER_VERSION>
{
public:
void FB_CARG handler();
Modified: firebird/trunk/src/jrd/trace/TraceObjects.cpp
===================================================================
--- firebird/trunk/src/jrd/trace/TraceObjects.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/trace/TraceObjects.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -427,7 +427,7 @@
/// TraceLogWriterImpl
-class TraceLogWriterImpl : public StdIface<TraceLogWriter, FB_TRACE_LOG_WRITER_VERSION>
+class TraceLogWriterImpl : public RefCntIface<TraceLogWriter, FB_TRACE_LOG_WRITER_VERSION>
{
public:
TraceLogWriterImpl(const TraceSession& session) :
Modified: firebird/trunk/src/jrd/trace/TraceObjects.h
===================================================================
--- firebird/trunk/src/jrd/trace/TraceObjects.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/jrd/trace/TraceObjects.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -49,7 +49,7 @@
class Attachment;
class jrd_tra;
-class TraceConnectionImpl : public Firebird::StackIface<TraceConnection>
+class TraceConnectionImpl : public Firebird::AutoIface<TraceConnection, FB_TRACE_CONNECTION_VERSION>
{
public:
TraceConnectionImpl(const Attachment* att) :
@@ -73,7 +73,7 @@
};
-class TraceTransactionImpl : public Firebird::StackIface<TraceTransaction>
+class TraceTransactionImpl : public Firebird::AutoIface<TraceTransaction, FB_TRACE_TRANSACTION_VERSION>
{
public:
TraceTransactionImpl(const jrd_tra* tran, PerformanceInfo* perf = NULL) :
@@ -94,7 +94,7 @@
};
-class BLRPrinter : public Firebird::StackIface<TraceBLRStatement>
+class BLRPrinter : public Firebird::AutoIface<TraceBLRStatement, FB_TRACE_BLR_STATEMENT_VERSION>
{
public:
BLRPrinter(const unsigned char* blr, size_t length) :
@@ -147,7 +147,7 @@
};
-class TraceSQLStatementImpl : public Firebird::StackIface<TraceSQLStatement>
+class TraceSQLStatementImpl : public Firebird::AutoIface<TraceSQLStatement, FB_TRACE_SQL_STATEMENT_VERSION>
{
public:
TraceSQLStatementImpl(const dsql_req* stmt, PerformanceInfo* perf) :
@@ -166,7 +166,7 @@
virtual const char* FB_CARG getTextUTF8();
private:
- class DSQLParamsImpl : public Firebird::StackIface<TraceParams>
+ class DSQLParamsImpl : public Firebird::AutoIface<TraceParams, FB_TRACE_PARAMS_VERSION>
{
public:
DSQLParamsImpl(Firebird::MemoryPool& pool, const Firebird::Array<dsql_par*>* params) :
@@ -192,7 +192,7 @@
};
-class TraceFailedSQLStatement : public Firebird::StackIface<TraceSQLStatement>
+class TraceFailedSQLStatement : public Firebird::AutoIface<TraceSQLStatement, FB_TRACE_SQL_STATEMENT_VERSION>
{
public:
TraceFailedSQLStatement(Firebird::string& text) :
@@ -213,7 +213,7 @@
};
-class TraceContextVarImpl : public Firebird::StackIface<TraceContextVariable>
+class TraceContextVarImpl : public Firebird::AutoIface<TraceContextVariable, FB_TRACE_CONTEXT_VARIABLE_VERSION>
{
public:
TraceContextVarImpl(const char* ns, const char* name, const char* value) :
@@ -233,7 +233,7 @@
const char* const m_value;
};
-class TraceProcedureImpl : public Firebird::StackIface<TraceProcedure>
+class TraceProcedureImpl : public Firebird::AutoIface<TraceProcedure, FB_TRACE_PROCEDURE_VERSION>
{
public:
TraceProcedureImpl(jrd_req* request, PerformanceInfo* perf) :
@@ -252,7 +252,7 @@
virtual PerformanceInfo* FB_CARG getPerf() { return m_perf; };
private:
- class JrdParamsImpl : public Firebird::StackIface<TraceParams>
+ class JrdParamsImpl : public Firebird::AutoIface<TraceParams, FB_TRACE_PARAMS_VERSION>
{
public:
JrdParamsImpl(Firebird::MemoryPool& pool, jrd_req* request, const ValueListNode* params) :
@@ -278,7 +278,7 @@
};
-class TraceTriggerImpl : public Firebird::StackIface<TraceTrigger>
+class TraceTriggerImpl : public Firebird::AutoIface<TraceTrigger, FB_TRACE_TRIGGER_VERSION>
{
public:
TraceTriggerImpl(const jrd_req* trig, SSHORT which, PerformanceInfo* perf) :
@@ -301,7 +301,7 @@
};
-class TraceServiceImpl : public Firebird::StackIface<TraceService>
+class TraceServiceImpl : public Firebird::AutoIface<TraceService, FB_TRACE_SERVICE_VERSION>
{
public:
TraceServiceImpl(const Service* svc) :
@@ -340,7 +340,7 @@
};
-class TraceInitInfoImpl : public Firebird::StackIface<TraceInitInfo>
+class TraceInitInfoImpl : public Firebird::AutoIface<TraceInitInfo, FB_TRACE_INIT_INFO_VERSION>
{
public:
TraceInitInfoImpl(const Firebird::TraceSession& session, const Attachment* att,
Modified: firebird/trunk/src/remote/client/interface.cpp
===================================================================
--- firebird/trunk/src/remote/client/interface.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/remote/client/interface.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -132,7 +132,7 @@
class Attachment;
-class Blob : public Firebird::StdIface<Firebird::IBlob, FB_I_BLOB_VERSION>
+class Blob : public Firebird::RefCntIface<Firebird::IBlob, FB_BLOB_VERSION>
{
public:
// IBlob implementation
@@ -173,7 +173,7 @@
return 0;
}
-class Transaction : public Firebird::StdIface<Firebird::ITransaction, FB_I_TRANSACTION_VERSION>
+class Transaction : public Firebird::RefCntIface<Firebird::ITransaction, FB_TRANSACTION_VERSION>
{
public:
// ITransaction implementation
@@ -235,7 +235,7 @@
return 0;
}
-class Statement : public Firebird::StdIface<Firebird::IStatement, FB_I_STATEMENT_VERSION>
+class Statement : public Firebird::RefCntIface<Firebird::IStatement, FB_STATEMENT_VERSION>
{
public:
// IStatement implementation
@@ -289,7 +289,7 @@
return 0;
}
-class Request : public Firebird::StdIface<Firebird::IRequest, FB_I_REQUEST_VERSION>
+class Request : public Firebird::RefCntIface<Firebird::IRequest, FB_REQUEST_VERSION>
{
public:
// IRequest implementation
@@ -333,7 +333,7 @@
return 0;
}
-class Events : public Firebird::StdIface<Firebird::IEvents, FB_I_EVENTS_VERSION>
+class Events : public Firebird::RefCntIface<Firebird::IEvents, FB_EVENTS_VERSION>
{
public:
// IEvents implementation
@@ -363,7 +363,7 @@
return 0;
}
-class Attachment : public Firebird::StdIface<Firebird::IAttachment, FB_I_ATTACHMENT_VERSION>
+class Attachment : public Firebird::RefCntIface<Firebird::IAttachment, FB_ATTACHMENT_VERSION>
{
public:
// IAttachment implementation
@@ -446,7 +446,7 @@
return 0;
}
-class Service : public Firebird::StdIface<Firebird::IService, FB_I_SERVICE_VERSION>
+class Service : public Firebird::RefCntIface<Firebird::IService, FB_SERVICE_VERSION>
{
public:
// IService implementation
@@ -482,7 +482,7 @@
return 0;
}
-class Provider : public Firebird::StdPlugin<Firebird::IProvider, FB_I_PROVIDER_VERSION>
+class Provider : public Firebird::StdPlugin<Firebird::IProvider, FB_PROVIDER_VERSION>
{
public:
explicit Provider(IPluginConfig*)
Modified: firebird/trunk/src/utilities/gsec/gsec.cpp
===================================================================
--- firebird/trunk/src/utilities/gsec/gsec.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/utilities/gsec/gsec.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -252,7 +252,7 @@
fb_assert(user_data->trustedUser.entered());
if (user_data->trustedUser.entered())
{
- class GsecInfo : public Firebird::StackIface<Auth::ILogonInfo>
+ class GsecInfo : public Firebird::AutoIface<Auth::ILogonInfo, FB_AUTH_LOGON_INFO_VERSION>
{
public:
GsecInfo(const char* pTrustedUser, const char* pRole, int pTrustedRole,
@@ -335,7 +335,7 @@
}
}
- class Display : public Firebird::StackIface<Auth::IListUsers>
+ class Display : public Firebird::AutoIface<Auth::IListUsers, FB_AUTH_LIST_USERS_VERSION>
{
public:
explicit Display(tsec* t)
Modified: firebird/trunk/src/utilities/ntrace/PluginLogWriter.h
===================================================================
--- firebird/trunk/src/utilities/ntrace/PluginLogWriter.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/utilities/ntrace/PluginLogWriter.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -47,7 +47,7 @@
#include <sys/stat.h>
-class PluginLogWriter : public Firebird::StdIface<TraceLogWriter, FB_TRACE_LOG_WRITER_VERSION>
+class PluginLogWriter : public Firebird::RefCntIface<TraceLogWriter, FB_TRACE_LOG_WRITER_VERSION>
{
public:
PluginLogWriter(const char* fileName, size_t maxSize);
Modified: firebird/trunk/src/utilities/ntrace/TracePluginImpl.h
===================================================================
--- firebird/trunk/src/utilities/ntrace/TracePluginImpl.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/utilities/ntrace/TracePluginImpl.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -44,7 +44,7 @@
// Bring in off_t
#include <sys/types.h>
-class TracePluginImpl : public Firebird::StdIface<TracePlugin, FB_TRACE_PLUGIN_VERSION>
+class TracePluginImpl : public Firebird::RefCntIface<TracePlugin, FB_TRACE_PLUGIN_VERSION>
{
public:
// Serialize exception to TLS buffer to return it to user
Modified: firebird/trunk/src/yvalve/DistributedTransaction.cpp
===================================================================
--- firebird/trunk/src/yvalve/DistributedTransaction.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/yvalve/DistributedTransaction.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -43,7 +43,7 @@
namespace {
-class DTransaction : public StdIface<ITransaction, FB_I_TRANSACTION_VERSION>
+class DTransaction : public RefCntIface<ITransaction, FB_TRANSACTION_VERSION>
{
public:
DTransaction()
@@ -178,7 +178,7 @@
return true;
}
-class Dtc : public StackIface<IDtc>
+class Dtc : public AutoIface<IDtc, FB_DTC_VERSION>
{
public:
// IDtc implementation
Modified: firebird/trunk/src/yvalve/MasterImplementation.cpp
===================================================================
--- firebird/trunk/src/yvalve/MasterImplementation.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/yvalve/MasterImplementation.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -51,7 +51,7 @@
// getStatus()
//
-class UserStatus : public Firebird::DisposeIface<Firebird::BaseStatus>
+class UserStatus : public Firebird::DisposeIface<Firebird::BaseStatus, FB_STATUS_VERSION>
{
private:
// IStatus implementation
@@ -106,7 +106,7 @@
GlobalPtr<RWLock> mapLock;
}
-int FB_CARG MasterImplementation::upgradeInterface(IInterface* toUpgrade,
+int FB_CARG MasterImplementation::upgradeInterface(IVersioned* toUpgrade,
int desiredVersion,
void* missingFunctionClass)
{
@@ -466,7 +466,7 @@
} // namespace
-class TimerImplementation : public StackIface<ITimerControl>
+class TimerImplementation : public AutoIface<ITimerControl, FB_TIMER_CONTROL_VERSION>
{
public:
// ITimerControl implementation
Modified: firebird/trunk/src/yvalve/MasterImplementation.h
===================================================================
--- firebird/trunk/src/yvalve/MasterImplementation.h 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/yvalve/MasterImplementation.h 2011-05-19 16:24:46 UTC (rev 52968)
@@ -37,14 +37,14 @@
{
extern Firebird::IProvider* dispatcherPtr;
- class MasterImplementation : public Firebird::StackIface<Firebird::IMaster>
+ class MasterImplementation : public Firebird::AutoIface<Firebird::IMaster, FB_MASTER_VERSION>
{
public:
// IMaster implementation
Firebird::IStatus* FB_CARG getStatus();
Firebird::IProvider* FB_CARG getDispatcher();
Firebird::IPluginManager* FB_CARG getPluginManager();
- int FB_CARG upgradeInterface(Firebird::IInterface* toUpgrade, int desiredVersion, void* missingFunctionClass);
+ int FB_CARG upgradeInterface(Firebird::IVersioned* toUpgrade, int desiredVersion, void* missingFunctionClass);
const char* FB_CARG circularAlloc(const char* s, size_t len, intptr_t thr);
Firebird::ITimerControl* FB_CARG getTimerControl();
Firebird::IAttachment* registerAttachment(Firebird::IProvider* provider,
Modified: firebird/trunk/src/yvalve/PluginManager.cpp
===================================================================
--- firebird/trunk/src/yvalve/PluginManager.cpp 2011-05-19 11:38:38 UTC (rev 52967)
+++ firebird/trunk/src/yvalve/PluginManager.cpp 2011-05-19 16:24:46 UTC (rev 52968)
@@ -126,10 +126,10 @@
bool flShutdown = false;
- class ConfigParameterAccess : public StdIface<IConfigEntry, FB_I_CONFIG_PARAMETER_VERSION>
+ class ConfigParameterAccess : public RefCntIface<IConfigEntry, FB_CONFIG_PARAMETER_VERSION>
{
public:
- ConfigParameterAccess(IInterface* c, const ConfigFile::Parameter* p) : cf(c), par(p) { }
+ ConfigParameterAccess(IRefCounted* c, const ConfigFile::Parameter* p) : cf(c), par(p) { }
// IConfigEntry implementation
const char* FB_CARG getName()
@@ -156,11 +156,11 @@
}
private:
- RefPtr<IInterface> cf;
+ RefPtr<IRefCounted> cf;
const ConfigFile::Parameter* par;
};
- class ConfigAccess : public StdIface<IConfig, FB_I_CONFIG_VERSION>
+ class ConfigAccess : public RefCntIface<IConfig, FB_CONFIG_VERSION>
{
public:
ConfigAccess(RefPtr<ConfigFile> c) : confFile(c) { }
@@ -338,11 +338,6 @@
}
*prev = next;
- for (unsigned int i = 0; i < regPlugins.getCount(); ++i)
- {
- regPlugins[i].factory->dispose();
- }
-
if (cleanup)
{
cleanup->doClean();
@@ -453,7 +448,7 @@
};
// Delays destruction of ConfiguredPlugin instance
- class PluginDestroyTimer : public Firebird::StdIface<Firebird::ITimer, FB_I_TIMER_VERSION>
+ class PluginDestroyTimer : public RefCntIface<ITimer, FB_TIMER_VERSION>
{
public:
PluginDestroyTimer(ConfiguredPlugin* cp)
@@ -480,7 +475,7 @@
};
// Provides per-database configuration from aliases.conf.
- class FactoryParameter : public StdIface<IPluginConfig, FB_FACTORY_PARAMETER_VERSION>
+ class FactoryParameter : public RefCntIface<IPluginConfig, FB_PLUGIN_CONFIG_VERSION>
{
public:
FactoryParameter(ConfiguredPlugin* cp, IFirebirdConf* fc)
@@ -633,7 +628,7 @@
}
// Provides access to plugins of given type / name.
- class PluginSet : public StdI...
[truncated message content] |