diff options
author | Tatiana A. Nurnberg <azundris@mysql.com> | 2008-08-18 13:05:51 +0200 |
---|---|---|
committer | Tatiana A. Nurnberg <azundris@mysql.com> | 2008-08-18 13:05:51 +0200 |
commit | 02f305516f3663533ca9abd68e73a64f7da51455 (patch) | |
tree | a90a32a0037c8098ecdf38ab6760130373cb10c8 /sql/event_parse_data.h | |
parent | e3320457e11fdfc2ac76d75dfb7e8a88d535b97b (diff) | |
download | mariadb-git-02f305516f3663533ca9abd68e73a64f7da51455.tar.gz |
Bug#35981: ALTER EVENT causes the server to change the PRESERVE option.
If [NOT] PRESERVE was not given, parser always defaulted to NOT
PRESERVE, making it impossible for the "not given = no change"
rule to work in ALTER EVENT. Leaving out the PRESERVE-clause
defaults to NOT PRESERVE on CREATE now, and to "no change" in
ALTER.
mysql-test/r/events_2.result:
show that giving no PRESERVE-clause to ALTER EVENT
results in no change. show that giving no PRESERVE-clause
to CREATE EVENT defaults to NOT PRESERVE as per the docs.
Show specifically that this is also handled correctly when
trying to ALTER EVENTs into the past.
mysql-test/t/events_2.test:
show that giving no PRESERVE-clause to ALTER EVENT
results in no change. show that giving no PRESERVE-clause
to CREATE EVENT defaults to NOT PRESERVE as per the docs.
Show specifically that this is also handled correctly when
trying to ALTER EVENTs into the past.
sql/event_db_repository.cc:
If ALTER EVENT was given no PRESERVE-clause (meaning "no change"),
we don't know the previous PRESERVE-setting by the time we check
the parse-data. If ALTER EVENT was given dates that are in the past,
we don't know how to react, lacking the PRESERVE-setting. Heal this
by running the check later when we have actually read the previous
EVENT-data.
sql/event_parse_data.cc:
Change default for ON COMPLETION to indicate, "not specified."
Also defer throwing errors when ALTER EVENT is given dates in
the past but not PRESERVE-clause until we know the previous
PRESERVE-value.
sql/event_parse_data.h:
Add third state for ON COMPLETION [NOT] PRESERVE (preserve,
don't, not specified).
Make check_dates() public so we can defer this check until
deeper in the callstack where we have all the required data.
sql/sql_yacc.yy:
If CREATE EVENT is not given ON COMPLETION [NOT] PRESERVE,
we default to NOT, as per the docs.
Diffstat (limited to 'sql/event_parse_data.h')
-rw-r--r-- | sql/event_parse_data.h | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/sql/event_parse_data.h b/sql/event_parse_data.h index 221bf92664f..87a800c2078 100644 --- a/sql/event_parse_data.h +++ b/sql/event_parse_data.h @@ -38,7 +38,12 @@ public: enum enum_on_completion { - ON_COMPLETION_DROP = 1, + /* + 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 }; @@ -80,6 +85,9 @@ public: bool check_parse_data(THD *thd); + bool + check_dates(THD *thd, int previous_on_completion); + private: void |