45 #include <drizzled/plugin/plugin.h>
54 typedef std::vector<EventObserver *> EventObserverVector;
55 typedef EventObserver* EventObserverPtr;
61 :
Plugin(name_arg,
"EventObserver")
66 BEFORE_CREATE_DATABASE, AFTER_CREATE_DATABASE,
67 BEFORE_DROP_DATABASE, AFTER_DROP_DATABASE,
74 BEFORE_DROP_TABLE, AFTER_DROP_TABLE,
75 BEFORE_RENAME_TABLE, AFTER_RENAME_TABLE,
78 BEFORE_INSERT_RECORD, AFTER_INSERT_RECORD,
79 BEFORE_UPDATE_RECORD, AFTER_UPDATE_RECORD,
80 BEFORE_DELETE_RECORD, AFTER_DELETE_RECORD,
86 static const char *eventName(EventType event)
90 case BEFORE_DROP_TABLE:
91 return "BEFORE_DROP_TABLE";
93 case AFTER_DROP_TABLE:
94 return "AFTER_DROP_TABLE";
96 case BEFORE_RENAME_TABLE:
97 return "BEFORE_RENAME_TABLE";
99 case AFTER_RENAME_TABLE:
100 return "AFTER_RENAME_TABLE";
102 case BEFORE_INSERT_RECORD:
103 return "BEFORE_INSERT_RECORD";
105 case AFTER_INSERT_RECORD:
106 return "AFTER_INSERT_RECORD";
108 case BEFORE_UPDATE_RECORD:
109 return "BEFORE_UPDATE_RECORD";
111 case AFTER_UPDATE_RECORD:
112 return "AFTER_UPDATE_RECORD";
114 case BEFORE_DELETE_RECORD:
115 return "BEFORE_DELETE_RECORD";
117 case AFTER_DELETE_RECORD:
118 return "AFTER_DELETE_RECORD";
120 case BEFORE_CREATE_DATABASE:
121 return "BEFORE_CREATE_DATABASE";
123 case AFTER_CREATE_DATABASE:
124 return "AFTER_CREATE_DATABASE";
126 case BEFORE_DROP_DATABASE:
127 return "BEFORE_DROP_DATABASE";
129 case AFTER_DROP_DATABASE:
130 return "AFTER_DROP_DATABASE";
132 case CONNECT_SESSION:
133 return "CONNECT_SESSION";
135 case DISCONNECT_SESSION:
136 return "DISCONNECT_SESSION";
138 case AFTER_STATEMENT:
139 return "AFTER_STATEMENT";
141 case BEFORE_STATEMENT:
142 return "BEFORE_STATEMENT";
144 case MAX_EVENT_COUNT:
159 virtual bool observeEventDo(
EventData &)= 0;
182 void registerEvent(
EventObserverList &observers, EventType event, int32_t position= 0);
188 static void registerTableEvents(
TableShare &table_share);
189 static void deregisterTableEvents(
TableShare &table_share);
195 static void registerSchemaEvents(
Session &session,
const std::string &db);
202 static void registerSessionEvents(
Session &session);
214 static bool connectSession(
Session &session);
215 static bool disconnectSession(
Session &session);
216 static bool beforeStatement(
Session &session);
217 static bool afterStatement(
Session &session);
223 static bool beforeInsertRecord(
Table &table,
unsigned char *buf);
224 static bool afterInsertRecord(
Table &table,
const unsigned char *buf,
int err);
225 static bool beforeDeleteRecord(
Table &table,
const unsigned char *buf);
226 static bool afterDeleteRecord(
Table &table,
const unsigned char *buf,
int err);
227 static bool beforeUpdateRecord(
Table &table,
const unsigned char *old_data,
unsigned char *new_data);
228 static bool afterUpdateRecord(
Table &table,
const unsigned char *old_data,
unsigned char *new_data,
int err);
234 static bool beforeCreateDatabase(
Session &session,
const std::string &db);
235 static bool afterCreateDatabase(
Session &session,
const std::string &db,
int err);
236 static bool beforeDropDatabase(
Session &session,
const std::string &db);
237 static bool afterDropDatabase(
Session &session,
const std::string &db,
int err);
239 static const EventObserverVector &getEventObservers(
void);
251 EventObserver::EventType event;
253 EventData(EventObserver::EventType event_arg):
260 virtual bool callEventObservers();
279 virtual bool callEventObservers();
281 static bool hasEvents(
Session &in_session);
289 const std::string &db;
293 session(session_arg),
298 virtual bool callEventObservers();
311 session(session_arg),
316 virtual bool callEventObservers();
318 static bool hasEvents(
Table &in_table);
325 const std::string &db;
337 const std::string &db;
351 const std::string &db;
363 const std::string &db;
420 SchemaEventData(EventObserver::BEFORE_DROP_TABLE, session_arg, table_arg.getSchemaName()),
433 SchemaEventData(EventObserver::AFTER_DROP_TABLE, session_arg, table_arg.getSchemaName()),
447 SchemaEventData(EventObserver::BEFORE_RENAME_TABLE, session_arg, from_arg.getSchemaName()),
462 SchemaEventData(EventObserver::AFTER_RENAME_TABLE, session_arg, from_arg.getSchemaName()),
476 TableEventData(EventObserver::BEFORE_INSERT_RECORD, session_arg, table_arg),
485 const unsigned char *row;
489 TableEventData(EventObserver::AFTER_INSERT_RECORD, session_arg, table_arg),
499 const unsigned char *row;
502 TableEventData(EventObserver::BEFORE_DELETE_RECORD, session_arg, table_arg),
511 const unsigned char *row;
515 TableEventData(EventObserver::AFTER_DELETE_RECORD, session_arg, table_arg),
525 const unsigned char *old_row;
526 unsigned char *new_row;
529 const unsigned char *old_row_arg,
530 unsigned char *new_row_arg):
531 TableEventData(EventObserver::BEFORE_UPDATE_RECORD, session_arg, table_arg),
532 old_row(old_row_arg),
541 const unsigned char *old_row;
542 const unsigned char *new_row;
546 const unsigned char *old_row_arg,
547 const unsigned char *new_row_arg,
549 TableEventData(EventObserver::AFTER_UPDATE_RECORD, session_arg, table_arg),
550 old_row(old_row_arg),
551 new_row(new_row_arg),