1 #ifndef _EVENT_DB_REPOSITORY_H_
2 #define _EVENT_DB_REPOSITORY_H_
3 /* Copyright (c) 2006, 2011, Oracle and/or its affiliates.
4 
5    This program is free software; you can redistribute it and/or modify
6    it under the terms of the GNU General Public License as published by
7    the Free Software Foundation; version 2 of the License.
8 
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12    GNU General Public License for more details.
13 
14    You should have received a copy of the GNU General Public License
15    along with this program; if not, write to the Free Software
16    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335  USA
17 */
18 
19 /**
20   @addtogroup Event_Scheduler
21   @{
22 
23   @file event_db_repository.h
24 
25   Data Dictionary related operations of Event Scheduler.
26 
27   This is a private header file of Events module. Please do not include it
28   directly. All public declarations of Events module should be stored in
29   events.h and event_data_objects.h.
30 */
31 
32 enum enum_events_table_field
33 {
34   ET_FIELD_DB = 0,
35   ET_FIELD_NAME,
36   ET_FIELD_BODY,
37   ET_FIELD_DEFINER,
38   ET_FIELD_EXECUTE_AT,
39   ET_FIELD_INTERVAL_EXPR,
40   ET_FIELD_TRANSIENT_INTERVAL,
41   ET_FIELD_CREATED,
42   ET_FIELD_MODIFIED,
43   ET_FIELD_LAST_EXECUTED,
44   ET_FIELD_STARTS,
45   ET_FIELD_ENDS,
46   ET_FIELD_STATUS,
47   ET_FIELD_ON_COMPLETION,
48   ET_FIELD_SQL_MODE,
49   ET_FIELD_COMMENT,
50   ET_FIELD_ORIGINATOR,
51   ET_FIELD_TIME_ZONE,
52   ET_FIELD_CHARACTER_SET_CLIENT,
53   ET_FIELD_COLLATION_CONNECTION,
54   ET_FIELD_DB_COLLATION,
55   ET_FIELD_BODY_UTF8,
56   ET_FIELD_COUNT /* a cool trick to count the number of fields :) */
57 };
58 
59 
60 int
61 events_table_index_read_for_db(THD *thd, TABLE *schema_table,
62                                TABLE *event_table);
63 
64 int
65 events_table_scan_all(THD *thd, TABLE *schema_table, TABLE *event_table);
66 
67 
68 class Event_basic;
69 class Event_parse_data;
70 
71 class Event_db_repository
72 {
73 public:
Event_db_repository()74   Event_db_repository(){}
75 
76   bool
77   create_event(THD *thd, Event_parse_data *parse_data,
78                bool *event_already_exists);
79   bool
80   update_event(THD *thd, Event_parse_data *parse_data, LEX_CSTRING *new_dbname,
81                LEX_CSTRING *new_name);
82 
83   bool
84   drop_event(THD *thd, const LEX_CSTRING *db, const LEX_CSTRING *name,
85              bool drop_if_exists);
86 
87   void
88   drop_schema_events(THD *thd, const LEX_CSTRING *schema);
89 
90   bool
91   find_named_event(const LEX_CSTRING *db, const LEX_CSTRING *name,
92                    TABLE *table);
93 
94   bool
95   load_named_event(THD *thd, const LEX_CSTRING *dbname,
96                    const LEX_CSTRING *name,
97                    Event_basic *et);
98 
99   static bool
100   open_event_table(THD *thd, enum thr_lock_type lock_type, TABLE **table);
101 
102   bool
103   fill_schema_events(THD *thd, TABLE_LIST *tables, const char *db);
104 
105   bool
106   update_timing_fields_for_event(THD *thd,
107                                  const LEX_CSTRING *event_db_name,
108                                  const LEX_CSTRING *event_name,
109                                  my_time_t last_executed,
110                                  ulonglong status);
111 public:
112   static bool
113   check_system_tables(THD *thd);
114 private:
115   bool
116   index_read_for_db_for_i_s(THD *thd, TABLE *schema_table, TABLE *event_table,
117                             const char *db);
118 
119   bool
120   table_scan_all_for_i_s(THD *thd, TABLE *schema_table, TABLE *event_table);
121 
122 private:
123   /* Prevent use of these */
124   Event_db_repository(const Event_db_repository &);
125   void operator=(Event_db_repository &);
126 };
127 
128 /**
129   @} (End of group Event_Scheduler)
130 */
131 #endif /* _EVENT_DB_REPOSITORY_H_ */
132