mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 12:02:42 +01:00
7f0386545b
This assert could be triggered if ALTER EVENT failed to load the event after altering it. Failing to load the event could for example happen because of KILL QUERY. The assert tested that the result of a failed load_named_event() was OP_LOAD_ERROR. However since load_named_event() returns bool, this assert did not make any sense. This patch therefore removes the assert, fixing the problem. The patch also removes enum_events_error_code since it was unused. No test case added. The bug fix is trivial and this bug was easily detected by RQG tests. Further, adding a MTR test case for this bug would require adding sync points to make the test case repeatable.
153 lines
4.2 KiB
C++
153 lines
4.2 KiB
C++
#ifndef _EVENT_H_
|
|
#define _EVENT_H_
|
|
/* Copyright (c) 2004, 2010, 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-1301 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_LOCK_event_metadata,
|
|
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 */
|
|
|
|
#include "sql_string.h" /* LEX_STRING */
|
|
#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;
|
|
typedef struct charset_info_st CHARSET_INFO;
|
|
|
|
int
|
|
sortcmp_lex_string(LEX_STRING s, LEX_STRING t, 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 };
|
|
/* Protected using LOCK_global_system_variables only. */
|
|
static ulong opt_event_scheduler;
|
|
static mysql_mutex_t LOCK_event_metadata;
|
|
static bool check_if_system_tables_error();
|
|
static bool start();
|
|
static bool stop();
|
|
|
|
public:
|
|
/* A hack needed for Event_queue_element */
|
|
static Event_db_repository *
|
|
get_db_repository() { return db_repository; }
|
|
|
|
static bool
|
|
init(my_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, bool if_exists);
|
|
|
|
static bool
|
|
update_event(THD *thd, Event_parse_data *parse_data,
|
|
LEX_STRING *new_dbname, LEX_STRING *new_name);
|
|
|
|
static bool
|
|
drop_event(THD *thd, LEX_STRING dbname, LEX_STRING name, bool if_exists);
|
|
|
|
static void
|
|
drop_schema_events(THD *thd, char *db);
|
|
|
|
static bool
|
|
show_create_event(THD *thd, LEX_STRING dbname, LEX_STRING 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();
|
|
|
|
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;
|
|
/* Set to TRUE if an error at start up */
|
|
static bool check_system_tables_error;
|
|
|
|
private:
|
|
/* Prevent use of these */
|
|
Events(const Events &);
|
|
void operator=(Events &);
|
|
};
|
|
|
|
/**
|
|
@} (end of group Event Scheduler)
|
|
*/
|
|
|
|
#endif /* _EVENT_H_ */
|