mirror of
https://github.com/MariaDB/server.git
synced 2025-05-05 16:59:35 +03:00
56 Commits
Author | SHA1 | Message | Date | |
---|---|---|---|---|
|
9fa9378b2e |
WL#3337 (Events new architecture)
This cut No 7 should finish the part of fixing the parsing of the events : - Event_timed is no more used during parsing. Less problems because it has a mutex. Event_parse_data class is used during parsing. It is suited only for this purpose. It's pretty lightweight - Late checking of data from parsing is being performed. This should solve the problems of nested events in SP or other events (for the situation of no nested bodies). Before if an ALTER EVENT was in a SP, then when the SP was compiled, and not executed, the actual init_xxx methods of Event_timed were called, which is wrong. - It could be a side effect of using a specialized class, but test events_stress is now 25% quicker. Cut No8 will start splitting Event_scheduler into 2 parts, the QUEUE will be moved to Event_queue. mysql-test/r/events.result: update result mysql-test/t/events.test: disabled is actually wrong, should be disable, but because of the early checking it was never parsed. sql/event_data_objects.cc: move add init_xxx methods from Event_timed to Event_parse_data Event_parse data does not need definer_user and definer_host in Event_timed::compile() do not use lex.et, well there is no more lex.et :) sql/event_data_objects.h: move parsing responsibilities from Event_timed to Event_parse_data sql/event_db_repository.cc: No more Event_timed comes from parsing but Event_parse_data The initialization of Item*-s from parsing is done late, and not during the actual parsing. This is the right way to go because if an ALTER EVENT is inside a SP or CREATE EVENT it should not be executed (initialized) during parsing, as it was done. sql/event_db_repository.h: No more Event_timed comes from parsing but Event_parse_data The initialization of Item*-s from parsing is done late, and not during the actual parsing. This is the right way to go because if an ALTER EVENT is inside a SP or CREATE EVENT it should not be executed (initialized) during parsing, as it was done. sql/event_scheduler.cc: No more Event_timed comes from parsing but Event_parse_data The initialization of Item*-s from parsing is done late, and not during the actual parsing. This is the right way to go because if an ALTER EVENT is inside a SP or CREATE EVENT it should not be executed (initialized) during parsing, as it was done. sql/event_scheduler.h: No more Event_timed comes from parsing but Event_parse_data The initialization of Item*-s from parsing is done late, and not during the actual parsing. This is the right way to go because if an ALTER EVENT is inside a SP or CREATE EVENT it should not be executed (initialized) during parsing, as it was done. sql/events.cc: No more Event_timed comes from parsing but Event_parse_data The initialization of Item*-s from parsing is done late, and not during the actual parsing. This is the right way to go because if an ALTER EVENT is inside a SP or CREATE EVENT it should not be executed (initialized) during parsing, as it was done. sql/events.h: No more Event_timed comes from parsing but Event_parse_data The initialization of Item*-s from parsing is done late, and not during the actual parsing. This is the right way to go because if an ALTER EVENT is inside a SP or CREATE EVENT it should not be executed (initialized) during parsing, as it was done. sql/sql_lex.cc: lex->et_compile_phase and lex->et are no more. Use lex->event_parse_data sql/sql_lex.h: lex->et_compile_phase and lex->et are no more. Use lex->event_parse_data sql/sql_parse.cc: lex->et_compile_phase and lex->et are no more. Use lex->event_parse_data ACL checks were moved inside the Events subsystem. Also ending of the transaction is performed only just before doing disk operation. Therefore only when needed. sql/sql_yacc.yy: lex->et and lex->et_parse_phase are no more Use the specialized for parsing Event_parse_data |
||
|
400276c2f5 |
WL#3337 (Events new architecture)
Cut 7 (refactoring) db_repository is no more embedded in the Events singleton. Therefore a change to Events_db_repository won't mean recompile of all files in the server which include events.h sql/event_data_objects.cc: db_repository is no more embedded in the Events singleton. Therefore a change to Events_db_repository won't mean recompile of all files in the server which include events.h sql/event_db_repository.cc: db_repository is no more embedded in the Events singleton. Therefore a change to Events_db_repository won't mean recompile of all files in the server which include events.h sql/events.cc: db_repository is no more embedded in the Events singleton. Therefore a change to Events_db_repository won't mean recompile of all files in the server which include events.h sql/events.h: db_repository is no more embedded in the Events singleton. Therefore a change to Events_db_repository won't mean recompile of all files in the server which include events.h sql/mysqld.cc: db_repository is no more embedded in the Events singleton. Therefore a change to Events_db_repository won't mean recompile of all files in the server which include events.h |
||
|
acefb78bc3 |
WL#3337 (Events new architecture)
5th cut, moved DB related code to Event_db_repository and updated accordingly the remanining code. Moved change/restore_security_context() to class THD Removed events_priv.h Next step is to reorganize create/update_event() and parsing for them. But probably some other refactoring could be done in the meanwhile. The changes so far pass the test suite. BitKeeper/deleted/.del-events_priv.h~2e8bce2cf35997df: Delete: sql/events_priv.h sql/Makefile.am: events_priv.h is no more sql/event_data_objects.cc: reorganize events code sql/event_data_objects.h: reorganize events code sql/event_db_repository.cc: reorganize events code sql/event_db_repository.h: reorganize events code sql/event_scheduler.cc: reorganize events code sql/event_scheduler.h: reorganize events code sql/events.cc: reorganize events code sql/events.h: reorganize events code sql/mysqld.cc: reorganize events code sql/set_var.cc: reorganize events code sql/sql_class.cc: add ::change_security_context() and restore_security_context() sql/sql_class.h: add ::change_security_context() and restore_security_context() sql/sql_db.cc: reorganize Events code sql/sql_parse.cc: reorganize Events code sql/sql_show.cc: reorganize Events code |
||
|
ef9a97e685 |
WL#3337 (Event scheduler new architecture)
Third cut to simplify parsing phase. Now DROP EVENT works. Overloaded few functions to be able to use either sp_name or pass two LEX_STRINGs instead of a Event_timed pointer. This is transitional and eventually the old functions will be removed. For now DROP EVENT also works, does not need anymore a parsing object (Event_timed) and definer initialization because everyone who has EVENT_ACL can drop events, and this is checked on execution time in sql_parse.cc from the security context, as it should be. sql/event_data_objects.cc: overload few functions sql/event_scheduler.cc: Event_scheduler::drop_event() actually does not need Event_timed object but just an identifier, hence pass only sp_name. Overloaded Event_scheduler::find_event() to work with sp_name object. Eventually the old version will be removed. This is being done as transitional step to be able to test frequently code. sql/event_scheduler.h: Event_scheduler::drop_event() actually does not need Event_timed object but just an identifier, hence pass only sp_name. Overloaded Event_scheduler::find_event() to work with sp_name object. Eventually the old version will be removed. This is being done as transitional step to be able to test frequently code. sql/events.cc: Change db_drop_event() not to use Event_timed, either coming from parsing or from Event_timed::drop, but use LEX_STRINGs. sp_name is not convinient because in Event_timed::drop a temporary object has to be created. Hence, dereference the sp_name in Events::drop_event() and pass the LEX_STRINGs. sql/events.h: Change db_drop_event() not to use Event_timed, either coming from parsing or from Event_timed::drop, but use LEX_STRINGs. sp_name is not convinient because in Event_timed::drop a temporary object has to be created. Hence, dereference the sp_name in Events::drop_event() and pass the LEX_STRINGs. sql/events_priv.h: Change db_drop_event() not to use Event_timed, either coming from parsing or from Event_timed::drop, but use LEX_STRINGs. sp_name is not convinient because in Event_timed::drop a temporary object has to be created. Hence, dereference the sp_name in Events::drop_event() and pass the LEX_STRINGs. sql/sql_parse.cc: SQLCOM_DROP_EVENT does not need lex->event_parse_data object and is more like SQLCOM_SHOW_CREATE_EVENT. Therefore, move it to the block that handles the latter. sql/sql_yacc.yy: DROP EVENT does not need a parsing object, just a name. Store it as lex->spname. Pretty similar handling to the one of SHOW CREATE EVENT. |
||
|
d2db48c69b |
WL#3337 (Events new infrasctructure)
Second cut of separating parsing phase from execution phase Separate Event_timed from parsing phase and introducing Event_parse_data. sql/event_data_objects.cc: second cut, copy Event_timed::init_body() to Event_parse_data::init_body() Init the body during parsing, everything else keep as a pointer to Item or some other pointer to use for later initialization. sql/event_data_objects.h: get the identifier as sp_name*, later will initialize our structures sql/events.cc: for easy transition add temporarily parse_data, later Event_timed *et will be removed. Do slow transition because Event_timed is so tightly integrated that a front-attack by removing things from this class was unsuccessful. Do things step by step by eliminating dependencies. Hence, the code could be checked with the current test suite too (early testing) sql/events.h: for easy transition add temporarily parse_data, later Event_timed *et will be removed. Do slow transition because Event_timed is so tightly integrated that a front-attack by removing things from this class was unsuccessful. Do things step by step by eliminating dependencies. Hence, the code could be checked with the current test suite too (early testing) BitKeeper/etc/ignore: Added libmysql/viosocket.o.6WmSJk libmysqld/event_data_objects.cc libmysqld/event_db_repository.cc libmysqld/event_queue.cc server-tools/instance-manager/net_serv.cc to the ignore list sql/share/errmsg.txt: remove this message, not used and needed for now sql/sql_lex.h: for easy transition add temporarily parse_data, later Event_timed *et will be removed. Do slow transition because Event_timed is so tightly integrated that a front-attack by removing things from this class was unsuccessful. Do things step by step by eliminating dependencies. Hence, the code could be checked with the current test suite too (early testing) sql/sql_parse.cc: for easy transition add temporarily parse_data, later Event_timed *et will be removed. Do slow transition because Event_timed is so tightly integrated that a front-attack by removing things from this class was unsuccessful. Do things step by step by eliminating dependencies. Hence, the code could be checked with the current test suite too (early testing) sql/sql_yacc.yy: for easy transition add temporarily parse_data, later Event_timed *et will be removed. Do slow transition because Event_timed is so tightly integrated that a front-attack by removing things from this class was unsuccessful. Do things step by step by eliminating dependencies. Hence, the code could be checked with the current test suite too (early testing) |
||
|
e5f8163b88 |
first cut of WL#3337 (New event scheduler locking infrastructure).
Infrastructure built. Added the foreseen files and change Makefile.am/CMakeLists.txt accordingly. libmysqld/Makefile.am: add new files. this is first cut of WL3337u sql/CMakeLists.txt: add more files to build sql/Makefile.am: add new files. this is first cut of WL3337 sql/event_scheduler.cc: event_timed.h -> event_data_objects.h (WL#3337) sql/events.cc: event_timed.h -> event_data_objects.h (WL#3337) sql/share/errmsg.txt: new error message sql/event_data_objects.cc: event_timed.h -> event_data_objects.h (WL#3337) sql/event_data_objects.h: event_timed.h -> event_data_objects.h (WL#3337) sql/sql_parse.cc: event_timed.h -> event_data_objects.h (WL#3337) sql/sql_show.cc: event_timed.h -> event_data_objects.h (WL#3337) sql/sql_yacc.yy: event_timed.h -> event_data_objects.h (WL#3337) |