00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #pragma once
00022
00023 #include <drizzled/plugin/transactional_storage_engine.h>
00024 #include <drizzled/plugin/xa_resource_manager.h>
00025
00026 #include <drizzled/visibility.h>
00027
00028 namespace drizzled
00029 {
00030
00031 class XID;
00032
00033 namespace plugin
00034 {
00035
00049 class DRIZZLED_API XaStorageEngine :
00050 public TransactionalStorageEngine,
00051 public XaResourceManager
00052 {
00053 public:
00054 XaStorageEngine(const std::string name_arg,
00055 const std::bitset<HTON_BIT_SIZE> &flags_arg= HTON_NO_FLAGS);
00056
00057 virtual ~XaStorageEngine();
00058
00059 int startTransaction(Session *session, start_transaction_option_t options)
00060 {
00061 TransactionServices &transaction_services= TransactionServices::singleton();
00062 transaction_services.registerResourceForTransaction(*session, this, this, this);
00063 return doStartTransaction(session, options);
00064 }
00065
00066 void startStatement(Session *session)
00067 {
00068 TransactionServices &transaction_services= TransactionServices::singleton();
00069 transaction_services.registerResourceForStatement(*session, this, this, this);
00070 doStartStatement(session);
00071 }
00072
00073
00074
00075
00076
00077 bool participatesInSqlTransaction() const
00078 {
00079 return true;
00080 }
00081 bool participatesInXaTransaction() const
00082 {
00083 return true;
00084 }
00085 bool alwaysRegisterForXaTransaction() const
00086 {
00087 return false;
00088 }
00089
00090
00091 static bool addPlugin(plugin::XaStorageEngine *engine);
00092 static void removePlugin(plugin::XaStorageEngine *engine);
00093
00094 private:
00095
00096
00097
00098
00099
00100
00101
00102
00103
00104
00105
00106
00107
00108
00109
00110
00111
00112 virtual int doStartTransaction(Session *session, start_transaction_option_t options)
00113 {
00114 (void) session;
00115 (void) options;
00116 return 0;
00117 }
00118
00119
00120
00121
00122
00123 virtual void doStartStatement(Session *session)
00124 {
00125 (void) session;
00126 }
00127 };
00128
00129 }
00130 }
00131