mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
Core implementation - Extended the sql grammar to support creation of system triggers on startup/shutdown - System triggers metadata is stored in the table mysql.event - Events and system triggers share the same name space since both are stored in the table mysql.event declared with the PRIMARY KEY (`db`,`name`). In result, attempt to create an event with the same name as existent trigger and vice versa results in failure with the new error ER_TRG_EVENT_CONFLICTS_NAME - Since system triggers metadata is stored in the mysql.event table, on handling the DROP TRIGGER statement the table mysql.event now is opened - System triggers can be created only by users with the SUPER privilege - Added the option --sys_triggers for mysqldump to dump system triggers. The option is turned off by default. In case this option is on, mysqldump first dump the table 'mysql' unconditionally, regardless whether it was listed in the option --ignore-database
139 lines
3.0 KiB
C++
139 lines
3.0 KiB
C++
/*
|
|
Copyright (c) 2008, 2011, Oracle and/or its affiliates.
|
|
|
|
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 */
|
|
|
|
#ifndef _EVENT_PARSE_DATA_H_
|
|
#define _EVENT_PARSE_DATA_H_
|
|
|
|
#include "sql_alloc.h"
|
|
|
|
class Item;
|
|
class THD;
|
|
class sp_name;
|
|
|
|
#define EVEX_GET_FIELD_FAILED -2
|
|
#define EVEX_BAD_PARAMS -5
|
|
#define EVEX_MICROSECOND_UNSUP -6
|
|
#define EVEX_MAX_INTERVAL_VALUE 1000000000L
|
|
|
|
class Event_parse_data : public Sql_alloc
|
|
{
|
|
public:
|
|
/*
|
|
ENABLED = feature can function normally (is turned on)
|
|
SLAVESIDE_DISABLED = feature is turned off on slave
|
|
DISABLED = feature is turned off
|
|
*/
|
|
enum enum_status
|
|
{
|
|
ENABLED = 1,
|
|
DISABLED,
|
|
SLAVESIDE_DISABLED
|
|
};
|
|
|
|
enum enum_on_completion
|
|
{
|
|
/*
|
|
On CREATE EVENT, DROP is the DEFAULT as per the docs.
|
|
On ALTER EVENT, "no change" is the DEFAULT.
|
|
*/
|
|
ON_COMPLETION_DEFAULT = 0,
|
|
ON_COMPLETION_DROP,
|
|
ON_COMPLETION_PRESERVE
|
|
};
|
|
|
|
enum enum_kind
|
|
{
|
|
SCHEDULE_EVENT= 0x01, SYS_TRG_ON_STARTUP= 0x02, SYS_TRG_ON_SHUTDOWN= 0x04,
|
|
SYS_TRG_ON_LOGON= 0x08, SYS_TRG_ON_LOGOFF= 0x10, SYS_TRG_ON_DDL= 0x20
|
|
};
|
|
|
|
int on_completion;
|
|
int status;
|
|
bool status_changed;
|
|
uint32 originator;
|
|
/*
|
|
do_not_create will be set if STARTS time is in the past and
|
|
on_completion == ON_COMPLETION_DROP.
|
|
*/
|
|
bool do_not_create;
|
|
|
|
bool body_changed;
|
|
|
|
LEX_CSTRING dbname;
|
|
LEX_CSTRING name;
|
|
LEX_CSTRING definer;// combination of user and host
|
|
LEX_CSTRING comment;
|
|
|
|
Item* item_starts;
|
|
Item* item_ends;
|
|
Item* item_execute_at;
|
|
|
|
my_time_t starts;
|
|
my_time_t ends;
|
|
my_time_t execute_at;
|
|
bool starts_null;
|
|
bool ends_null;
|
|
bool execute_at_null;
|
|
|
|
sp_name *identifier;
|
|
Item* item_expression;
|
|
longlong expression;
|
|
interval_type interval;
|
|
|
|
static Event_parse_data *
|
|
new_instance(THD *thd);
|
|
|
|
bool
|
|
check_parse_data(THD *thd);
|
|
|
|
bool
|
|
check_dates(THD *thd, int previous_on_completion);
|
|
|
|
private:
|
|
|
|
void
|
|
init_definer(THD *thd);
|
|
|
|
void
|
|
init_name(THD *thd, sp_name *spn);
|
|
|
|
int
|
|
init_execute_at(THD *thd);
|
|
|
|
int
|
|
init_interval(THD *thd);
|
|
|
|
int
|
|
init_starts(THD *thd);
|
|
|
|
int
|
|
init_ends(THD *thd);
|
|
|
|
Event_parse_data();
|
|
~Event_parse_data();
|
|
|
|
void
|
|
report_bad_value(const char *item_name, Item *bad_item);
|
|
|
|
void
|
|
check_if_in_the_past(THD *thd, my_time_t ltime_utc);
|
|
|
|
Event_parse_data(const Event_parse_data &); /* Prevent use of these */
|
|
void check_originator_id(THD *thd);
|
|
void operator=(Event_parse_data &);
|
|
};
|
|
#endif
|