From 06eaf7232e9a920468c0f8d74dcf2fe8b555501c Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 14:24:36 +0200 Subject: Adding upstream version 1:10.11.6. Signed-off-by: Daniel Baumann --- sql/events.h | 164 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 164 insertions(+) create mode 100644 sql/events.h (limited to 'sql/events.h') 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_ */ -- cgit v1.2.3