An error occurred fetching the project authors.
  1. 01 Sep, 2006 1 commit
    • unknown's avatar
      WL#3337 (Event scheduler new architecture) · da4734c3
      unknown authored
      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.
      da4734c3
  2. 28 Aug, 2006 1 commit
    • unknown's avatar
      WL#3337 (Event scheduler new architecture) · f18ec676
      unknown authored
      Don't send affected rows after CREATE/ALTER/DROP EVENT as this is
      inconsistent with the rest of the server in terms of CREATE/ALTER/DROP
      DDLs
      
      
      sql/event_data_objects.cc:
        Events::drop_event() does not expect anymore a parameter named affected_rows
      sql/event_db_repository.cc:
        Remove rows_affected as the behavior exposed by Events is not
        coherent with the behavior of many other DDL, like CREATE PROCEDURE, etc.
      sql/event_db_repository.h:
        Remove rows_affected as the behavior exposed by Events is not
        coherent with the behavior of many other DDL, like CREATE PROCEDURE, etc.
      sql/events.cc:
        Remove rows_affected as the behavior exposed by Events is not
        coherent with the behavior of many other DDL, like CREATE PROCEDURE, etc.
      sql/events.h:
        Remove rows_affected as the behavior exposed by Events is not
        coherent with the behavior of many other DDL, like CREATE PROCEDURE, etc.
      sql/sql_parse.cc:
        Don't send affected rows, because this behavior is not consistent
        with the rest of the server for CREATE/ALTER/DROP DDLs
      f18ec676
  3. 17 Aug, 2006 1 commit
    • unknown's avatar
      WL#3337 (Event scheduler new architecture) · 99adbd13
      unknown authored
      Post-review fixes. Mostly whitespace, int-to-bool return value, fixed comments
      
      
      sql/Makefile.am:
        compile all submodules of Events before compiling the facade
      sql/event_data_objects.cc:
        - Use initialization list
        - Clean whitespaces
        - Shorten comments
        - Fix comments
      sql/event_data_objects.h:
        - Fix whitespace
      sql/event_db_repository.cc:
        - Change return type from int to bool where only one error code is
          returned.
        - Don't use macros but get the maximal number of characters in a column
          from the column
        - Fix  comments
        - Make functions which has return value but it's not used - void.
      sql/event_db_repository.h:
        - Methods with only one error code int -> bool return value
        - Remove declaration of fill_schema_events, a function that does not exist
      sql/event_queue.cc:
        - Use initialization lists
        - Let find_n_remove_event delete the object thus making the code more robust.
          The caller could forget to destruct the object. In addition, find_n_remove_element()
          does not return a value.
        - Move check_system_tables() to class Events
        - Fix comments
      sql/event_queue.h:
        - Whitespace changes
        - init_queue() should allow passing of THD
        - check_system_tables moved to class Events
        - find_n_remove_event() is now void
      sql/event_scheduler.cc:
        - Initialize res before use
        - Remove end stop from message
      sql/event_scheduler.h:
        Add uninitialized state. The scheduler is in it before init_scheduler()
        is called. The rationale is that otherwise state has no value before
        the call. If the system tables were damaged the scheduler won't be initialized
        but in Events::deinit() Event_scheduler::stop() will be called and this will
        touch state, generating valgrind warning at minimum.
      sql/events.cc:
        - Whitespace changes
        - Fix comments
        - Make methods which have only one error code be bool instead of int
        - Create temporarily a THD to be used for the initialization of Event_queue
        - Event_queue::check_system_tables() moved to Events::check_system_tables
        - is_started() is renamed to is_execution_of_events_started()
      sql/events.h:
        - Whitespace changes
        - When a method returns only one error code it should be bool, not int
        - is_started() renamed to is_execution_of_events_started()
      sql/set_var.cc:
        is_started() is renamed to is_execution_of_events_started()
      sql/sql_db.cc:
        The return code is not used, thus don't return anything and drop_schema_events()
        is now void.
      sql/sql_yacc.yy:
        - Fix comments
        - Remove unneeded initialization which is performed in lex_init()
      sql/share/errmsg.txt:
        New error message
      sql/table.cc:
        - Fix comments
        - make table_check_intact() accespt const *table_def
      sql/table.h:
        Make table_check_intact() accespt const *table_def
      99adbd13
  4. 13 Jul, 2006 1 commit
    • unknown's avatar
      WL #3337 (Events new architecture) · 31caa8c4
      unknown authored
      Final stroke, events should be loaded from disk on server startup.
      Also check the validity of their bodies if possible during loading.
      
      
      sql/event_data_objects.cc:
        Remove Event_job_data::free_sp(), move the code to the destructor
        Change the way we change the security context
        Steal some code from sql_parse.cc
      sql/event_data_objects.h:
        Remove free_sp()
        Make compile() public, to be used when booting for verifying the integrity of mysql.event
      sql/event_queue.cc:
        Make the queue load events from disk on server boot.
        Compile and thus check for integrity the events.
      sql/event_queue.h:
        shift methods around. add queue_loaded boolean.
      sql/event_scheduler.cc:
        Rename init_event_thread() to pre_init_event_thread()
        and make it more generic.
        Add post_init_event_thread()
        Export these two as well as deinit_event_thread().
        Now it is quite easy to write code to spawn a new event thread
        whenever needed.
      sql/event_scheduler.h:
        export pre_init_event_thread(), post_init_event_thread() and deinit_event_thread()
        to simplify writing of thread functions.
      sql/events.cc:
        Events::init() returns only one error code, then make it bool
      sql/events.h:
        Events::init() returns only one error code, then make it bool
      sql/mysqld.cc:
        Check the return code of Events::init()
      sql/sp_head.cc:
        Add trace info
      sql/sql_class.cc:
        Reorganize thd::change_security_context() to load main_security_ctx
      sql/sql_class.h:
        Reorganize thd::change_security_context() to load main_security_ctx
      sql/sql_lex.cc:
        Initialize lex->spname
      sql/sql_yacc.yy:
        Add a comment
      31caa8c4
  5. 12 Jul, 2006 1 commit
    • unknown's avatar
      WL#3337 (Event scheduler new architecture) · 628be8a7
      unknown authored
      event_scheduler_ng.cc/h is no more
      
      
      BitKeeper/deleted/.del-event_scheduler_ng.cc~8896b89040dbc4f6:
        Delete: sql/event_scheduler_ng.cc
      BitKeeper/deleted/.del-event_scheduler_ng.h~1431af5b185376f:
        Delete: sql/event_scheduler_ng.h
      mysql-test/r/not_embedded_server.result:
        fix test
      sql/Makefile.am:
        event_scheduler_ng.cc/h is no more
      sql/event_queue.cc:
        event_scheduler_ng.cc/h is no more
      sql/event_queue.h:
        event_scheduler_ng.cc/h is no more
      sql/event_scheduler.cc:
        event_scheduler_ng.cc/h is no more
      sql/event_scheduler.h:
        event_scheduler_ng.cc/h is no more
      sql/events.cc:
        event_scheduler_ng.cc/h is no more
      sql/events.h:
        event_scheduler_ng.cc/h is no more
      628be8a7
  6. 11 Jul, 2006 1 commit
    • unknown's avatar
      WL#3337 (Event scheduler new architecture) · 42a8e2c9
      unknown authored
      More small fixes to the API : use LEX_STRING instead of LEX_STRING* and if error
      then return bool(true) instead of error code.
      Merged functions. Reduced usage of sp_name.
      Fixed a lot of function documentation errors.
      Added function documentation wherever needed.
      Removed some unused defines and error codes.
      
      Next to come is batch rename of Event_scheduler_ng to Event_scheduler.
      
      
      mysql-test/r/events.result:
        update result
      mysql-test/r/events_logs_tests.result:
        update result
      mysql-test/t/events.test:
        more test coverage
      mysql-test/t/events_logs_tests.test:
        fix test
      sql/event_data_objects.cc:
        Cosmetics.
        Fix function documentation whenever needed.
        Move Event_job_data::compile() next to Event_job_data::execute()
      sql/event_data_objects.h:
        Remove unneeded error codes and defines
        Move function declarations at the end of the header
      sql/event_db_repository.cc:
        Fix function documentation.
        Event_db_repository::update_event() now uses LEX_STRING *-s instead of
        sp_name . Lower coupling.
      sql/event_db_repository.h:
        Event_db_repository::update_event() now uses LEX_STRING *-s instead of
        sp_name . Lower coupling.
        find_event -> find_named_event
        find_event_by_name is not used externally, merge with load_named_event()
      sql/event_queue.cc:
        LEX_STRING* to LEX_STRING
        Fix comments.
        Fix and add function documentation.
        Remove Event_queue::events_count() as it is unused
        Change get_top_for_execution_if_time() to return status code as return value
        and the object is in out parameter.
      sql/event_queue.h:
        LEX_STRING* to LEX_STRING
        Fix comments.
        Fix and add function documentation.
        Remove Event_queue::events_count() as it is unused
        Change get_top_for_execution_if_time() to return status code as return value
        and the object is in out parameter.
        Try to detect also lock attemptions for deadlocks.
      sql/event_scheduler_ng.cc:
        Always execute on thd->mem_root
        Fix according to changed API of Event_queue::get_top_for_execution_if_time()
      sql/events.cc:
        Fix function documentation.
        Fix code after API changes of internal Event module classes.
      sql/events.h:
        sp_name -> LEX_STRINGs
      sql/sql_parse.cc:
        Fix according to changed API of Events::show_create_event()
      sql/sql_yacc.yy:
        Don't pass NULL as third parameter to sp_head::init_strings()
      42a8e2c9
  7. 10 Jul, 2006 1 commit
    • unknown's avatar
      WL#3337 (Event scheduler new architecture) · 974eecc2
      unknown authored
      This patch introduces specialized Event data objects
      Event_basic as parent.
      Event_queue_element used for queue storage
      Event_timed used for SHOW EVENTS/ I_S.EVENTS / SHOW CREATE EVENT
      Event_job_data using during execution.
      Methods were moved out of Event_timed to other classes.
      
      This patch also introduces Events::LOCK_event_metadata.
      This patch gives new implementation of Events::dump_internal_status().
      Now both the Event_scheduler and Event_queue return information during
      their ::dump_internal_status().
      
      Shortened a bit the runtime for executing events test cases.
      
      
      mysql-test/r/events.result:
        update results
      mysql-test/r/events_bugs.result:
        update results
      mysql-test/r/events_logs_tests.result:
        update results
      mysql-test/r/events_scheduling.result:
        update results
      mysql-test/t/events.test:
        update test
        make --sleep more appropriate . saving some time could mean failure on loaded boxes though :(
        add tests for previously uncovered branches.
      mysql-test/t/events_bugs.test:
        update test
        make --sleep more appropriate . saving some time could mean failure on loaded boxes though :(
        add tests for previously uncovered branches.
      mysql-test/t/events_logs_tests.test:
        make the test shorter by time
      mysql-test/t/events_scheduling.test:
        when selecting always use ORDER BY
      mysql-test/t/events_stress.test:
        sleep 2.5secs for shorter stress test
      sql/event_data_objects.cc:
        Event_timed is no more used during execution.
        Event_timed is no more used during in the memory queue.
        Event_timed is only used for SHOW CREATE EVENT/ I_S.EVENTS/ SHOW EVENTS
        Event_basic is the parent of almost all Event data objects.
        Event_basic -> Event_queue_element (used for the memory queue) -> Event_timed
        Event_basic -> Event_job_data (the object used for execution)
        Sql_alloc -> Event_parse_data (used during parsing)
      sql/event_data_objects.h:
        Event_timed is no more used during execution.
        Event_timed is no more used during in the memory queue.
        Event_timed is only used for SHOW CREATE EVENT/ I_S.EVENTS/ SHOW EVENTS
        Event_basic is the parent of almost all Event data objects.
        Event_basic -> Event_queue_element (used for the memory queue) -> Event_timed
        Event_basic -> Event_job_data (the object used for execution)
        Sql_alloc -> Event_parse_data (used during parsing)
      sql/event_db_repository.cc:
        Cosmetics.
        load_named_event now uses Event_basic, for polymorphism
        find_event uses Event_basic, to be polymorphic.
        use Field **fields= table->field and then index fields[...]
        Add documentation.
        Fix documentation.
      sql/event_db_repository.h:
        Event_db_repository depends only on Event_basic's interface
      sql/event_queue.cc:
        Cosmetics.
        Don't use Event_timed for the queue and giving back object for execution.
        Event_queue_element is for the queue, Event_job_data is for execution.
        Add Event_queue::dump_internal_status() for SHOW SCHEDULER STATUS command
      sql/event_queue.h:
        Cosmetics.
        Don't use Event_timed for the queue and giving back object for execution.
        Event_queue_element is for the queue, Event_job_data is for execution.
        Add Event_queue::dump_internal_status() for SHOW SCHEDULER STATUS command
      sql/event_scheduler_ng.cc:
        Add back Event_scheduler::cond_wait()
        Add back Event_scheduler::dump_internal_status()
        Using Event_job_data for execution. Make the scheduler thread unkillable (thd->command= COM_DAEMON).
        Add a lot of documentation.
      sql/event_scheduler_ng.h:
        Add back Event_scheduler::cond_wait()
        Add back Event_scheduler::dump_internal_status()
        Using Event_job_data for execution.
      sql/events.cc:
        Documentation
        Add LOCK_event_metadata
      sql/events.h:
        Change the signature of Events::drop_event() not to use sp_name but LEX_STRING
      sql/share/errmsg.txt:
        Fix error message
      sql/sql_parse.cc:
        Events::drop_event() has new signature
      974eecc2
  8. 05 Jul, 2006 1 commit
    • unknown's avatar
      WL#3337 (Event scheduler new architecture) · b9a7fe27
      unknown authored
      Cleaned up the code a bit. Fixed few leaks.
      This code still does not load events on server startup
      from disk. The problem is that there is a need for a THD instance, which
      does not exist during server boot. This will be solved soon.
      Still Event_timed is used both for the memory queue and for exectution.
      This will be changed according to WL#3337 probably in the next commit.
      
      
      sql/event_data_objects.cc:
        Strip unneeded stuff from class Event_timed
        Event_timed is still used for the queue and execution.
        That will be changed in the next commit.
      sql/event_data_objects.h:
        Strip unneeded stuff from class Event_timed
        Event_timed is still used for the queue and execution.
        That will be changed in the next commit.
      sql/event_db_repository.cc:
        Cosmetics.
        Add a new method load_named_event_job, to be made complete in the 
        next commit. It will load from disk an instance of Event_job_data to
        be used during execution.
      sql/event_db_repository.h:
        find_event does not need MEM_ROOT anymore
        because the memory is allocated on Event's own root.
      sql/event_queue.cc:
        Remove dead code.
        Move dumping of the queue to separate method.
        Make critical sections in create_event & update_event
        as small as possible - load the new event outside of the section
        and free the object also outside of it.
      sql/event_queue.h:
        init -> init_queue -> easier for ctags
        deinit -> deinit_queue -> easier for ctags
      sql/event_scheduler.cc:
        empty this file
      sql/event_scheduler.h:
        empty this file
      sql/event_scheduler_ng.cc:
        add back DBUG_RETURN(0) in thread handlers.
        We don't stop running events when stopping the scheduler. Therefore
        remove this method now. If it is needed later it can be added back.
      sql/event_scheduler_ng.h:
        Remove stop_all_running_threads()
        init -> init_scheduler
        deinit -> deinit_scheduler
        easier for ctags
      sql/events.cc:
        Cosmetics
      sql/events.h:
        Cosmetics
      sql/set_var.cc:
        Remove references to dead code
      sql/sql_parse.cc:
        Reorganize a bit.
      b9a7fe27
  9. 04 Jul, 2006 1 commit
    • unknown's avatar
      WL #3337 (Event scheduler new architecture) · a5dfeb02
      unknown authored
      Cut Nr. 8.
      
      All tests pass.
      
      Separated Event_scheduler into Event_queue and Event_scheduler.
      Added new Event_scheduler_ng which is the new scheduler and is used
      system-wide. Will be moved to the event_scheduler.cc in the future.
      Using Event_timed in Event_queue as well as cloned during execution.
      Next step is to have Event_worker_data which will be used during execution
      and will take ::compile()/::execute() out of Event_timed.
      
      
      mysql-test/r/events.result:
        update result
      mysql-test/r/events_bugs.result:
        update result
      mysql-test/r/ps_1general.result:
        update result
      mysql-test/r/skip_name_resolve.result:
        update result
      mysql-test/r/sp-threads.result:
        update result
      mysql-test/r/sp_notembedded.result:
        update result
      mysql-test/r/status.result:
        update result
      mysql-test/t/events_stress.test:
        Make event_stress a bit longer
      sql/Makefile.am:
        Add new event_scheduler_ng.h/cc . These are only to be in the experimental
        clone. Later their content will be moved to event_scheduler.h/cc
      sql/event_data_objects.cc:
        Allocate strings memory on own memory root, instead
        on the schedulers. Thus don't "leak" memory. This should
        fix bug#18683 memory leak in event scheduler
      sql/event_data_objects.h:
        add mem_root
        add THD - this is only temporal, will be moved to class Event_job_data
        once Event_job_data is responsible for the execution.
      sql/event_db_repository.cc:
        Remove unused code.
        Cosmetic changes
      sql/event_queue.cc:
        Now use the Event_scheduler_ng (NextGen)
      sql/event_queue.h:
        Now use the Event_scheduler_ng (NextGen)
      sql/event_scheduler.cc:
        This file is no more used, but will be soon.
      sql/event_scheduler.h:
        This file is no more used but will be soon
      sql/events.cc:
        Now use the Event_scheduler_ng (NextGen)
      sql/events.h:
        Now use the Event_scheduler_ng (NextGen)
      sql/mysqld.cc:
        Make it again possible to kill the scheduler thread
      sql/set_var.cc:
        Now use the Event_scheduler_ng (NextGen)
      sql/share/errmsg.txt:
        Shorten the message.
      sql/sql_show.cc:
        Loading is on a own root, then don't use thd->mem_root
      a5dfeb02
  10. 28 Jun, 2006 3 commits
    • unknown's avatar
      WL#3337 (Events new architecture) · 9fa9378b
      unknown authored
      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
      9fa9378b
    • unknown's avatar
      WL#3337 (Events new architecture) · 400276c2
      unknown authored
      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
      400276c2
    • unknown's avatar
      WL#3337 (Events new architecture) · 8ca78787
      unknown authored
      Cut number 6. Move code from sql_show.cc to event_db_repository.cc
      that more belongs to the latter.
      
      
      sql/event_db_repository.cc:
        move code that works with mysql.event from sql_show.cc to 
        event_db_repository.cc . Route through Event_db_repository's interface
        which is proxied by class Events. The code relies on a function from
        sql_show.cc which does the actual storage in the schema table. I think
        it's better to leave the function there because the structure of 
        I_S.EVENTS is defined in sql_show.cc
      sql/event_db_repository.h:
        I_S / SHOW EVENTS handling hooks
      sql/event_scheduler.cc:
        use the pointer to db_repository which Event_scheduler already has
      sql/events.cc:
        Put a comment to get_instance
      sql/events.h:
        callback for I_S (sql_show.cc)
      sql/sql_show.cc:
        move code that belongs more to Event_db_repository than to here.
        Use a callback of class Events. Only 1 function is left here, because
        it copies data into the actual rows of I_S.EVENTS and belongs to this file.
      sql/sql_show.h:
        export this function will be called from event_db_repository.cc
      8ca78787
  11. 27 Jun, 2006 3 commits
    • unknown's avatar
      WL#3337 (Events new architecture) · acefb78b
      unknown authored
      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
      acefb78b
    • unknown's avatar
      WL#3337 (Event scheduler new architecture) · ef9a97e6
      unknown authored
      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.
      ef9a97e6
    • unknown's avatar
      WL#3337 (Events new infrasctructure) · d2db48c6
      unknown authored
      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)
      d2db48c6
  12. 08 Jun, 2006 1 commit
    • unknown's avatar
      Reorganize, physically the events code · 99438424
      unknown authored
      Unify method naming -> create/update/drop_event
      Move class Event_timed to event_timed.h
      class Events is in events.h (renamed from event.h)
      The implementation is in events.cc (renamed from event.h)
      
      
      BitKeeper/deleted/.del-event_executor.cc~f4a4645b973838ab:
        Delete: sql/event_executor.cc
      include/my_time.h:
        add a boundary
      libmysqld/CMakeLists.txt:
        event.cc -> events.cc
      libmysqld/Makefile.am:
        event.cc -> event.cc
      sql/CMakeLists.txt:
        event.cc -> events.cc
      sql/Makefile.am:
        event.cc -> events.cc
        event_priv.h -> events_priv.h
      sql/event_scheduler.cc:
        event.h -> events.h
        add_event -> create_event
        replace_event -> update_event()
        event_timed_compare_q is only used in event_scheduler.cc , so moving it
        from event.cc and making it static
      sql/event_scheduler.h:
        add_event -> create_event
        replace_event -> update_event
      sql/event_timed.cc:
        moved extern interval_type_to_name to mysql_priv.h
      sql/mysql_priv.h:
        moved my_time_compare to time.cc
      sql/mysqld.cc:
        event.h -> events.h
      sql/sql_db.cc:
        event.h -> events.h
      sql/sql_parse.cc:
        event.h -> events.h
        class Event_timed moved to event_timed.h
      sql/sql_show.cc:
        event.h -> events.h
        class Event_timed moved to event_timed.h
      sql/sql_yacc.yy:
        event.h -> events.h
        class Event_timed moved to event_timed.h
      sql/events.cc:
        add_event -> create_event
        replace_event -> update_event
        event_timed_compare_q moved to event_scheduler.cc
      sql/events.h:
        class Event_timed moved to event_timed.h
      sql/events_priv.h:
        my_time_compare moved to mysql_priv.h
        event_timed_compare_q is static in event_scheduler.cc
      sql/time.cc:
        moved interval_type_to_name from event.cc to here.
      BitKeeper/etc/ignore:
        Added libmysqld/events.cc to the ignore list
      99438424