diff options
author | unknown <andrey@example.com> | 2006-09-01 13:08:44 +0200 |
---|---|---|
committer | unknown <andrey@example.com> | 2006-09-01 13:08:44 +0200 |
commit | da4734c3bcaacdab12832cad0419453bed2b805b (patch) | |
tree | c07ff5deb45ddb410295350324832ffabae0b2f9 /sql/set_var.cc | |
parent | f18ec676a0b0be35068e2c464b39d92ac143ec5c (diff) | |
download | mariadb-git-da4734c3bcaacdab12832cad0419453bed2b805b.tar.gz |
WL#3337 (Event scheduler new architecture)
This is a post-review patch.
Fixes the typelib implementation, available only in 5.1.11.
--event-scheduler cmdline : DISABLED | ON | OFF | 0 | 1
DISABLED - makes the scheduler unavailable during the server run
(ON|1)- When the server is started the scheduler will be started. It can
be stopped and restarted by setting appropriate values to
GLOBAL event_scheduler
(OFF|0)- When the server is started, the scheduler won't be started. It
can be started and again stopped by setting appropriate values to
GLOBAL event_scheduler. _DEFAULT_ value
The GLOBAL variable event_scheduler can have the following values:
OFF | ON | 0 | 1
DISABLED is not possible and every attempt will end with an error that
it's not a valid value for the variable.
OFF | 0 - This is the pre-5.1.11 behavior - The scheduler stops, if not
already stopped, and can be started again by setting
the value of the variable to ON|1.
ON | 1 - This is the pre-5.1.11 behavior - The scheduler starts, if not
already started, and can be stopped again by setting the value
of the variable to OFF|0.
mysql-test/r/events.result:
update result
mysql-test/r/events_bugs.result:
update result
mysql-test/r/events_logs_tests.result:
update result
mysql-test/r/events_restart_phase1.result:
update result
mysql-test/r/events_restart_phase3.result:
update result
mysql-test/r/events_scheduling.result:
update result
mysql-test/r/events_stress.result:
update result
mysql-test/t/events.test:
update test:
2 -> off
1 -> on
mysql-test/t/events_bugs.test:
update test:
2 -> off
1 -> on
mysql-test/t/events_logs_tests.test:
update test:
2 -> off
1 -> on
mysql-test/t/events_restart_phase1.test:
update test:
2 -> off
1 -> on
mysql-test/t/events_restart_phase2-master.opt:
update master file : 1 => on
mysql-test/t/events_scheduling.test:
update test:
2 -> off
1 -> on
add tests for event_scheduler global variable representation from
SHOW VARIABLES.
mysql-test/t/events_stress.test:
update test:
2 -> off
1 -> on
sql/events.cc:
Implement two different TYPELIBs for --event-scheduler cmd line
option and for GLOBAL variable event_scheduler
--event-scheduler cmdline : DISABLED | ON | OFF | 0 | 1
DISABLED - makes the scheduler unavailable during the server run
(ON|1)- When the server is started the scheduler will be started. It can
be stopped and restarted by setting appropriate values to
GLOBAL event_scheduler
(OFF|0)- When the server is started, the scheduler won't be started. It
can be started and again stopped by setting appropriate values to
GLOBAL event_scheduler. _DEFAULT_ value
The GLOBAL variable event_scheduler can have the following values:
OFF | ON | 0 | 1
DISABLED is not possible and every attempt will end with an error that
it's not a valid value for the variable.
OFF | 0 - This is the pre-5.1.11 behavior - The scheduler stops, if not
already stopped, and can be started again by setting
the value of the variable to ON|1.
ON | 1 - This is the pre-5.1.11 behavior - The scheduler starts, if not
already started, and can be stopped again by setting the value
of the variable to OFF|0.
sql/events.h:
additional TYPELIB for GLOBAL event_scheduler
sql/mysqld.cc:
--event-scheduler should be checked against a TYPELIB and
therefore should be GET_STR, as well as we make the parameter optional.
When not provided OFF|0 is used.
sql/set_var.cc:
Implement typelib for event_scheduler variable.
If allows both INT_RESULT -> 0 | 1
and STRING_RESULT -> OFF | ON
The variable is shown as DISABLED | ON | OFF
sql/set_var.h:
Implement typelib, which expects both STRING and INT,
for event_scheduler.
Diffstat (limited to 'sql/set_var.cc')
-rw-r--r-- | sql/set_var.cc | 42 |
1 files changed, 24 insertions, 18 deletions
diff --git a/sql/set_var.cc b/sql/set_var.cc index f10df7fa6f8..d2764e13ae3 100644 --- a/sql/set_var.cc +++ b/sql/set_var.cc @@ -3914,6 +3914,7 @@ bool sys_var_thd_dbug::update(THD *thd, set_var *var) return 0; } + byte *sys_var_thd_dbug::value_ptr(THD *thd, enum_var_type type, LEX_STRING *b) { char buf[256]; @@ -3925,6 +3926,12 @@ byte *sys_var_thd_dbug::value_ptr(THD *thd, enum_var_type type, LEX_STRING *b) } +bool sys_var_event_scheduler::check(THD *thd, set_var *var) +{ + return check_enum(thd, var, &Events::var_typelib); +} + + /* The update method of the global variable event_scheduler. If event_scheduler is switched from 0 to 1 then the scheduler main @@ -3946,29 +3953,27 @@ sys_var_event_scheduler::update(THD *thd, set_var *var) int res; /* here start the thread if not running. */ DBUG_ENTER("sys_var_event_scheduler::update"); - if (Events::opt_event_scheduler == 0) + if (Events::opt_event_scheduler == Events::EVENTS_DISABLED) { - my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--event-scheduler=0"); + my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), "--event-scheduler=DISABLED"); DBUG_RETURN(TRUE); } DBUG_PRINT("new_value", ("%lu", (bool)var->save_result.ulong_value)); - if (var->save_result.ulonglong_value < 1 || - var->save_result.ulonglong_value > 2) - { - char buf[64]; - my_error(ER_WRONG_VALUE_FOR_VAR, MYF(0), "event_scheduler", - llstr(var->save_result.ulonglong_value, buf)); - DBUG_RETURN(TRUE); - } - if (var->save_result.ulonglong_value == 1) + Item_result var_type= var->value->result_type(); + + if (var->save_result.ulong_value == Events::EVENTS_ON) res= Events::get_instance()->start_execution_of_events(); - else + else if (var->save_result.ulong_value == Events::EVENTS_OFF) res= Events::get_instance()->stop_execution_of_events(); - + else + { + DBUG_ASSERT(0); + } if (res) my_error(ER_EVENT_SET_VAR_ERROR, MYF(0)); + DBUG_RETURN((bool) res); } @@ -3976,14 +3981,15 @@ sys_var_event_scheduler::update(THD *thd, set_var *var) byte *sys_var_event_scheduler::value_ptr(THD *thd, enum_var_type type, LEX_STRING *base) { - if (Events::opt_event_scheduler == 0) - thd->sys_var_tmp.long_value= 0; + int state; + if (Events::opt_event_scheduler == Events::EVENTS_DISABLED) + state= Events::EVENTS_DISABLED; // This should be DISABLED else if (Events::get_instance()->is_execution_of_events_started()) - thd->sys_var_tmp.long_value= 1; + state= Events::EVENTS_ON; // This should be ON else - thd->sys_var_tmp.long_value= 2; + state= Events::EVENTS_OFF; // This should be OFF - return (byte*) &thd->sys_var_tmp; + return (byte*) Events::opt_typelib.type_names[state]; } |