An error occurred fetching the project authors.
  1. 28 Feb, 2006 3 commits
    • unknown's avatar
      class event_timed -> Event_timed · 58a6d96c
      unknown authored
      fix for bug#17793 (Scheduler uses class event_timed should be Event_timed)
      
      
      sql/event.cc:
        class event_timed -> Event_timed
      sql/event.h:
        class event_timed -> Event_timed
      sql/event_executor.cc:
        class event_timed -> Event_timed
      sql/event_priv.h:
        class event_timed -> Event_timed
      sql/event_timed.cc:
        class event_timed -> Event_timed
      sql/sql_lex.h:
        class event_timed -> Event_timed
      sql/sql_show.cc:
        class event_timed -> Event_timed
      sql/sql_yacc.yy:
        class event_timed -> Event_timed
      58a6d96c
    • unknown's avatar
      fix for bug#16537 · b934539d
      unknown authored
      (post-review pre-push changes)
      coding style (mostly trailing spaces removed)
      
      
      mysql-test/r/events.result:
        fix result file
      sql/event.cc:
        - remove trailing spaces
        - add a missing initializer (gcc warning)
        - C++ to C comments
      sql/event_executor.cc:
        - fix coding style (C++ to C comments, remove trailing spaces)
        - fix wrong indexing buggie not found till now (queue indexing is 0 based,
          not 1 based)
      sql/event_timed.cc:
        - fix coding style
      b934539d
    • unknown's avatar
      fix for bug#16537 (Events: mysql.event.starts is null) · 317c6851
      unknown authored
      - now when the event is created and STARTS is omitted then STARTS is implicitly
        CURRENT_TIMESTAMP
      - This CS also fixed incorrect presentation of STARTS/ENDS in I_S.EVENTS
      (incorporated review changes)
      
      
      mysql-test/r/events.result:
        results of new test cases
      mysql-test/t/events.test:
        new test cases for bug #16537 (Events: mysql.event.starts is null)
      sql/event.cc:
        - check whether event_timed::starts_null only in case
          event_timed::expression is set, so for recurring events only
        - disable binlogging of CREATE EVENT statement. It should not be
          replicated but the result of the execution. Still the replication is
          untouched topic.
      sql/event.h:
        - add flags whether starts, ends and execute_at are null or not
      sql/event_executor.cc:
        - check whether xxx_null instead of !xxxx.year
      sql/event_timed.cc:
        - introduce xxx_null and change the usage of xxx.year to !xxx_null
      sql/sql_show.cc:
        - don't show 0000-00-00 in I_S.EVENTS when the value is NULL
      sql/sql_yacc.yy:
        - if STARTS is omitted default to current_timestamp
      317c6851
  2. 26 Feb, 2006 1 commit
    • unknown's avatar
      After merge fixes · d25c405d
      unknown authored
      BitKeeper/etc/ignore:
        added storage/ndb/src/common/util/testBitmask.cpp
      mysql-test/mysql-test-run.sh:
        Add libmysql_r/.libs to path for shared libraries.
        (Needed for mysqlimport)
      mysql-test/r/ctype_cp932_notembedded.result:
        After merge fix
      mysql-test/r/func_system.result:
        Version number on embedded server can be longer than 40
      mysql-test/r/partition_mgm_err.result:
        Move tests that require symlinks to partion_mgm_err2.test
      mysql-test/r/query_cache.result:
        Fix possible errors from previous tests
      mysql-test/t/ctype_cp932_notembedded.test:
        After merge fix
      mysql-test/t/func_system.test:
        Version number on embedded server can be longer than 40
      mysql-test/t/partition_mgm_err.test:
        Move tests that require symlinks to partion_mgm_err2.test
      mysql-test/t/query_cache.test:
        Fix possible errors from previous tests
      mysys/my_symlink2.c:
        More debugging
      sql/event.cc:
        Code cleanup
      sql/event_executor.cc:
        Ensure that event mutexes are properly cleared up
      sql/mysqld.cc:
        Ensure that event mutexes are properly cleared up
      mysql-test/r/partition_mgm_err2.result:
        New BitKeeper file ``mysql-test/r/partition_mgm_err2.result''
      mysql-test/t/partition_mgm_err2.test:
        New BitKeeper file ``mysql-test/t/partition_mgm_err2.test''
      d25c405d
  3. 21 Feb, 2006 1 commit
    • unknown's avatar
      fix for bug#16407 (EVENTS: sql_mode) · ae48f5fd
      unknown authored
      post-review fixes
      
      
      mysql-test/r/events_bugs.result:
        fix result
      sql/event.cc:
        fix compilation problem on windows
      sql/event_executor.cc:
        show the right host in show processlist (should be event_scheduler@localhost)
      sql/event_timed.cc:
        a bit more debug infor
        fix a problem introduced with previous push :( . clean everything that's whitespace.
        found because of new test cases which were crashing.
      sql/sql_show.cc:
        fix compile problem on windows
      ae48f5fd
  4. 20 Feb, 2006 2 commits
    • unknown's avatar
      fix for bug#16407 (Events: Changes in sql_mode won't be taken into account) · 203b37ef
      unknown authored
      WL#1032
      sql_mode setting was disregarded during create/alter event and wasn't set during
      event execution.
      (post-review small fixes)
      
      
      sql/event.cc:
        store the sql_mode when the body is stored
        - always on create event
        - during alter event if the user changes the body
      sql/event.h:
        add sql_mode as member variable
      sql/event_timed.cc:
        - exchange thd->variables.sql_mode before and after execution
        - set the sql_mode of the anonymous SP -> event_timed::sphead
      sql/sql_show.cc:
        - show real content in I_S.EVENTS.SQL_MODE , disallow NULL
      203b37ef
    • unknown's avatar
      fix for bug #16411 Events: Microsecond intervals are allowed · 17fb7f96
      unknown authored
      WL#1034
      
      
      mysql-test/r/events.result:
        output fix
      sql/event.cc:
        - handle also INTERVAL_MICROSECOND, was missing.
        - use renamed ER_ code which is generic
      sql/event.h:
        add new error code
      sql/event_executor.cc:
        - use new ER_ code name
        - handle EVEX_MICROSECOND_UNSUP error code
      sql/event_timed.cc:
        forbid MICROSECOND intervals for events
      sql/share/errmsg.txt:
        rename error code, it's generic
      sql/sql_show.cc:
        use new error code name
      sql/sql_yacc.yy:
        bail out if any MICROSECOND interval is specified
      17fb7f96
  5. 16 Feb, 2006 2 commits
    • unknown's avatar
      fix bug in show events which shows · c80a0d71
      unknown authored
      | INTERVAL_VALUE | INTERVAL_FIELD |
      | 20             | 20 MINUTE      |
      the second one should be without the value
      
      
      mysql-test/r/events.result:
        update test result to be as they should be
      sql/event_timed.cc:
        manually append the name of the interval because it's no more appended
        by reconstruct_value
      c80a0d71
    • unknown's avatar
      small post-merge fixes for bug#16406 · 89f598ee
      unknown authored
      (pre-push)
      
      
      mysql-test/r/events.result:
        update result
      mysql-test/t/events.test:
        few more tests
      sql/event.cc:
        fix compilation failure after big merge
      sql/event.h:
        initialize s_ctx to be the context to be used.
        don't use sphead->m_security_ctx but we will copy 
        the initted ctx to there
      sql/event_timed.cc:
        -initialize s_ctx to be the context to be used.
        don't use sphead->m_security_ctx but we will copy 
        the initted ctx to there
        
        - first init the context
        - then compile the event
        - and then copy the context
        - don't use mysql_change_db() for now change_security_context() gets the
          right context info
      89f598ee
  6. 15 Feb, 2006 2 commits
    • unknown's avatar
      fix for bug#16406 (Events: DROP DATABASE doesn't automatically drop events) · fea4742d
      unknown authored
      WL#1034
      - This changeset also changes the executor so its quite more stable now.
        Stressing test case added that executes ~800 events per second and dropping
        hundreds of events at once using DROP DATABASE.
      (with fixes after review of JimW)
      (with fixes after review of Serg)
      
      
      mysql-test/r/events.result:
        update results after TRIGGER_ACL was added
      mysql-test/t/events.test:
        -redundant line
      sql/event.cc:
        Implemented evex_db_drop_events() which drops all events
        from a specific database. Needed for SQLCOM_DROP_DATABASE
      sql/event.h:
        - protect the event better (see the changes to event_executor.cc
          and event.cc). An event object could be used in a spawned thread
          before it's executed but till now the object is marked as being
          executed when the anonymous sp_head is executed. However, there are
          timeframes before and after that during which the event is not marked
          as executed and other thread may delete the object -> so we end with
          a nirvana pointer.
      sql/event_executor.cc:
        - extract some of the code executed in the main thread to a function. Too long
          functions are bad for the overview.
        - prepend all information/error messages to the console with "SCHEDULER:" for
          better overview, and easied searching in the log tables.
      sql/event_priv.h:
        - change the name, of evex_db_find_event_by_name() and don't
          used C++ features like function overloading
        - define consts for result returned from event_timed::spawn_now()
      sql/event_timed.cc:
        - add few methods related to event execution.
          now the event spawns the worker thread and
          passes itself as parameter. This way it locks itself for exectution
          first and then spawning -> no race condition. When the worker thread
          has finished working with the reference it calls back
          event_timed::spawn_thread_finish() to unlock itself.
      sql/sql_db.cc:
        - call evex_drop_db_events() on DROP DATABASE
      fea4742d
    • unknown's avatar
      build fixes · ea8a26c6
      unknown authored
      sql/event.cc:
        - make this not unsigned. gcc complains
      sql/event_timed.cc:
        acl_getroot_no_password() is not there in libmysqld, disable it's usage
        in this case.
      sql/set_var.cc:
        fix for the broken build of Serg. gcc seems to be pretty happy without
        the return and returns the value of the last statement
      ea8a26c6
  7. 14 Feb, 2006 2 commits
    • unknown's avatar
      post-merge fixes of bug 16548 · 99526f2e
      unknown authored
      mysql-test/r/events.result:
        post-merge fixes
      mysql-test/t/events.test:
        post-merge fixes
      sql/event.cc:
        post-merge fixes
      sql/share/errmsg.txt:
        post-merge fixes
      sql/table.cc:
        post-merge fixes
      99526f2e
    • unknown's avatar
      - final fixes for bug#16431 (Events: An event which alters itself disappears) · 8d4f74be
      unknown authored
      - fix for bug#16423 (Events: SHOW CREATE EVENT doesn't work)
      - this Changeset commits makes CREATE/UPDATE/DELETE EVENT real DDL statements
        by committing the currently open transaction before they are executed.
      - this Changeset also fixes a trailing space problem since the very early days
        of the internal cron
      - adds sophisticated checking of whether mysql.event was tampered accidentally
        or with purpose by an user.
      - adds a lot of inline function documentation - documents everything left
        uncodumented
      - INTERVAL_XXXX to XXX in I_S.EVENTS.INTERVAL_FIELD
      
      WL#1034 (Internal CRON)
      
      
      mysql-test/r/events.result:
        update result
      mysql-test/t/events.test:
        add test cases for SHOW CREATE EVENT
        add test cases where the structure of mysql.event is changed and error reporting in this case
      sql/event.cc:
        - do a lot more checking on mysql.event whether it's valid
          introduced generic function table_check_intact() which can be used also
          for checking whether a system table (mysql.*) has been tampered by user
          and report an error in this case. The checking is quite strict, thus
          maybe some mechanism can be added later that loosens this like some
          session variable, for instance, i_am_aware_that_i_can_damage_my_data
          so the table will be opened nevertheless we think that it's not valid.
        - add evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer)
        - document a loooot. not a single function left undocumented.
      sql/event.h:
        - add evex_show_create_event(THD *thd, sp_name *spn, LEX_STRING definer)
        - change get_show_create_event() to get_create_event()
        - add TABLE_FIELD_W_TYPE used by table_check_intact()
        - add event_timed::sql_mode so it can be used by show create event. currently
          always 0, will be fixed by a patch for another bug. At least makes the code
          of show create event complete.
      sql/event_executor.cc:
        - add evex_check_system_tables() that checks on boot and event
          main thread startup that mysql.db and mysql.user tables are correct.
        - document everything!
      sql/event_priv.h:
        remove a line
      sql/event_timed.cc:
        - implement SHOW CREATE EVENT
        - document undocumented functions!
      sql/share/errmsg.txt:
        - fix an error message and add two new
      sql/sql_acl.cc:
        - add mysql.db table definition to use by table_check_intact()
        - exchange some of the positions by numbers from mysql.db to enum names (see sql_acl.h)
      sql/sql_acl.h:
        - define the structure of mysql.db table
      sql/sql_parse.cc:
        - handle SQLCOM_SHOW_CREATE_EVENT
        - end the current transaction becase CREATE/UPDATE/DELETE EVENT is a DDL
          statement
      sql/sql_show.cc:
        - remove interval_type_to_name
        - use common function event_reconstruct_interval_expression()
          that reconstructs the expression given at create/alter, to some
          extent - interval of 2:62 MINUTE_SECOND will be reconstructed as
          interval of 3:02 MINUTE_SECOND!
      sql/sql_yacc.yy:
        init the definer of event_timed also when doing SHOW CREATE EVENT
        because it's needed for checking into mysql.event
      sql/table.cc:
        - remove stale code. only mysql.event should be a 'system_table'
        - add table_check_intact() to check the consistency of a table.
          mostly usable with mysql.xxx tables.
      sql/table.h:
        - export TABLE_FIELD_W_TYPE and table_check_intact() which are used for 
          checking the structure of a table. mostly usable for mysql.xxx tables.
      8d4f74be
  8. 07 Feb, 2006 1 commit
    • unknown's avatar
      - fix for bug #16414 (Events: Crash or hang if event drops itself) · 99eb6eb6
      unknown authored
      WL#1034 (Internal CRON)
      (with post-review fix)
      
      
      mysql-test/r/events.result:
        update the result
      mysql-test/t/events.test:
        use --sleep instead of select sleep()
        enable some scheduler related tests. They were disabled because of a hang that
        happened. The hang is fixed with this bugfix.
      sql/event.cc:
        - evex_remove_from_cache reports back whether the in_memory
          object was deleted or was scheduled. In case scheduling then
          don't delete it from outside but let it do it itself
        - move out db interaction code out of evex_drop_event to db_drop_event
          so it can be called from outter space :)
      sql/event_priv.h:
        - export the new function db_drop_event()
      sql/event_timed.cc:
        - use db_drop_event() and don't implement the dropping ourselves
      sql/sql_parse.cc:
        - some debug info about the status code returned.
      99eb6eb6
  9. 30 Jan, 2006 1 commit
    • unknown's avatar
      fix for bug#16642 (Events: No INFORMATION_SCHEMA.EVENTS table) · c3542ceb
      unknown authored
      post-review change - use pointer instead of copy on the stack.
      WL#1034 (Internal CRON)
       This patch adds INFORMATION_SCHEMA.EVENTS table with the following format:
        EVENT_CATALOG  - MYSQL_TYPE_STRING  (Always NULL)
        EVENT_SCHEMA   - MYSQL_TYPE_STRING  (the database)
        EVENT_NAME     - MYSQL_TYPE_STRING  (the name)
        DEFINER        - MYSQL_TYPE_STRING  (user@host)
        EVENT_BODY     - MYSQL_TYPE_STRING  (the body from mysql.event)
        EVENT_TYPE     - MYSQL_TYPE_STRING  ("ONE TIME" | "RECURRING")
        EXECUTE_AT     - MYSQL_TYPE_TIMESTAMP (set for "ONE TIME" otherwise NULL)
        INTERVAL_VALUE - MYSQL_TYPE_LONG    (set for RECURRING otherwise NULL)
        INTERVAL_FIELD - MYSQL_TYPE_STRING  (set for RECURRING otherwise NULL)
        SQL_MODE       - MYSQL_TYPE_STRING  (for now NULL)
        STARTS         - MYSQL_TYPE_TIMESTAMP (starts from mysql.event)
        ENDS           - MYSQL_TYPE_TIMESTAMP (ends from mysql.event)
        STATUS         - MYSQL_TYPE_STRING  (ENABLED | DISABLED)
        ON_COMPLETION  - MYSQL_TYPE_STRING  (NOT PRESERVE | PRESERVE)
        CREATED        - MYSQL_TYPE_TIMESTAMP
        LAST_ALTERED   - MYSQL_TYPE_TIMESTAMP
        LAST_EXECUTED  - MYSQL_TYPE_TIMESTAMP
        EVENT_COMMENT  - MYSQL_TYPE_STRING
      
        SQL_MODE is NULL for now, because the value is still not stored in mysql.event .
      Support will be added as a fix for another bug.
      
       This patch also adds SHOW [FULL] EVENTS [FROM db] [LIKE pattern]
      1. SHOW EVENTS shows always only the events on the same user,
         because the PK of mysql.event is (definer, db, name) several 
         users may have event with the same name -> no information disclosure.
      2. SHOW FULL EVENTS - shows the events (in the current db as SHOW EVENTS)
         of all users. The user has to have PROCESS privilege, if not then
         SHOW FULL EVENTS behave like SHOW EVENTS.
      3. If [FROM db] is specified then this db is considered.
      4. Event names can be filtered with LIKE pattern.
        SHOW EVENTS returns table with the following columns, which are subset of
        the data which is returned by SELECT * FROM I_S.EVENTS
         Db
         Name
         Definer 
         Type
         Execute at
         Interval value
         Interval field 
         Starts 
         Ends
         Status
      
      
      mysql-test/lib/init_db.sql:
        change the PK - (definer, db, name)
        quicker searches when SHOW EVENTS;
        allow also different users to have events with the same name -> 
        no information disclosure
      mysql-test/r/events.result:
        result of new tests
      mysql-test/r/information_schema.result:
        result of new tests
      mysql-test/r/information_schema_db.result:
        result of new tests
      mysql-test/r/system_mysql_db.result:
        result of new tests
      mysql-test/t/events.test:
        new tests for information_schema.events
      scripts/mysql_create_system_tables.sh:
        change the PK of mysql.event to (definer, db, name)
      scripts/mysql_fix_privilege_tables.sql:
        change the PK of mysql.event to (definer, db, name)
      sql/event.cc:
        pass around the definer of the event because of the new PK
        which is (definer, db, name). It's needed for index searching.
      sql/event.h:
        - make enum evex_table_field again public so it can be used
        in sql_show.cc
        - make created and modified ulonglong, because they should be such
        - make public evex_open_event_table so it can be used in sql_show.cc
      sql/event_executor.cc:
        - cosmetics
      sql/event_priv.h:
        - moved enum evex_table_field and evex_open_event_table()
          to event.h (made them therefore public)
      sql/event_timed.cc:
        - in event_timed::init_definer() always fill this.definer with
          the concatenated value of definer_user@definer_host. Makes
          later the work easier.
        - pass around the definer wherever is needed for searching 
          (new prototype of evex_db_find_evex_aux)
      sql/mysqld.cc:
        - add counter for SHOW EVENTS
      sql/sql_lex.h:
        - register SHOW EVENTS as command
      sql/sql_parse.cc:
        - handle SCH_EVENTS (I_S.EVENTS like SCH_TRIGGERS)
        - make additional check in case of SHOW EVENTS (check for EVENT on
          the current database. if it is null check_access() gives appropriate
          message back.
      sql/sql_show.cc:
        - add INFORMATION_SCHEMA.EVENTS and SHOW EVENTS
        - I_S.EVENTS.SQL_MODE is NULL for now -> not implemented. Trudy
          asked to be added so bug #16642 can be completely closed. There
          is another bug report which will fix the lack of storage of
          SQL_MODE during event creation.
      sql/sql_yacc.yy:
        - always call event_timed::init_definer() when CREATE/ALTER/DROP
          EVENT but not when just compiling the body of the event because
          in this case this operation is not needed, it takes memory and
          CPU time and at the end the result is not used. event_timed::definer
          is used only on SQLCOM_CREATE/ALTER/DROP_EVENT execution not on
          statement compilation.
        - add SHOW [FULL] EVENTS [FROM db] [LIKE pattern]
          in case of FULL and the user has PROCESS privilege then he will see
          also others' events in the current database, otherwise the output
          is the same as of SHOW EVENTS. Because the events are per DB only
          the events from the current database are shown. pattern is applied
          against event name. FROM db is self explanatory.
      sql/table.h:
        add SCH_EVENTS as part of INFORMATION_SCHEMA
      c3542ceb
  10. 20 Jan, 2006 1 commit
    • unknown's avatar
      fix for bug#16431 (Events: An event which alters itself disappears) · 3a8e50e0
      unknown authored
      WL#1034 (Internal CRON)
      
      
      mysql-test/r/events.result:
        add a test for to test bug #16431
      mysql-test/t/events.test:
        results of new tests
      sql/event.cc:
        - more debug info
        - pass info to evex_remove_from_cache() whether the operation 
          was drop or alter. this fixes possible bug that may lead to dropping
          of an event when it's altered. also fix for bug#16431
      sql/event_executor.cc:
        be more verbose and throw more errors
      sql/event_timed.cc:
        - add ` around the names of the db and the event_name and not
        their concatenation. remove ; from the end - unneeded. this fixes bug #16431,
        which was failing because after some recursion the query was ending on ;;
        which is normally an error in the parser because that's the delimiter
        
        - more debug info
        - don't execute lex_end() two times when there's a parse error or thd->is_fatal_error
      3a8e50e0
  11. 18 Jan, 2006 1 commit
    • unknown's avatar
      - fix bug #16435 (Weekly events execute every second) (WL#1034 Internal CRON) · 6bd58a2a
      unknown authored
      Before the interval expression was considered to be in seconds, now it is
      just a number and the type of interval is considered.
      
      - this changeset introduces also fix for bug#16432 (Events: error re interval
        misrepresents the facts)
        the code of event_timed::set_interval() was refactored anyway so it is meaningful to
        fix the bug in the same changeset.
      
      
      include/my_time.h:
        - move enum interval_type to include/my_time.h so it can be used by functions
          in the whole server
      sql/event.cc:
        - don't use second_part
        - fix small problem with create event xyz, when xyz exists -> make it error
          instead of warning if create_if_not is false.
      sql/event.h:
        pass thd to mark_last_executed() to be able to call thd->end_time()
      sql/event_executor.cc:
        - pass thd to event_timed::compute_next_execution_time()
        - a bit more DBUG info in the server log
        - handle error returned by event_timed::compute_next_execution_time()
      sql/event_priv.h:
        - define the maximal possible value for interval_value
      sql/event_timed.cc:
        - more docs
        - add static get_next_time() which sums a TIME with an interval
        - fix bug #16435 (Weekly events execute every second)
        Before the interval expression was considered to be in seconds, now it is
        just a number and the type of interval is considered.
        - fix for bug#16432 (Events: error re interval misrepresents the facts)
          (return an error if a value is too big or is negative - errmsg changed)
      sql/item_timefunc.cc:
        - export get_interval_date()
        - refactor Item_date_add_interval::get_date() and extract the core
          to date_add_interval() in time.cc so it can be reused by the
          scheduler code in event_timed.cc
      sql/item_timefunc.h:
        - export get_interval_value() so it can be reused in event_timed.cc in
          function static get_next_time()
        - move enum interval_type to include/my_time.h so it can be used by functions
          in the whole server
      sql/mysql_priv.h:
        export the new function date_add_interval() added to time.cc
      sql/share/errmsg.txt:
        - change error message to be appropriate as fix for bug#16432
          (Events: error re interval misrepresents the facts)
      sql/sql_yacc.yy:
        - change error message to be appropriate as fix for bug#16432
          (Events: error re interval misrepresents the facts)
      sql/time.cc:
        extract the core of Item_date_add_interval::get_date()
        to a function per Serg's request. The code can be reused
        to add und substract interval from a date.
      6bd58a2a
  12. 11 Jan, 2006 1 commit
    • unknown's avatar
      WL #1034 (Internal CRON) pre-push fixes · b8ce8ad1
      unknown authored
      after another merge fixes.
      
      
      mysql-test/r/information_schema.result:
        WL #1034 (Internal CRON)
        fix result
      mysql-test/r/mysqlcheck.result:
        WL #1034 (Internal CRON)
        fix result
      mysql-test/r/sp.result:
        WL #1034 (Internal CRON)
        fix result
      sql/event.cc:
        after fixes for WL1012 fix these to be able to compile
      sql/event_timed.cc:
        after fixes for WL1012 fix these to be able to compile
      sql/share/errmsg.txt:
        readd error messages removed during manual update
      sql/sql_yacc.yy:
        fix sql_yacc.yy for WL#1034 (Internal CRON) after the manual
        merge. The merge wasn't good :(
      b8ce8ad1
  13. 10 Jan, 2006 1 commit
    • unknown's avatar
      WL 1034 update · f133a923
      unknown authored
      (pre-push cleanups removing debugging code)
      
      
      sql/event.cc:
        - comment
        - fix 80 cols
        - fix a crash when dropping a running event (after it has finished
          its work because the memory got freed in remove_from_cache but the event
          was still running)
      sql/event.h:
        - add new method
      sql/event_executor.cc:
        - remove printf-s
        - fix 80cols
        - fix message
      f133a923
  14. 28 Dec, 2005 2 commits
    • unknown's avatar
      WL #1034 update · f3aea476
      unknown authored
      - fix problem with too long identifier name
      
      
      sql/event.cc:
        report an error when identifier too long
      sql/event_priv.h:
        name the enum
        fix truncation problem
      sql/share/errmsg.txt:
        new error message
      sql/sql_yacc.yy:
        remove debug info and whitespace
      f3aea476
    • unknown's avatar
      WL #1034 (update) · 3a12408a
      unknown authored
      - improve the stability of the executor
      - make create event if not exists work as before
      
      
      sql/event.cc:
        refactoring:
        - have only 1 routine for comparing TIME structures 
        fix:
        - after previous refactoring IF NOT EXISTS of CREATE EVENT did not work 
          anymore. Now it will work.
      sql/event.h:
        update definitions
      sql/event_executor.cc:
        - don't load DISABLED events
        - if an event is being disabled because of time restrictions - drop it from the 
          prio queue
        - move dropping to the worker process
      sql/event_priv.h:
        - remove unneeded func
      sql/share/errmsg.txt:
        fix error message
      sql/sql_parse.cc:
        - support 0 rows affected when CREATE EVENT IF NOT EXISTS
      3a12408a
  15. 20 Dec, 2005 1 commit
    • unknown's avatar
      WL #1034 update · 9b323387
      unknown authored
      - fix one bug found by PeterG, namely bug #51
      
      #there is a major problem currently after removing the specialised DYNAMIC_ARRAY as 
        storage for the events. I have to reintroduce similar storage, this time probably some
        linked list or maybe some API on top of DYNAMIC_ARRAY.
      
      
      sql/event.cc:
        close the table
      sql/event.h:
        change definition
      sql/event_executor.cc:
        don't start the thread in advance
      sql/event_timed.cc:
        - don't call evex_drop_event
        - quote the name during compilation to make create event `the rain in spain goes into the drain` not fail.
      9b323387
  16. 16 Dec, 2005 1 commit
    • unknown's avatar
      WL #1034 update · 7634f7d6
      unknown authored
      - handle crashes where the table definition has been changed
        (different number of fields)
      
      
      sql/event.cc:
        change the way table is opened
        check whether the number of fields is exact, otherwise report damaged table
      sql/event_executor.cc:
        - move around some code
        - use the new way of table opening
      sql/event_priv.h:
        - new declaration
      sql/event_timed.cc:
        - now 0 is ok
      7634f7d6
  17. 15 Dec, 2005 1 commit
    • unknown's avatar
      WL#1034 update · 48405ec7
      unknown authored
      - fix EVENT_ACL problem that GRANT ALL on some_db.* to someone@somewhere did not get to mysql.db
      - fix crash when the following is executed :
        CREATE EVENT P() CREATE EVENT E ON SCHEDULER 1 SECOND DO ROLLBACK;
        (creation works as well as calling P() which creates the event).
      
      
      mysql-test/lib/init_db.sql:
        - fix init_db.sql so add Event_priv to the database privs, many tests failed because of that
          ommision
        - remove the quotes from the column names
      mysql-test/t/events.test:
        - fix the small test, don't create own db
      scripts/mysql_fix_privilege_tables.sql:
        - fix that
      sql/event.cc:
        - be defensive and don't crash if outside has already has opened some table
      sql/event_executor.cc:
        - show in SHOW PROCESSLIST - "event_scheduler" as name of the user of the main thread
        - use "localhost" as the host where event_scheduler comes from
        - comment out some debug info, fix other debug info
      sql/event_timed.cc:
        - enable EVENT creation inside SP. sphead from lex->sphead goes to et->sphead. it's there only
          if we compile the event. OTOH when doing 
          CREATE PROCEDURE PROC() CREATE EVENT SOME_EV ON SCHEDULE EVERY 1 SECOND DO ROLLBACK;
          I have only to get the body of the event which is anonymous SP. Before it being "compiled"
          but then freed without being used because a bit later it is compiled one more time before
          being put in the events cache. So it was good that the memory structures weren't reused but
          scrapped out. Now lex->sphead is not needed during event creation but only where the event's
          body starts and where it ends so to be able at later stage to compile this anonymous SP (the
          body of the event).
      sql/sp_head.cc:
        - copy over a fix to a crash
      sql/sql_acl.h:
        - fix privileges.
          There was _NO_ documentation about that. Another CHUNK had to be created to so EVENT_ACL gets shifted to
          it's place in the db table. So how this is calculated? EVENT_ACL is 1 << 26. Remember 26, see which poistion
          in the db table is EVENT_ACL, it's 17, counted from 0. 26 - 17 = 9, then shift it with 9.
          CHUNKS are created because in some cases some privileges are in chunks and they are shifted at once. There are
          few chunks of such privileges which has to be shifted to get to exactly the structure of mysql.db table.
      sql/sql_parse.cc:
        - ok, we don't care anymore about lex->sphead because our sphead is lex->et->sphead
      sql/sql_yacc.yy:
        - bail out if new event_timed returns 0x0
        - enable creation of an event inside a SP
          CREATE PROCEDURE P() CREATE EVENT E ON SCHEDULE EVERY 1 SECOND DO SELECT 1;
      48405ec7
  18. 13 Dec, 2005 3 commits
    • unknown's avatar
      WL#1034 (update) · d22bb45c
      unknown authored
      - fixed silly bug, the main thread restarted but did not execute events,
        Quite currious why many calls to pthread_mutex_init() do not lead to abort()
      
      
      sql/event.cc:
        - remove mysql_event_table_exists
        - fix possible crash when table is 0x0
      sql/event_executor.cc:
        - make event_executor_running_global_var volatile
        - fix erroneous reinitilization of a mutex, why did it not crash in debug mode?
          why pthread_mutex_init() does not abort() in case the mutex was not deinitted
          beforehand?
        - first initialization of event_executor_running_global_var inside init_mutexes()
        - remove debug if()
      sql/event_priv.h:
        - remove unneeded definitions
      sql/event_timed.cc:
        make backup and then restore the open table state of thd
      d22bb45c
    • unknown's avatar
      WL#1034 update · f92086d0
      unknown authored
      (cleanups, leaks fixed)
      
      
      sql/event.cc:
        - update comments
        - remove dead code
        - event_timed is no more copied after allocation on a DYNAMIC_ARRAY
          because there is a problem when the array is reallocated - we get
          dangling pointers from the scheduling queue. anyway it makes little
          sense to keep them there except that cleaning is quite efficient but
          iterating over all events and cleaning them one by one is not that bad
          considering that happens only when the main scheduler thread is killed
          or during server shutdown.
      sql/event_executor.cc:
        - DYNAMIC_ARRAY is no more
      sql/event_priv.h:
        - remove unneeded code/defines. the scheduler's queue is of 
          type QUEUE and cannot run anymore on top of DYNAMIC_ARRAY
      sql/event_timed.cc:
        - after parsing (in ::compile() ) destruct the event_timed object
      sql/sql_parse.cc:
        in case of syntax error clean up lex->et because there could be an object
        created. as in the code the same is done for SPs.
      f92086d0
    • unknown's avatar
      WL#1034 update · 112d408f
      unknown authored
      cleanup before throwin away DYNAMIC_ARRAY for event storage,
      once reallocated I get dangling pointers so that's not good.
      solution will be found however ;)
      
      
      sql/event.cc:
        - remove unneeded variables
        - remove commented out code
        - remove non-cs compliant comment
        - fix a bug when removing from memory cache
        - better close the tables than relying on sql_parse.cc::do_command()
          to do that
      sql/event_executor.cc:
        - cleanup
      sql/event_priv.h:
        -cleanup
      sql/event_timed.cc:
        cleanup
      112d408f
  19. 12 Dec, 2005 1 commit
    • unknown's avatar
      WL#1034 update · 81eadfca
      unknown authored
      QUEUE implementation working now. this should be ready more or less
      for testing once the debug output is being cleaned and some things
      around DYNAMIC_ARRAY are cleaned
      - fix handling in case of errors that lead to crashes, now no more crashes
        in case of table corruption and such.
      
      
      include/queues.h:
        introduce a safe version of queue_insert that will extend the queue if
        necessary. the auto_extent is passed to the _ex version of init_queue()
      mysys/queues.c:
        add init_queue_ex() implementation
        add queue_insert_safe() implementation
      sql/event.cc:
        - move mysql_priv.h inclusion to event_priv.h
        - use a priority queue instead of DYNAMIC_ARRAY which is sorted
      sql/event.h:
        reorder
      sql/event_executor.cc:
        reorder
      sql/event_priv.h:
        - reorder a bit
        - add macroses and functions for queue manipulation which stay on top
         of QUEUE (partly implemented for DYNAMIC_ARRAY but will be cleared to be
         only for QUEUE).
      sql/event_timed.cc:
        allocate one more byte and zeroterminate, really
      81eadfca
  20. 08 Dec, 2005 2 commits
    • unknown's avatar
      WL #1034 update · 1c5573a4
      unknown authored
      - handle better non-latin1 identifiers
      
      
      sql/event.cc:
        - introduce a wrapper to compare easily and correctly
        LEX_STRINGs
        - remove few unneeded variables
        - remove need_second_pass by restructuring the code. this brings
          performance boost because the code bails out from the loop once
          it hits what it looks for
        - handle ALTER EVENT name RENAME TO name  (throw an error message).
      sql/event_executor.cc:
        - comment about DBUG_FAULTY_THR
        - indent fix
      sql/event_timed.cc:
        - fix a problem when event name is not latin1. a cyrillic event name
          was crashing the parser so the I emulate SET NAMES utf8. The data is
          already in utf8, being loaded from the disk.
      sql/share/errmsg.txt:
        add new error message
      1c5573a4
    • unknown's avatar
      - last bits of unneeded error checking in sql_parse.cc thrown away · c1cb8db8
      unknown authored
      - fix a bug introduced with last commit ALTER EVENT a RENAME TO b; failed
      - misc
      
      
      sql/event.cc:
        - rename evex_db_find_routine_aux() to evex_db_find_event_aux() (better name)
        - change parameter order of db_update_event()
        - last bits to handle errors as close as possible to the place they occur
        - fix a bug introduced with last commit: first check for overwriting and event and then
          check whether the original one exists
      sql/event.h:
        add a new error code returned by event_timed::compile() in case of 
        error
      sql/event_priv.h:
        rename
      sql/event_timed.cc:
        - function rename
        - add a bit of doc
      sql/share/errmsg.txt:
        - extend an error message so it's more informative
        - add a new error message
      sql/sql_parse.cc:
        refactor the cases for CREATE/ALTER/DROP event so use as much common
        code as possible. last bits of error checking unneeded in sql_parse.cc
        thrwon out.
      c1cb8db8
  21. 07 Dec, 2005 3 commits
    • unknown's avatar
      WL #1034 updates after review · faa8995e
      unknown authored
      (strip m_ as prefix from member variables' names)
      
      
      sql/event.cc:
        - change copyright years
        - remove m_ prefix from member variables (I liked m_)
        - reorder parameter in evex_update_event()
      sql/event.h:
        - change copyright years
        - remove m_ prefix from member variables
        - declare some member variables as private (were public)
        - delete 0 is valid in C++ therefore don't embrace with if()
      sql/event_executor.cc:
        - executor => scheduler in messages
        - fix a bug introduced in last commit -> typo in a mutex name
        - remove m_ prefix from member variables
      sql/event_priv.h:
        - change copyright years
      sql/event_timed.cc:
        - change copyright years
        - strip m_ as prefix from member variables' names
      sql/sql_parse.cc:
        - strip m_ as prefix from member variables' names
      sql/sql_yacc.yy:
        - strip m_ as prefix from member variables names
      faa8995e
    • unknown's avatar
      WL #1034 updates after review · a4bcbd51
      unknown authored
      sql/event.cc:
        - fix TODO (remove things already done)
        - check the length of the event's name and body during creation
          and report an error if longer than what can be fit into 
          mysql.event (nothing like non-strict mode here)
        - report to sql_parse.cc and error when open table failed, otherwise send_ok()
          was being called and the error have become an warning.
        - update function documentation a bit
        - evex_db_find_routine_aux returns 0 and not EVEX_OK
      sql/event_executor.cc:
        - CS changes to definitions of the main and worker thread routines
        - reorder code a bit to prevent crashes because of reading of
          already freed data -> first wait all events to finish their work,
          namely all worker threads to finish, and then destroy in-memory
          structures
        - more error checking and error reporting at the place of failure.
      sql/event_priv.h:
        code simplifying macro
      sql/event_timed.cc:
        CS cosmetics
      a4bcbd51
    • unknown's avatar
      WL#1034 ongoing updates after review · bc3708a5
      unknown authored
      sql/event.cc:
        -my_error() as close as possible to the place where the error
         occurs.
        -a thought how to replicate events
        -use close_thread_tables() in some cases and for others rely on
         this call being done in sql_parse.cc::do_command()
      sql/event.h:
        remove redundant defines
      sql/event_executor.cc:
        - reenable the compilation again
        - don't backup the open_tables_state, it's not needed
      sql/event_timed.cc:
        - inline a bit
        - comment added
      sql/mysqld.cc:
        - start mysqld with --event-scheduler=0 by default
      sql/share/errmsg.txt:
        3 new messages
      sql/sql_parse.cc:
        remove now obsolete error checking - the errors are reported
        as closer as possible to the place where they are detected
      sql/sql_yacc.yy:
        add WARNING message. fix a bug that was corrupting 
        thd->client_capabilites ->
        select count(*) from mysql.event
        was reporting : "Unknown table test.event"!!!
        Using temporal variable is nice but IMO quite error-prone.
      bc3708a5
  22. 06 Dec, 2005 2 commits
    • unknown's avatar
      WL#1034 · 7838d468
      unknown authored
      make more independent of SP
      
      
      sql/event.cc:
        use own routine - export it
      sql/event_priv.h:
        export these two
      sql/event_timed.cc:
        use own routine, don't rely on SP
      sql/sp.cc:
        revert changes to SP
      sql/sp.h:
        revert changes to SP
      sql/sql_show.cc:
        rever changes to SP
      7838d468
    • unknown's avatar
      WL#1034 · 70856a0d
      unknown authored
      updated sources
      
      
      sql/event.cc:
        update
        put some error calls to the places they occur
      sql/event.h:
        - change the default (does not work in STRICT mode)
      sql/event_executor.cc:
        move mutex initialization to evex_init_mutexes so init_events() can be reused when the
        main thread does not work and set global event_scheduler=1; (this will start the thread)
        The main thread is now visible with show processlist and can be killed.
      sql/event_priv.h:
        don't use anymore SP for opening table
      sql/event_timed.cc:
        don't use anymore SP routines for opening mysql.event
      sql/mysqld.cc:
        shutdown_events() should be maximal at the end of the server because
        it destroys mutexes of EVEX. The call should not be in the main thread.
      sql/set_var.cc:
        make sys_var_event_executor subclass sys_var_bool_ptr
        to overload ::update() method - needed to start a
        killed (non-running) evex main thread
      sql/set_var.h:
        declare class sys_var_event_executor
      sql/share/errmsg.txt:
        2 new messages
      70856a0d
  23. 05 Dec, 2005 1 commit
    • unknown's avatar
      WL#1034 updated · 7ff79771
      unknown authored
      - split into several files
      - forbid parallel execution (before analyse is done how to make it possible)
        because the same sp_head instance cannot be executed in parallel
      - added GPL headers
      - changed EVENT_ACL to be per DB variable
      - fixed minor problems
      
      
      mysql-test/lib/init_db.sql:
        WL#1034 updated
        - add Event_priv to mysql.user (update test)
        - add updated mysql.event table struct
      scripts/mysql_fix_privilege_tables.sql:
        WL#1034 updated
        add updated mysql.event structure
      sql/Makefile.am:
        split event.cc into
        - event.cc (create/alter/drop)
        - event_executor.cc (main and worker threads)
        - event_timed.cc (class event_timed)
        - event_priv.h (some definitions used internally by the module)
      sql/event.cc:
        - added GPL header
        - split into few files
        - fixed some issues after code review
        - now using SP routines for opening/traversing/closing tables
          (will be reverted)
      sql/event.h:
        - add GPL header
        - remove two methods - inline them in sql_yacc.yy 
        - don't use absolute values for EVEX_ defines but the SP_ equivalents (have to move 100% to SP_
          defines and as later step to not transfer messages upwards in the stack but
          report them at the place they occur)
        - updated reference table definition
        - move default mem_root param from event.cc to the header
      sql/mysqld.cc:
        WL#1034
        rename --event-executor to --event-scheduler
        executor sounds a bit scary :)
      sql/set_var.cc:
        rename internal variable name from event_executor to event_scheduler
        (ppl won't be scarried anymore :)
      sql/share/errmsg.txt:
        omit one %s - not needed
      sql/sp_head.cc:
        disable this DBUG_PRINT for a bit. m_next_cached_sp is 0x0 and I get crash here...
      sql/sp_head.h:
        remove m_old_cmq, a temporal variable is used in sql_yacc.yy (Serg's idea)
        to keep the previous state.
        $<ulong_val>$ =  ....
        
        YYTHD->client_capabilites != $<ulong_val>4;
        
        (the same is done also for class event_timed)
      sql/sql_acl.cc:
        handle pre-5.1.4 table and give the user EVENT_ACL if he had CREATE_ACL
      sql/sql_acl.h:
        fix the bitmask
      sql/sql_parse.cc:
        - move from EVENT_ACL being global to EVENT_ACL being per DB like
          CREATE_PROC_ACL
        - lex->m_qname dropped, because not needed, fix code therefore
        - add comment that SHOW CREATE EVENT has to be implemented
      sql/sql_yacc.yy:
        - use temporal variable of Bison to store a short lived value
        - fix indentation
        - inline 2 class event_timed methods in the parser
      sql/tztime.h:
        be more expressive - it's already extern
      7ff79771
  24. 02 Dec, 2005 1 commit