1 #ifndef _EVENT_DATA_OBJECTS_H_
2 #define _EVENT_DATA_OBJECTS_H_
3 /* Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
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-1301  USA */
17 
18 /**
19   @addtogroup Event_Scheduler
20   @{
21 
22   @file event_data_objects.h
23 */
24 
25 #include "event_parse_data.h"
26 #include "thr_lock.h"                           /* thr_lock_type */
27 
28 class Field;
29 class THD;
30 class Time_zone;
31 struct TABLE;
32 
33 class Event_queue_element_for_exec
34 {
35 public:
Event_queue_element_for_exec()36   Event_queue_element_for_exec(){};
37   ~Event_queue_element_for_exec();
38 
39   bool
40   init(LEX_STRING dbname, LEX_STRING name);
41 
42   LEX_STRING dbname;
43   LEX_STRING name;
44   bool dropped;
45   THD *thd;
46 
47 private:
48   /* Prevent use of these */
49   Event_queue_element_for_exec(const Event_queue_element_for_exec &);
50   void operator=(Event_queue_element_for_exec &);
51 };
52 
53 
54 class Event_basic
55 {
56 protected:
57   MEM_ROOT mem_root;
58 
59 public:
60 
61   LEX_STRING dbname;
62   LEX_STRING name;
63   LEX_STRING definer;// combination of user and host
64 
65   Time_zone *time_zone;
66 
67   Event_basic();
68   virtual ~Event_basic();
69 
70   virtual bool
71   load_from_row(THD *thd, TABLE *table) = 0;
72 
73 protected:
74   bool
75   load_string_fields(Field **fields, ...);
76 
77   bool
78   load_time_zone(THD *thd, const LEX_STRING tz_name);
79 };
80 
81 
82 
83 class Event_queue_element : public Event_basic
84 {
85 public:
86   int on_completion;
87   int status;
88   longlong originator;
89 
90   my_time_t last_executed;
91   my_time_t execute_at;
92   my_time_t starts;
93   my_time_t ends;
94   my_bool starts_null;
95   my_bool ends_null;
96   my_bool execute_at_null;
97 
98   longlong expression;
99   interval_type interval;
100 
101   bool dropped;
102 
103   uint execution_count;
104 
105   Event_queue_element();
106   virtual ~Event_queue_element();
107 
108   virtual bool
109   load_from_row(THD *thd, TABLE *table);
110 
111   bool
112   compute_next_execution_time();
113 
114   void
115   mark_last_executed(THD *thd);
116 };
117 
118 
119 class Event_timed : public Event_queue_element
120 {
121   Event_timed(const Event_timed &);	/* Prevent use of these */
122   void operator=(Event_timed &);
123 
124 public:
125   LEX_STRING body;
126 
127   LEX_STRING definer_user;
128   LEX_STRING definer_host;
129 
130   LEX_STRING comment;
131 
132   ulonglong created;
133   ulonglong modified;
134 
135   ulong sql_mode;
136 
137   class Stored_program_creation_ctx *creation_ctx;
138   LEX_STRING body_utf8;
139 
140   Event_timed();
141   virtual ~Event_timed();
142 
143   void
144   init();
145 
146   virtual bool
147   load_from_row(THD *thd, TABLE *table);
148 
149   int
150   get_create_event(THD *thd, String *buf);
151 };
152 
153 
154 class Event_job_data : public Event_basic
155 {
156 public:
157   LEX_STRING body;
158   LEX_STRING definer_user;
159   LEX_STRING definer_host;
160 
161   ulong sql_mode;
162 
163   class Stored_program_creation_ctx *creation_ctx;
164 
165   Event_job_data();
166 
167   virtual bool
168   load_from_row(THD *thd, TABLE *table);
169 
170   bool
171   execute(THD *thd, bool drop);
172 private:
173   bool
174   construct_sp_sql(THD *thd, String *sp_sql);
175   bool
176   construct_drop_event_sql(THD *thd, String *sp_sql);
177 
178   Event_job_data(const Event_job_data &);       /* Prevent use of these */
179   void operator=(Event_job_data &);
180 };
181 
182 
183 /* Compares only the schema part of the identifier */
184 bool
185 event_basic_db_equal(LEX_STRING db, Event_basic *et);
186 
187 /* Compares the whole identifier*/
188 bool
189 event_basic_identifier_equal(LEX_STRING db, LEX_STRING name, Event_basic *b);
190 
191 /**
192   @} (End of group Event_Scheduler)
193 */
194 
195 #endif /* _EVENT_DATA_OBJECTS_H_ */
196