summaryrefslogtreecommitdiffstats
path: root/sql/events.h
diff options
context:
space:
mode:
Diffstat (limited to 'sql/events.h')
-rw-r--r--sql/events.h164
1 files changed, 164 insertions, 0 deletions
diff --git a/sql/events.h b/sql/events.h
new file mode 100644
index 00000000..2fb13d7c
--- /dev/null
+++ b/sql/events.h
@@ -0,0 +1,164 @@
+#ifndef _EVENT_H_
+#define _EVENT_H_
+/* Copyright (c) 2004, 2013, Oracle and/or its affiliates. All rights reserved.
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; version 2 of the License.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1335 USA */
+
+/**
+ @defgroup Event_Scheduler Event Scheduler
+ @ingroup Runtime_Environment
+ @{
+
+ @file events.h
+
+ A public interface of Events_Scheduler module.
+*/
+
+#ifdef HAVE_PSI_INTERFACE
+extern PSI_mutex_key key_event_scheduler_LOCK_scheduler_state;
+extern PSI_cond_key key_event_scheduler_COND_state;
+extern PSI_thread_key key_thread_event_scheduler, key_thread_event_worker;
+#endif /* HAVE_PSI_INTERFACE */
+
+extern PSI_memory_key key_memory_event_basic_root;
+
+/* Always defined, for SHOW PROCESSLIST. */
+extern PSI_stage_info stage_waiting_on_empty_queue;
+extern PSI_stage_info stage_waiting_for_next_activation;
+extern PSI_stage_info stage_waiting_for_scheduler_to_stop;
+
+#include "sql_string.h" /* LEX_CSTRING */
+#include "my_time.h" /* interval_type */
+
+class Event_db_repository;
+class Event_parse_data;
+class Event_queue;
+class Event_scheduler;
+struct TABLE_LIST;
+class THD;
+typedef class Item COND;
+
+int
+sortcmp_lex_string(const LEX_CSTRING *s, const LEX_CSTRING *t,
+ const CHARSET_INFO *cs);
+
+/**
+ @brief A facade to the functionality of the Event Scheduler.
+
+ Every public operation against the scheduler has to be executed via the
+ interface provided by a static method of this class. No instance of this
+ class is ever created and it has no non-static data members.
+
+ The life cycle of the Events module is the following:
+
+ At server start up:
+ init_mutexes() -> init()
+ When the server is running:
+ create_event(), drop_event(), start_or_stop_event_scheduler(), etc
+ At shutdown:
+ deinit(), destroy_mutexes().
+
+ The peculiar initialization and shutdown cycle is an adaptation to the
+ outside server startup/shutdown framework and mimics the rest of MySQL
+ subsystems (ACL, time zone tables, etc).
+*/
+
+class Events
+{
+public:
+ /*
+ the following block is to support --event-scheduler command line option
+ and the @@global.event_scheduler SQL variable.
+ See sys_var.cc
+ */
+ enum enum_opt_event_scheduler { EVENTS_OFF, EVENTS_ON, EVENTS_DISABLED,
+ EVENTS_ORIGINAL };
+ /* Protected using LOCK_global_system_variables only. */
+ static ulong opt_event_scheduler, startup_state;
+ static ulong inited;
+ static bool check_if_system_tables_error();
+ static bool start(int *err_no);
+ static bool stop();
+
+public:
+ /* A hack needed for Event_queue_element */
+ static Event_db_repository *
+ get_db_repository() { return db_repository; }
+
+ static bool init(THD *thd, bool opt_noacl);
+
+ static void
+ deinit();
+
+ static void
+ init_mutexes();
+
+ static void
+ destroy_mutexes();
+
+ static bool
+ create_event(THD *thd, Event_parse_data *parse_data);
+
+ static bool
+ update_event(THD *thd, Event_parse_data *parse_data,
+ LEX_CSTRING *new_dbname, LEX_CSTRING *new_name);
+
+ static bool
+ drop_event(THD *thd, const LEX_CSTRING *dbname, const LEX_CSTRING *name,
+ bool if_exists);
+
+ static void
+ drop_schema_events(THD *thd, const char *db);
+
+ static bool
+ show_create_event(THD *thd, const LEX_CSTRING *dbname,
+ const LEX_CSTRING *name);
+
+ /* Needed for both SHOW CREATE EVENT and INFORMATION_SCHEMA */
+ static int
+ reconstruct_interval_expression(String *buf, interval_type interval,
+ longlong expression);
+
+ static int
+ fill_schema_events(THD *thd, TABLE_LIST *tables, COND * /* cond */);
+
+ static void
+ dump_internal_status();
+
+ static void set_original_state(ulong startup_state_org)
+ {
+ startup_state= startup_state_org;
+ }
+
+private:
+
+ static bool
+ load_events_from_db(THD *thd);
+
+private:
+ static Event_queue *event_queue;
+ static Event_scheduler *scheduler;
+ static Event_db_repository *db_repository;
+
+private:
+ /* Prevent use of these */
+ Events(const Events &);
+ void operator=(Events &);
+};
+
+/**
+ @} (end of group Event Scheduler)
+*/
+
+#endif /* _EVENT_H_ */