An error occurred fetching the project authors.
  1. 18 Mar, 2011 1 commit
  2. 07 Feb, 2011 1 commit
    • Dmitry Lenev's avatar
      Fix for bug#36544 "DROP USER does not remove stored function · b169b8d8
      Dmitry Lenev authored
      privileges".
      
      The first problem was that DROP USER didn't properly remove privileges 
      on stored functions from in-memory structures. So the dropped user
      could have called stored functions on which he had privileges before
      being dropped while his connection was still around.
      Even worse if a new user with the same name was created he would
      inherit privileges on stored functions from the dropped user.
      Similar thing happened with old user name and function privileges
      during RENAME USER.
      
      This problem stemmed from the fact that the handle_grant_data() function
      which handled DROP/RENAME USER didn't take any measures to update
      in-memory hash with information about function privileges after
      updating them on disk.
      
      This patch solves this problem by adding code doing just that.
      
      The second problem was that RENAME USER didn't properly update in-memory
      structures describing table-level privileges and privileges on stored 
      procedures. As result such privileges could have been lost after a rename
      (i.e. not associated with the new name of user) and inherited by a new
      user with the same name as the old name of the original user.
      
      This problem was caused by code handling RENAME USER in
      handle_grant_struct() which [sic!]:
      a) tried to update wrong (tables) hash when updating stored procedure
         privileges for new user name.
      b) passed wrong arguments to function performing the hash update and
         didn't take into account the way in which such update could have
         changed the order of the hash elements.
      
      This patch solves this problem by ensuring that a) the correct hash
      is updated, b) correct arguments are used for the hash_update()
      function and c) we take into account possible changes in the order
      of hash elements.
      
      mysql-test/r/grant.result:
        Added test coverage for bug#36544 "DROP USER does not remove stored
        function privileges".
      mysql-test/suite/funcs_1/r/innodb_storedproc_06.result:
        Since after fixing bug#36544 "DROP USER does not remove stored function
        privileges" in-memory structures are correctly updated by DROP USER,
        DROP FUNCTION performed after DROP USER for its definer no longer
        produces unwarranted warning/error messages.
      mysql-test/suite/funcs_1/r/memory_storedproc_06.result:
        Since after fixing bug#36544 "DROP USER does not remove stored function
        privileges" in-memory structures are correctly updated by DROP USER,
        DROP FUNCTION performed after DROP USER for its definer no longer
        produces unwarranted warning/error messages.
      mysql-test/suite/funcs_1/r/myisam_storedproc_06.result:
        Since after fixing bug#36544 "DROP USER does not remove stored function
        privileges" in-memory structures are correctly updated by DROP USER,
        DROP FUNCTION performed after DROP USER for its definer no longer
        produces unwarranted warning/error messages.
      mysql-test/t/grant.test:
        Added test coverage for bug#36544 "DROP USER does not remove stored
        function privileges".
      sql/sql_acl.cc:
        Changed handle_grant_data() to also update hash with function 
        privileges. This allows DROP/RENAME USER correctly keep this 
        in-memory structure up-to-date.
        
        To do this extended handle_grant_struct() to support updating of this
        hash. In addition fixed code in this function which is responsible for 
        handling of column and routine hashes during RENAME USER, ensured that
        we correctly update these hashes after changing user name and that we
        don't skip elements while iterating through the hash and doing updates.
      b169b8d8
  3. 14 Jan, 2011 1 commit
  4. 15 Dec, 2010 1 commit
    • Alexander Nozdrin's avatar
      Patch for Bug#57952 (privilege change is not taken into account by EXECUTE). · 1bd81f6b
      Alexander Nozdrin authored
      The user-visible problem was that changes to column-level privileges,
      happened in between of PREPARE and EXECUTE of a prepared statement, were
      neglected. I.e. a prepared statement could be executed with the
      column-level privileges as of PREPARE-time. The problem existed for
      column-level privileges only.
      
      A similar problem existed for stored programs: the changes between
      executions didn't have an effect.
      
      Technically the thing is that table references are cached in
      Prepared_statement::prepare() call. In subsequent
      Prepared_statement::execute() calls those cached values are used.
      There are two functions to get a field by name: find_field_in_table() and
      find_field_in_table_ref(). On prepare-phase find_field_in_table_ref() is
      called, on execute-phase -- find_field_in_table() because the table is
      cached. find_field_in_table() does not check column-level privileges and
      expects the caller to do that. The problem was that this check was
      forgotten.
      
      The fix is to check them there as it happens in find_field_in_table_ref().
      1bd81f6b
  5. 13 Oct, 2010 1 commit
  6. 07 Oct, 2010 1 commit
    • Dmitry Lenev's avatar
      Fix for bug#57061 "User without privilege on routine can · eaae6752
      Dmitry Lenev authored
      discover its existence".
      
      The problem was that user without any privileges on 
      routine was able to find out whether it existed or not.
      DROP FUNCTION and DROP PROCEDURE statements were 
      checking if routine being dropped existed and reported 
      ER_SP_DOES_NOT_EXIST error/warning before checking 
      if user had enough privileges to drop it.
      
      This patch solves this problem by changing code not to 
      check if routine exists before checking if user has enough 
      privileges to drop it. Moreover we no longer perform this 
      check using a separate call instead we rely on 
      sp_drop_routine() returning SP_KEY_NOT_FOUND if routine 
      doesn't exist.
      
      This change also simplifies one of upcoming patches
      refactoring global read lock implementation.
      
      mysql-test/r/grant.result:
        Updated test case after fixing bug#57061 "User without
        privilege on routine can discover its existence". Removed
        DROP PROCEDURE/FUNCTION statements which have started to
        fail after this fix (correctly). There is no need in
        dropping routines in freshly created database anyway.
      mysql-test/r/sp-security.result:
        Added new test case for bug#57061 "User without privilege
        on routine can discover its existence". Updated existing
        tests according to new behaviour.
      mysql-test/suite/funcs_1/r/innodb_storedproc_06.result:
        Updated test case after fixing bug#57061 "User without
        privilege on routine can discover its existence".
        Now we drop routines under user which has enough
        privileges to do so.
      mysql-test/suite/funcs_1/r/memory_storedproc_06.result:
        Updated test case after fixing bug#57061 "User without
        privilege on routine can discover its existence".
        Now we drop routines under user which has enough
        privileges to do so.
      mysql-test/suite/funcs_1/r/myisam_storedproc_06.result:
        Updated test case after fixing bug#57061 "User without
        privilege on routine can discover its existence".
        Now we drop routines under user which has enough
        privileges to do so.
      mysql-test/suite/funcs_1/storedproc/storedproc_06.inc:
        Updated test case after fixing bug#57061 "User without
        privilege on routine can discover its existence".
        Now we drop routines under user which has enough
        privileges to do so.
      mysql-test/t/grant.test:
        Updated test case after fixing bug#57061 "User without
        privilege on routine can discover its existence". Removed
        DROP PROCEDURE/FUNCTION statements which have started to
        fail after this fix (correctly). There is no need in
        dropping routines in freshly created database anyway.
      mysql-test/t/sp-security.test:
        Added new test case for bug#57061 "User without privilege
        on routine can discover its existence". Updated existing
        tests according to new behaviour.
      sql/sp.cc:
        Removed sp_routine_exists_in_table() which is no longer
        used.
      sql/sp.h:
        Removed sp_routine_exists_in_table() which is no longer
        used.
      sql/sql_parse.cc:
        When dropping routine we no longer check if routine exists 
        before checking if user has enough privileges to do so. 
        Moreover we no longer perform this check using a separate 
        call instead we rely on sp_drop_routine() returning 
        SP_KEY_NOT_FOUND if routine doesn't exist.
      eaae6752
  7. 09 Aug, 2010 1 commit
  8. 23 Jun, 2010 1 commit
    • sunanda's avatar
      Backport into build-201006221614-5.1.46sp1 · c658c3ed
      sunanda authored
      > ------------------------------------------------------------
      > revno: 3367 [merge]
      > revision-id: joro@sun.com-20100504140328-srxf3c088j2twnq6
      > parent: kristofer.pettersson@sun.com-20100503172109-f9hracq5pqsaomb1
      > parent: joro@sun.com-20100503151651-nakknn8amrapmdp7
      > committer: Georgi Kodinov <joro@sun.com>
      > branch nick: B53371-5.1-bugteam
      > timestamp: Tue 2010-05-04 17:03:28 +0300
      > message:
      >   Bug #53371: COM_FIELD_LIST can be abused to bypass table level grants.
      >   
      >   This is the 5.1 merge and extension of the fix.
      >   The server was happily accepting paths in table name in all places a table
      >   name is accepted (e.g. a SELECT). This allowed all users that have some 
      >   privilege over some database to read all tables in all databases in all
      >   mysql server instances that the server file system has access to.
      >   Fixed by :
      >   1. making sure no path elements are allowed in quoted table name when
      >   constructing the path (note that the path symbols are still valid in table names
      >   when they're properly escaped by the server).
      >   2. checking the #mysql50# prefixed names the same way they're checked for
      >   path elements in mysql-5.0.
      > ------------------------------------------------------------
      > Use --include-merges or -n0 to see merged revisions.
      c658c3ed
  9. 23 Feb, 2010 1 commit
  10. 23 Oct, 2009 1 commit
  11. 22 Oct, 2009 1 commit
    • Alexander Nozdrin's avatar
      Backporting patches for Bug#38347 (ALTER ROUTINE privilege · 72025253
      Alexander Nozdrin authored
      allows SHOW CREATE TABLE) from 6.0. Original revisions:
      ------------------------------------------------------------
      revno: 2617.31.8
      committer: Alexander Nozdrin <alik@sun.com>
      branch nick: 6.0-rt-bug38347
      timestamp: Thu 2009-03-26 09:08:24 +0300
      message:
        Patch for Bug#38347: ALTER ROUTINE privilege allows SHOW CREATE TABLE.
        
        If a user has any of the following privileges for a table (or the database
        if the table), he should be able to issue SHOW CREATE TABLE for the table:
          - CREATE
          - DROP
          - ALTER
          - DELETE
          - INDEX
          - INSERT
          - SELECT
          - UPDATE
          - TRIGGER
          - REFERENCES
          - GRANT OPTION
          - CREATE VIEW
          - SHOW VIEW
        
        Any other privilege (even SUPER) should not allow SHOW CREATE TABLE.
      ------------------------------------------------------------
      revno: 2617.31.11
      committer: Alexander Nozdrin <alik@sun.com>
      branch nick: 6.0-rt
      timestamp: Fri 2009-03-27 21:36:34 +0300
      message:
        Additional patch for Bug#38347 (ALTER ROUTINE privilege
        allows SHOW CREATE TABLE).
        
        The problem was that information_schema.test,
        information_schema_parameters.test and information_schema_routines.test
        failed with the first patch. That happened due to limitation in check_access():
        it allows only SELECT_ACL privilege for INFORMATION_SCHEMA tables.
        
        The patch is to request only SELECT_ACL privilege for INFORMATION_SCHEMA tables.
      ------------------------------------------------------------
      72025253
  12. 19 Oct, 2009 1 commit
    • Kristofer Pettersson's avatar
      Bug#27145 EXTRA_ACL troubles · 0659b857
      Kristofer Pettersson authored
      The flag EXTRA_ACL is used in conjugation with our access checks, yet it is
      not clear what impact this flag has.
      This is a code clean up which replaces use of EXTRA_ACL with an explicit
      function parameter.
      The patch also fixes privilege checks for:
      - SHOW CREATE TABLE: The new privilege requirement is any privilege on
        the table-level.
      - CHECKSUM TABLE: Requires SELECT on the table level.
      - SHOW CREATE VIEW: Requires SHOW_VIEW and SELECT on the table level
        (just as the manual claims)
      - SHOW INDEX: Requires any privilege on any column combination.
      
      
      mysql-test/r/grant.result:
        * Error message now shows correct command (SHOW instead of SELECT)
      mysql-test/r/grant2.result:
        * Error message now shows correct command (SHOW instead of SELECT)
      mysql-test/r/grant4.result:
        * This test file tests privilege requirements for
          SHOW COLUMNS
          CREATE TABLE .. LIKE
          SHOW CREATE TABLE
          SHOW INDEX
          CHECKSUM TABLE
          SHOW CREATE VIEW
      mysql-test/r/information_schema_db.result:
        * Added SELECT privilege to testdb_2 as
          SHOW CREATE VIEW now demands this privilege
          as well as SHOW VIEW.
      mysql-test/r/outfile.result:
        * Changed error code
      mysql-test/r/view_grant.result:
        * Additional SELECT privilege is now needed
          for SHOW CREATE VIEW
      mysql-test/t/grant4.test:
        * This test file tests privilege requirements for
          SHOW COLUMNS
          CREATE TABLE .. LIKE
          SHOW CREATE TABLE
          SHOW INDEX
          CHECKSUM TABLE
          SHOW CREATE VIEW
      mysql-test/t/information_schema_db.test:
        * Added SELECT privilege to testdb_2 as
          SHOW CREATE VIEW now demands this privilege
          as well as SHOW VIEW.
      mysql-test/t/outfile.test:
        * Changed error code
      mysql-test/t/view_grant.test:
        * Additional SELECT privilege is now needed
          for SHOW CREATE VIEW
      sql/mysql_priv.h:
        * Replaced EXTRA_ACL with a parameter
      sql/sp_head.cc:
        * Replaced EXTRA_ACL with a parameter
      sql/sql_acl.cc:
        * Converted function documentation to doxygen and clarified some behaviors.
        * Changed value from uint to bool to better reflect its meaning.
        * Removed pointless variable orig_want_access
        * Added function has_any_table_level_privileges to help with requirements
          checks during SHOW CREATE TABLE.
      sql/sql_acl.h:
        * changed signature of check_grant()
        * introduced access control function has_any_table_leevl_privileges()
      sql/sql_base.cc:
        * Check_table_access has new signature
      sql/sql_cache.cc:
        * Check_table_access has new signature
      sql/sql_parse.cc:
        * Rewrote function documentation in doxygen comments for: check_access,
          check_table_acces, check_grant.
        * Removed EXTRA_ACL flag where it doesn't hold any meaningful purpose anymore
          and replaced it with a function parameter where any privileges on any column
          combination would satisfy the requirement.
        * Fixed privilege check for SHOW COLUMNS and SHOW INDEX
        * Modified check_table_access to gain clarity in what EXTRA_ACL actually does.
        * Modified check_access to gain clarity in what EXTRA_ACL actually does.
        * Fixed privilege check for CREATE TABLE .. LIKE .. ; It now requires SELECT
          privileges on the table.
        * Fixed privilege check for SHOW CREATE TABLE ..; It now requires any privilege
          on the table level.
      sql/sql_plugin.cc:
        * check_table_access has new signature
      sql/sql_prepare.cc:
        * check_table_access has new signature
      sql/sql_show.cc:
        * check_table_access has new signature
      sql/sql_trigger.cc:
        * check_table_access has new signature
      sql/sql_update.cc:
        * check grant has new signature
      sql/sql_view.cc:
        * check_table_access has new signature
      0659b857
  13. 09 Oct, 2009 2 commits
    • Alexander Nozdrin's avatar
      A backporting patch for WL#4300 (Define privileges for tablespaces). · 13f09243
      Alexander Nozdrin authored
      Original revision in 6.0:
      ------------------------------------------------------------
      revno: 2630.13.11
      committer: Alexander Nozdrin <alik@mysql.com>
      branch nick: 6.0-rt-wl4300
      timestamp: Thu 2008-07-24 11:44:21 +0400
      message:
        A patch for WL#4300: Define privileges for tablespaces.
      ------------------------------------------------------------
      
      per-file messages:
        mysql-test/r/grant.result
          Update result file: new columm 'Create_tablespace_priv' has been added to mysql.user.
        mysql-test/r/ps.result
          Update result file: new columm 'Create_tablespace_priv' has been added to mysql.user.
        mysql-test/r/system_mysql_db.result
          Update result file: new columm 'Create_tablespace_priv' has been added to mysql.user.
        mysql-test/suite/falcon/r/falcon_tablespace_priv.result
          Test case for WL#4300.
        mysql-test/suite/falcon/t/falcon_tablespace_priv.test
          Test case for WL#4300.
        mysql-test/suite/ndb/r/ndb_dd_ddl.result
          Test case for WL#4300.
        mysql-test/suite/ndb/t/ndb_dd_ddl.test
          Test case for WL#4300.
        scripts/mysql_system_tables.sql
          New columm 'Create_tablespace_priv' has been added to mysql.user.
        scripts/mysql_system_tables_data.sql
          'CREATE TABLESPACE' is granted by default to the root user.
        scripts/mysql_system_tables_fix.sql
          Grant 'CREATE TABLESPACE' privilege during system table upgrade
          if a user had SUPER privilege.
        sql/sql_acl.cc
          Added CREATE TABLESPACE privilege.
        sql/sql_acl.h
          Added CREATE TABLESPACE privilege.
        sql/sql_parse.cc
          Check global 'CREATE TABLESPACE' privilege for the following SQL statements:
            - CREATE | ALTER | DROP TABLESPACE
            - CREATE | ALTER | DROP LOGFILE GROUP
        sql/sql_show.cc
          Added CREATE TABLESPACE privilege.
        sql/sql_yacc.yy
          Added CREATE TABLESPACE privilege.
      13f09243
    • Jon Olav Hauglid's avatar
      Bug #25863 No database selected error, but documentation · 4dae0e03
      Jon Olav Hauglid authored
                 says * for global allowed
      
      The current behaviour of 'GRANT *' was changed as a part of the fix
      for Bug#19022, Bug#17199 and Bug#18444. To avoid regression, we keep
      the current behavior and update the documentation. 
      Test case added to grant.test.
      4dae0e03
  14. 29 May, 2009 1 commit
    • Kristofer Pettersson's avatar
      Bug#44658 Create procedure makes server crash when user does not have ALL privilege · 66e0ee66
      Kristofer Pettersson authored
      MySQL crashes if a user without proper privileges attempts to create a procedure.
      
      The crash happens because more than one error state is pushed onto the Diagnostic
      area. In this particular case the user is denied to implicitly create a new user
      account with the implicitly granted privileges ALTER- and EXECUTE ROUTINE.
      
      The new account is needed if the original user account contained a host mask.
      A user account with a host mask is a distinct user account in this context.
      An alternative would be to first get the most permissive user account which
      include the current user connection and then assign privileges to that
      account. This behavior change is considered out of scope for this bug patch.
      
      The implicit assignment of privileges when a user creates a stored routine is a
      considered to be a feature for user convenience and as such it is not
      a critical operation. Any failure to complete this operation is thus considered
      non-fatal (an error becomes a warning).
      
      The patch back ports a stack implementation of the internal error handler interface.
      This enables the use of multiple error handlers so that it is possible to intercept
      and cancel errors thrown by lower layers. This is needed as a error handler already
      is used in the call stack emitting the errors which needs to be converted.
      
      
      mysql-test/r/grant.result:
        * Added test case for bug44658
      mysql-test/t/grant.test:
        * Added test case for bug44658
      sql/sp.cc:
        * Removed non functional parameter no_error and my_error calls as all errors
          from this function will be converted to a warning anyway.
        * Change function return type from int to bool.
      sql/sp.h:
        * Removed non functional parameter no_error and my_error calls as all errors
          from this function will be converted to a warning anyway.
        * Changed function return value from int to bool
      sql/sql_acl.cc:
        * Removed the non functional no_error parameter from the function prototype.
          The function is called from two places and in one of the places we now 
          ignore errors through error handlers.
        * Introduced the parameter write_to_binlog
        * Introduced an error handler to cancel any error state from mysql_routine_grant.
        * Moved my_ok() signal from mysql_routine_grant to make it easier to avoid
          setting the wrong state in the Diagnostic area.
        * Changed the broken error state in sp_grant_privileges() to a warning
          so that if "CREATE PROCEDURE" fails because "Password hash isn't a hexidecimal
          number" it is still clear what happened.
      sql/sql_acl.h:
        * Removed the non functional no_error parameter from the function prototype.
          The function is called from two places and in one of the places we now 
          ignore errors through error handlers.
        * Introduced the parameter write_to_binlog
        * Changed return type for sp_grant_privileges() from int to bool
      sql/sql_class.cc:
        * Back ported implementation of internal error handler from 6.0 branch
      sql/sql_class.h:
        * Back ported implementation of internal error handler from 6.0 branch
      sql/sql_parse.cc:
        * Moved my_ok() signal from mysql_routine_grant() to make it easier to avoid
          setting the wrong state in the Diagnostic area.
      66e0ee66
  15. 30 Apr, 2009 1 commit
  16. 25 Feb, 2009 1 commit
  17. 05 Feb, 2009 1 commit
    • Matthias Leich's avatar
      2. Slice of fix for Bug#42003 tests missing the disconnect of connections <> default · 41e6a1f8
      Matthias Leich authored
         - If missing: add "disconnect <session>"
         - If physical disconnect of non "default" sessions is not finished
           at test end: add routine which waits till this happened
      + additional improvements
        - remove superfluous files created by the test
        - replace error numbers by error names
        - remove trailing spaces, replace tabs by spaces
        - unify writing of bugs within comments
        - correct comments
        - minor changes of formatting
      Fixed tests:
        backup
        check
        compress
        grant
        information_schema
        multi_update
        overflow
        packet
        query_cache_not_embedded
        sp-threads
        subselect
        synchronization
        timezone_grant
      41e6a1f8
  18. 24 Dec, 2008 1 commit
    • Sergey Glukhov's avatar
      Bug#41456 SET PASSWORD hates CURRENT_USER() · 7103f4c9
      Sergey Glukhov authored
      init user->user struct with 
      thd->security_ctx->priv_user context
      if user->user is not initializied
      
      mysql-test/r/grant.result:
        test result
      mysql-test/t/grant.test:
        test case
      sql/set_var.cc:
        init user->user struct with 
        thd->security_ctx->priv_user context
        if user->user is not initializied
      7103f4c9
  19. 10 Jul, 2008 1 commit
    • Sven Sandberg's avatar
      BUG#37975: wait_for_slave_* should increase the timeout · 6e695369
      Sven Sandberg authored
      Problem 1: tests often fail in pushbuild with a timeout when waiting
      for the slave to start/stop/receive error.
      Fix 1: Updated the wait_for_slave_* macros in the following way:
      - The timeout is increased by a factor ten
      - Refactored the macros so that wait_for_slave_param does the work for
      the other macros.
      Problem 2: Tests are often incorrectly written, lacking a
      source include/wait_for_slave_to_[start|stop].inc.
      Fix 2: Improved the chance to get it right by adding
      include/start_slave.inc and include/stop_slave.inc, and updated tests
      to use these.
      Problem 3: The the built-in test language command
      wait_for_slave_to_stop is a misnomer (does not wait for the slave io
      thread) and does not give as much debug info in case of failure as
      the otherwise equivalent macro
      source include/wait_for_slave_sql_to_stop.inc
      Fix 3: Replaced all calls to the built-in command by a call to the
      macro.
      Problem 4: Some, but not all, of the wait_for_slave_* macros had an
      implicit connection slave. This made some tests confusing to read,
      and made it more difficult to use the macro in circular replication
      scenarios, where the connection named master needs to wait.
      Fix 4: Removed the implicit connection slave from all
      wait_for_slave_* macros, and updated tests to use an explicit
      connection slave where necessary.
      Problem 5: The macros wait_slave_status.inc and wait_show_pattern.inc
      were unused. Moreover, using them is difficult and error-prone.
      Fix 5: remove these macros.
      Problem 6: log_bin_trust_function_creators_basic failed when running
      tests because it assumed @@global.log_bin_trust_function_creators=1,
      and some tests modified this variable without resetting it to its
      original value.
      Fix 6: All tests that use this variable have been updated so that
      they reset the value at end of test.
      
      
      mysql-test/extra/rpl_tests/rpl_extraMaster_Col.test:
        Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
      mysql-test/extra/rpl_tests/rpl_extraSlave_Col.test:
        Replaced wait_for_slave_to_stop by include/wait_for_slave_sql_to_stop.inc
        Added connection slave since includ/wait_for_slave_sql_to_stop.inc
        does not do that anymore.
      mysql-test/extra/rpl_tests/rpl_log.test:
        Replaced start slave+wait_slave_status by start_slave.inc
      mysql-test/include/reset_master_and_slave.inc:
        replaced start/stop slave by start_slave.inc/stop_slave.inc
      mysql-test/include/sync_slave_io_with_master.inc:
        Improved comments and error message.
      mysql-test/include/wait_for_slave_io_to_stop.inc:
        Refactored to use wait_for_slave_param.inc.
        Removed connection slave.
      mysql-test/include/wait_for_slave_param.inc:
        - Improved usage instructions
        - Added more debug info in case of timeout
        - Added parameters $slave_param_comparison, $slave_timeout,
        $slave_keep_connection, $slave_error_message
      mysql-test/include/wait_for_slave_sql_error.inc:
        Refactored to use wait_for_slave_param.inc.
        Removed connection slave.
      mysql-test/include/wait_for_slave_sql_to_start.inc:
        Refactored to use wait_for_slave_param.inc.
        Removed connection slave.
      mysql-test/include/wait_for_slave_sql_to_stop.inc:
        Refactored to use wait_for_slave_param.inc.
        Removed connection slave.
      mysql-test/include/wait_for_slave_to_start.inc:
        Refactored to use wait_for_slave_param.inc.
        Removed connection slave.
      mysql-test/include/wait_for_slave_to_stop.inc:
        Refactored to use wait_for_slave_param.inc.
        Removed connection slave.
      mysql-test/include/wait_show_pattern.inc:
        Removed unused (and error-prone) file
      mysql-test/include/wait_slave_status.inc:
        Removed unused (and error-prone) file
      mysql-test/suite/binlog/t/binlog_auto_increment_bug33029.test:
        Renamed $keep_connection to $slave_keep_connection.
      mysql-test/suite/rpl/t/rpl_bug26395.test:
        Replace stop slave by stop_slave.inc
      mysql-test/suite/rpl/t/rpl_circular_for_4_hosts.test:
        Replace start/stop slave by start_slave.inc/stop_slave.inc.
        Replace wait_for_slave_param by wait_for_slave_sql_to_stop.inc.
      mysql-test/suite/rpl/t/rpl_dual_pos_advance.test:
        Renamed $keep_connection to $slave_keep_connection.
      mysql-test/suite/rpl/t/rpl_flushlog_loop.test:
        Replace wait_slave_status by start_slave.inc
      mysql-test/suite/rpl/t/rpl_idempotency.test:
        Added connection slave since wait_for_slave_sql_to_stop.inc does not
        do that any more.
      mysql-test/suite/rpl/t/rpl_incident.test:
        Replaced wait_for_slave_to_stop by wait_for_slave_sql_to_stop.inc
      mysql-test/suite/rpl/t/rpl_init_slave.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
        Replaced save_master_pos;connection slave;sync_with_master by
        sync_slave_with_master.
      mysql-test/suite/rpl/t/rpl_log_pos.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
        Replaced wait_for_slave_param by other wait_for_slave_* macros.
      mysql-test/suite/rpl/t/rpl_packet.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
      mysql-test/suite/rpl/t/rpl_row_inexist_tbl.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
      mysql-test/suite/rpl/t/rpl_row_stop_middle_update.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
      mysql-test/suite/rpl/t/rpl_row_until.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
        Replaced save_master_pos;connection slave;sync_with_master by
        sync_slave_with_master.
      mysql-test/suite/rpl/t/rpl_server_id1.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
      mysql-test/suite/rpl/t/rpl_slave_grp_exec.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
      mysql-test/suite/rpl/t/rpl_slave_skip.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
      mysql-test/suite/rpl/t/rpl_slave_status.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
      mysql-test/suite/rpl/t/rpl_sp.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      mysql-test/suite/rpl/t/rpl_sp_effects.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      mysql-test/suite/rpl/t/rpl_stm_until.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
        Replaced save_master_pos;connection slave;sync_with_master by
        sync_slave_with_master.
      mysql-test/suite/rpl_ndb/t/rpl_ndb_basic.test:
        Replaced start slave by start_slave.inc.
        Added explicit connection slave since wait_for_slave_sql_to_stop.inc
        does not do that anymore.
      mysql-test/t/disabled.def:
        Disabled failing test.
      mysql-test/t/func_time.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      mysql-test/t/grant.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      mysql-test/t/grant2.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      mysql-test/t/innodb_notembedded.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      mysql-test/t/log_bin_trust_function_creators_func.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
        Clean up at end of test by dropping the created user.
      mysql-test/t/query_cache.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      mysql-test/t/query_cache_notembedded.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      mysql-test/t/rpl_init_slave_func.test:
        Replaced start/stop slave by start_slave.inc/stop_slave.inc.
      mysql-test/t/timezone2.test:
        Restore @@global.log_bin_trust_function_creators at end of test.
      6e695369
  20. 27 Mar, 2008 1 commit
    • unknown's avatar
      Patch clean up. · f8653a79
      unknown authored
      Fixed interference between tests: Users were added but not properly removed.
      This caused later tests to fail.
      
      
      mysql-test/r/grant.result:
        Fixed interference between tests: Users were added but not properly removed.
        This caused later tests to fail.
      mysql-test/t/grant.test:
        Fixed interference between tests: Users were added but not properly removed.
        This caused later tests to fail.
      f8653a79
  21. 26 Mar, 2008 1 commit
  22. 25 Mar, 2008 1 commit
    • unknown's avatar
      Bug#33275 Server crash when creating temporary table mysql.user · a3126bfc
      unknown authored
      When creating a temporary table that uses the same name as the mysql
      privs table the server would crash on FLUSH PRIVILEGES.
      
      This patches corrects the problem by setting a flag to ignore any
      temporary table when trying to reload the privileges.
      
      
      mysql-test/r/grant.result:
        Test for checking shadowing of privilege tables
      mysql-test/t/grant.test:
        Test for checking shadowing of privilege tables
      sql/sql_acl.cc:
        Set flag for ignoring temporary tables when trying to reload privileges.
      a3126bfc
  23. 05 Mar, 2008 1 commit
    • unknown's avatar
      Move test that has more to do with grants than DROP. We shouldn't have · 2eb67908
      unknown authored
      grant warnings on embedded server.
      
      
      mysql-test/r/drop.result:
        Move test that has more to do with grants than DROP.
      mysql-test/r/grant.result:
        Move test that has more to do with grants than DROP.
      mysql-test/t/drop.test:
        Move test that has more to do with grants than DROP.
      mysql-test/t/grant.test:
        Move test that has more to do with grants than DROP.
      2eb67908
  24. 04 Feb, 2008 1 commit
    • unknown's avatar
      Patch clean up. · 4e8ef9c8
      unknown authored
      Fixed interference between tests: Users were added but not properly removed.
      This caused later tests to fail.
      
      
      mysql-test/r/grant.result:
        Fixed interference between tests: Users were added but not properly removed.
        This caused later tests to fail.
      mysql-test/t/grant.test:
        Fixed interference between tests: Users were added but not properly removed.
        This caused later tests to fail.
      4e8ef9c8
  25. 01 Feb, 2008 2 commits
    • unknown's avatar
      * Manual merge fix. · bc070bd3
      unknown authored
      mysql-test/r/grant.result:
        - Manual merge step 2: Verify test cases and record new result set.
      bc070bd3
    • unknown's avatar
      Bug#33201 Crash occurs when granting update privilege on one column of a view · f7d8fb1c
      unknown authored
      When issuing a column level grant on a table which require pre-locking the 
      server crashed.
      
      The reason behind the crash was that data structures used by the lock api
      wasn't properly reinitialized in the case of a column level grant.
      
      
      mysql-test/r/grant.result:
        * Added test case
      mysql-test/t/grant.test:
        * Added test case
      sql/sql_acl.cc:
        * The lock api is dending on the thd->lex object and this variable needs to 
          be re-initialized when opened with a new set of tables than specified in the
          original statement.
      f7d8fb1c
  26. 12 Dec, 2007 1 commit
    • unknown's avatar
      Bug#12713 "Error in a stored function called from a SELECT doesn't · 2a0d2fef
      unknown authored
      cause ROLLBACK of statement", part 1. Review fixes.
      
      Do not send OK/EOF packets to the client until we reached the end of 
      the current statement.
      This is a consolidation, to keep the functionality that is shared by all 
      SQL statements in one place in the server.
      Currently this functionality includes:
      - close_thread_tables()
      - log_slow_statement().
      
      After this patch and the subsequent patch for Bug#12713, it shall also include:
      - ha_autocommit_or_rollback()
      - net_end_statement()
      - query_cache_end_of_result().
      
      In future it may also include:
      - mysql_reset_thd_for_next_command().
      
      
      include/mysql_com.h:
        Rename now unused members of NET: no_send_ok, no_send_error, report_error.
        These were server-specific variables related to the client/server
        protocol. They have been made obsolete by this patch.
        
        Previously the same members of NET were used to store the error message
        both on the client and on the server. 
        The error message was stored in net.last_error (client: mysql->net.last_error,
        server: thd->net.last_error).
        The error code was stored in net.last_errno (client: mysql->net.last_errno,
        server: thd->net.last_errno).
        The server error code and message are now stored elsewhere 
        (in the Diagnostics_area), thus NET members are no longer used by the
        server.
        Rename last_error to client_last_error, last_errno to client_last_errno
        to avoid potential bugs introduced by merges.
      include/mysql_h.ic:
        Update the ABI file to reflect a rename. 
        Renames do not break the binary compatibility.
      libmysql/libmysql.c:
        Rename last_error to client_last_error, last_errno to client_last_errno.
        This is necessary to ensure no unnoticed bugs introduced by merged
        changesets.
        
        Remove net.report_error, net.no_send_ok, net.no_send_error.
      libmysql/manager.c:
        Rename net.last_errno to net.client_last_errno.
      libmysqld/lib_sql.cc:
        Rename net.last_errno to net.client_last_errno.
        
        Update the embedded implementation of the client-server protocol to
        reflect the refactoring of protocol.cc.
      libmysqld/libmysqld.c:
        Rename net.last_errno to net.client_last_errno.
      mysql-test/r/events.result:
        Update to reflect the change in mysql_rm_db(). Now we drop stored
        routines and events for a given database name only if there
        is a directory for this database name. ha_drop_database() and
        query_cache_invalidate() are called likewise. 
        Previously we would attempt to drop routines/events even if database
        directory was not found (it worked, since routines and events are stored
        in tables). This fixes Bug 29958 "Weird message on DROP DATABASE if mysql.proc
        does not exist".
        The change was done because the previous code used to call send_ok()
        twice, which led to an assertion failure when asserts against it were
        added by this patch.
      mysql-test/r/grant.result:
        Fix the patch for Bug 16470, now FLUSH PRIVILEGES produces an error 
        if mysql.procs_priv is missing.
        This fixes the assert that send_ok() must not called after send_error()
        (the original patch for Bug 16470 was prone to this).
      mysql-test/suite/rpl/r/rpl_row_tabledefs_2myisam.result:
        Produce a more detailed error message.
      mysql-test/suite/rpl/r/rpl_row_tabledefs_3innodb.result:
        Produce a more detailed error message.
      mysql-test/t/grant.test:
        Update the test, now FLUSH PRIVILEGES returns an error if mysql.procs_priv
        is missing.
      server-tools/instance-manager/mysql_connection.cc:
        Rename net.last_errno to net.client_last_errno.
      sql/ha_ndbcluster_binlog.cc:
        Add asserts. 
        
        Use getters to access statement status information.
        
        Add a comment why run_query() is broken. Reset the diagnostics area
        in the end of run_query() to fulfill the invariant that the diagnostics_area
        is never assigned twice per statement (see the comment in the code
        when this can happen). We still do not clear thd->is_fatal_error and
        thd->is_slave_error, which may lead to bugs, I consider the whole affair
        as something to be dealt with separately.
      sql/ha_partition.cc:
        fatal_error() doesn't set an error by itself. Perhaps we should
        remove this method altogether and instead add a flag to my_error 
        to set thd->is_fatal_error property.
        
        Meanwhile, this change is a part of inspection made to the entire source
        code with the goal to ensure that fatal_error()
        is always accompanied by my_error().
      sql/item_func.cc:
        There is no net.last_error anymore. Remove the obsolete assignment.
      sql/log_event.cc:
        Use getters to access statement error status information.
      sql/log_event_old.cc:
        Use getters to access statement error status information.
      sql/mysqld.cc:
        Previously, if a continue handler for an error was found, my_message_sql() 
        would not set an error in THD. Since the current statement
        must be aborted in any case, find_handler() had a hack to assign 
        thd->net.report_error to 1.
        
        Remove this hack. Set an error in my_message_sql() even if the continue
        handler is found. The error will be cleared anyway when the handler
        is executed. This is one action among many in this patch to ensure the 
        invariant that whenever thd->is_error() is TRUE, we have a message in 
        thd->main_da.message().
      sql/net_serv.cc:
        Use a full-blown my_error() in net_serv.cc to report an error,
        instead of just setting net->last_errno. This ensures the invariant that
        whenever thd->is_error() returns TRUE, we have a message in 
        thd->main_da.message().
        
        Remove initialization of removed NET members.
      sql/opt_range.cc:
        Use my_error() instead of just raising thd->net.report_error. 
        This ensures the invariant that whenever thd->is_error() returns TRUE, 
        there is a message in thd->main_da.message().
      sql/opt_sum.cc:
        Move invocation of fatal_error() right next to the place where
        we set the error message. That makes it easier to track that whenever
        fatal_error() is called, there is a message in THD.
      sql/protocol.cc:
        Rename send_ok() and send_eof() to net_send_ok() and net_send_eof() 
        respectively. These functions write directly to the network and are not 
        for use anywhere outside the client/server protocol code. 
        
        Remove the code that was responsible for cases when either there is 
        no error code, or no error message, or both.
        Instead the calling code ensures that they are always present. Asserts
        are added to enforce the invariant.
        
        Instead of a direct access to thd->server_status and thd->total_warn_count
        use function parameters, since these from now on don't always come directly
        from THD.
        
        Introduce net_end_statement(), the single-entry-point replacement API for 
        send_ok(), send_eof() and net_send_error().
        
        Implement Protocol::end_partial_result_set to use in select_send::abort()
        when there is a continue handler.
      sql/protocol.h:
        Update declarations.
      sql/repl_failsafe.cc:
        Use getters to access statement status information in THD.
        Rename net.last_error to net.client_last_error.
      sql/rpl_record.cc:
        Set an error message in prepare_record() if there is no default
        value for the field -- later we do print this message to the client.
      sql/rpl_rli.cc:
        Use getters to access statement status information in THD.
      sql/slave.cc:
        In create_table_from_dump() (a common function that is used in 
        LOAD MASTER TABLE SQL statement and COM_LOAD_MASTER_DATA), instead of hacks
        with no_send_ok, clear the diagnostics area when mysql_rm_table() succeeded.
        
        Update has_temporary_error() to work correctly when no error is set.
        This is the case when Incident_log_event is executed: it always returns
        an error but does not set an error message.
        
        Use getters to access error status information.
      sql/sp_head.cc:
        Instead of hacks with no_send_error, work through the diagnostics area 
        interface to suppress sending of OK/ERROR packets to the client.
        
        Move query_cache_end_of_result before log_slow_statement(), similarly
        to how it's done in dispatch_command().
      sql/sp_rcontext.cc:
        Remove hacks with assignment of thd->net.report_error, they are not
        necessary any more (see the changes in mysqld.cc).
      sql/sql_acl.cc:
        Use getters to access error status information in THD.
      sql/sql_base.cc:
        Access thd->main_da.sql_errno() only if there is an error. This fixes
        a bug when auto-discovery, that was effectively disabled under pre-locking.
      sql/sql_binlog.cc:
        Remove hacks with no_send_ok/no_send_error, they are not necessary 
        anymore: the caller is responsible for network communication.
      sql/sql_cache.cc:
        Disable sending of OK/ERROR/EOF packet in the end of dispatch_command
        if the response has been served from the query cache. This raises the 
        question whether we should store EOF packet in the query cache at all,
        or generate it anew for each statement (we should generate it anew), but
        this is to be addressed separately.
      sql/sql_class.cc:
        Implement class Diagnostics_area. Please see comments in sql_class.h
        for details.
        
        Fix a subtle coding mistake in select_send::send_data: when on slave, 
        an error in Item::send() was ignored.
        The problem became visible due to asserts that the diagnostics area is
        never double assigned.
        
        Remove initialization of removed NET members.
        
        In select_send::abort() do not call select_send::send_eof(). This is
        not inheritance-safe. Even if a stored procedure continue handler is
        found, the current statement is aborted, not succeeded.
        Instead introduce a Protocol API to send the required response, 
        Protocol::end_partial_result_set().
        
        This simplifies implementation of select_send::send_eof(). No need
        to add more asserts that there is no error, there is an assert inside
        Diagnostics_area::set_ok_status() already.
        
        Leave no trace of no_send_* in the code.
      sql/sql_class.h:
        Declare class Diagnostics_area. 
        
        Remove the hack with no_send_ok from
        Substatement_state.
        
        Provide inline implementations of send_ok/send_eof.
        
        Add commetns.
      sql/sql_connect.cc:
        Remove hacks with no_send_error. 
        
        Since now an error in THD is always set if net->error, it's not necessary
        to check both net->error and thd->is_error() in the do_command loop.
        
        Use thd->main_da.message() instead of net->last_errno.
        
        Remove the hack with is_slave_error in sys_init_connect. Since now we do not
        reset the diagnostics area in net_send_error (it's reset at the beginning
        of the next statement), we can access it safely even after 
        execute_init_command.
      sql/sql_db.cc:
        Update the code to satisfy the invariant that the diagnostics area is never
        assigned twice.
        Incidentally, this fixes Bug 29958 "Weird message on DROP DATABASE if 
        mysql.proc does not exist".
      sql/sql_delete.cc:
        Change multi-delete to abort in abort(), as per select_send protocol.
        Fixes the merge error with the test for Bug 29136
      sql/sql_derived.cc:
        Use getters to access error information.
      sql/sql_insert.cc:
        Use getters to access error information.
      sql-common/client.c:
        Rename last_error to client_last_error, last_errno to client_last_errno.
      sql/sql_parse.cc:
        Remove hacks with no_send_error. Deploy net_end_statement().
        
        The story of COM_SHUTDOWN is interesting. Long story short, the server 
        would become on its death's door, and only no_send_ok/no_send_error assigned
        by send_ok()/net_send_error() would hide its babbling from the client.
        
        First of all, COM_QUIT does not require a response. So, the comment saying
        "Let's send a response to possible COM_QUIT" is not only groundless 
        (even mysqladmin shutdown/mysql_shutdown() doesn't send COM_QUIT after 
        COM_SHUTDOWN), it's plainly incorrect.
        
        Secondly, besides this additional 'OK' packet to respond to a hypothetical
        COM_QUIT, there was the following code in dispatch_command():
        
        if (thd->killed)
          thd->send_kill_message();
        if (thd->is_error()
          net_send_error(thd);
        
        This worked out really funny for the thread through which COM_SHUTDOWN
        was delivered: we would get COM_SHUTDOWN, say okay, say okay again, 
        kill everybody, get the kill signal ourselves, and then attempt to say 
        "Server shutdown in progress" to the client that is very likely long gone.
        
        This all became visible when asserts were added that the Diagnostics_area
        is not assigned twice.
        
        Move query_cache_end_of_result() to the end of dispatch_command(), since
        net_send_eof() has been moved there. This is safe, query_cache_end_of_result()
        is a no-op if there is no started query in the cache.
        
        Consistently use select_send interface to call abort() or send_eof()
        depending on the operation result.
        
        Remove thd->fatal_error() from reset_master(), it was a no-op. 
        in hacks with no_send_error woudl save us
        from complete breakage of the client/server protocol.
        
        Consistently use select_send::abort() whenever there is an error, 
        and select_send::send_eof() in case of success.
        The issue became visible due to added asserts.
      sql/sql_partition.cc:
        Always set an error in THD whenever there is a call to fatal_error().
      sql/sql_prepare.cc:
        Deploy class Diagnostics_area.
        Remove the unnecessary juggling with the protocol in 
        Select_fetch_protocol_binary::send_eof(). EOF packet format is 
        protocol-independent.
      sql/sql_select.cc:
        Call fatal_error() directly in opt_sum_query.
        Call my_error() whenever we call thd->fatal_error().
      sql/sql_servers.cc:
        Use getters to access error information in THD.
      sql/sql_show.cc:
        Use getters to access error information in THD.
        
        Add comments.
        
        Call my_error() whenever we call fatal_error().
      sql/sql_table.cc:
        Replace hacks with no_send_ok with the interface of the diagnostics area.
        
        Clear the error if ENOENT error in ha_delete_table().
      sql/sql_update.cc:
        Introduce multi_update::abort(), which is the proper way to abort a
        multi-update. This fixes the merge conflict between this patch and
        the patch for Bug 29136.
      sql/table.cc:
        Use a getter to access error information in THD.
      sql/tztime.cc:
        Use a getter to access error information in THD.
      2a0d2fef
  27. 07 Dec, 2007 2 commits
    • unknown's avatar
      Make tests more robust (clean up better after grant.test) · 7d3a61e1
      unknown authored
      mysql-test/r/grant.result:
        Update test results to .test changes
      mysql-test/t/grant.test:
        Drop users when done with them, to avoid skewing results of later tests.
        
        For example, running some test which examines the cardinality of the
        mysql.user table would fail if run right after this test, due to the
        extra users.
      7d3a61e1
    • unknown's avatar
      Move the test case for bug #20901 from create.test to grant.test, so · 20bbe71d
      unknown authored
      testing embedded server works correctly.
      
      
      mysql-test/r/create.result:
        Move one test from create.test to grant.test, because it actually tests
        privileges (and thus doesn't work with embedded server).
      mysql-test/r/grant.result:
        Move one test from create.test to grant.test, because it actually tests
        privileges (and thus doesn't work with embedded server).
      mysql-test/t/create.test:
        Move one test from create.test to grant.test, because it actually tests
        privileges (and thus doesn't work with embedded server).
      mysql-test/t/grant.test:
        Move one test from create.test to grant.test, because it actually tests
        privileges (and thus doesn't work with embedded server).
      20bbe71d
  28. 28 Nov, 2007 1 commit
  29. 26 Nov, 2007 1 commit
    • unknown's avatar
      Bug#16470 crash on grant if old grant tables · 1ddb4722
      unknown authored
      Loading 4.1 into 5.0 or 5.1 failed silently because procs_priv table missing.
      This caused the server to crash on any attempt to store new grants because
      of uninitialized structures.
      
      This patch breaks up the grant loading function into two phases to allow
      for procs_priv table to fail with an warning instead of crashing the server.
      
      
      mysql-test/r/grant.result:
        Test case
      mysql-test/t/grant.test:
        Test case making sure that FLUSH PRIVILEGES doesn't crash the server if
        procs_priv is removed.
      sql/sql_acl.cc:
        - Refactored grant_reload into two phases: 1. open and lock tables_priv and 
          columns_priv tables, read the data, close tables. 2. open and lock
          procs_priv, read data, close table. Since the tables are independant of
          each other there will be no race conditions and it will be possible to
          handle situations where the procs_priv table isn't present.
        - Refactored the helper function grant_load into new grant_load (without
          procs_priv table) and grant_load_procs_priv.
      sql/sql_parse.cc:
        - Changed comment style to doxygen style.
      1ddb4722
  30. 13 Nov, 2007 1 commit
    • unknown's avatar
      Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS · b1b1d627
      unknown authored
      command and reported to a client.
      
      The fact that a timestamp field will be set to NO on UPDATE wasn't shown 
      by the SHOW COMMAND and reported to a client through connectors. This led to
      problems in the ODBC connector and might lead to a user confusion.
      
      A new filed flag called ON_UPDATE_NOW_FLAG is added. 
      Constructors of the Field_timestamp set it when a field should be set to NOW
      on UPDATE.
      
      The get_schema_column_record function now reports whether a timestamp field
      will be set to NOW on UPDATE.
      
      
      mysql-test/t/information_schema.test:
        A test case adjusted after fixing the bug#30081.
      mysql-test/r/type_timestamp.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/type_ranges.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/show_check.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/ps_5merge.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/ps_4heap.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/ps_3innodb.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/ps_2myisam.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/metadata.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/log_tables.result:
        Adjusted a test case after fixing bug#30081.
      mysql-test/r/information_schema.result:
        A test case adjusted after fixing the bug#30081.
      mysql-test/r/grant.result:
        Adjusted a test case after fixing bug#30081.
      tests/mysql_client_test.c:
        A test case adjusted after fixing the bug#30081.
      sql/sql_show.cc:
        Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS
        command and reported to a client.
        The get_schema_column_record function now reports whether a timestamp field
        will be set to NOW on UPDATE.
      sql/field.cc:
        Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS
        command and reported to a client.
        Constructors of the Field_timestamp set the ON_UPDATE_NOW_FLAG on a field when
        it should be set to NOW on UPDATE.
      include/mysql_com.h:
        Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS
        command and reported to a client.
        A new filed flag called ON_UPDATE_NOW_FLAG  is added.
      client/mysql.cc:
        Bug#30081: "ON UPDATE CURRENT_TIMESTAMP" wasn't shown by the SHOW FIELDS
        command and reported to a client.
        The fieldflag2str function is adjusted to print the ON_UPDATE_NOW_FLAG.
      b1b1d627
  31. 23 Oct, 2007 1 commit
    • unknown's avatar
      Bug #20901: CREATE privilege is enough to insert into a table · f9d068bc
      unknown authored
      CREATE TABLE IF NOT EXISTS ... SELECT let you insert into an existing
      table as long as you had the CREATE privilege.  CREATE ... SELECT
      variants now always require INSERT privilege on target table.
      
      
      mysql-test/r/create.result:
        Show that CREATE...SELECT requires INSERT privilege on target table.
      mysql-test/r/grant.result:
        Sort output for a defined state.
      mysql-test/t/create.test:
        Show that CREATE...SELECT requires INSERT privilege on target table.
      mysql-test/t/grant.test:
        Sort output for a defined state.
      sql/sql_parse.cc:
        Require INSERT privilege on target table for CREATE ... SELECT.
      f9d068bc
  32. 20 Sep, 2007 3 commits
    • unknown's avatar
      Bug#19828: Case sensitivity in hostname leads to inconsistent behavior · eeeeec8e
      unknown authored
      clean up SHOW GRANTS so it will show host-names with case as entered.
      make REVOKE and friends case-sensitive to make things more intuitive.
      Patch by Martin Friebe.
      
      
      mysql-test/r/grant.result:
        Bug#19828: Case sensitivity in hostname leads to inconsistent behavior
        
        clean up after test so random order of tests is possible
      mysql-test/r/grant3.result:
        Bug#19828: Case sensitivity in hostname leads to inconsistent behavior
        
        Show that REVOKE, SHOW GRANTS etc. are now consistently case-sensitive.
      mysql-test/t/grant.test:
        Bug#19828: Case sensitivity in hostname leads to inconsistent behavior
        
        clean up after test so random order of tests is possible
      mysql-test/t/grant3.test:
        Bug#19828: Case sensitivity in hostname leads to inconsistent behavior
        
        Show that REVOKE, SHOW GRANTS etc. are now consistently case-sensitive.
      eeeeec8e
    • unknown's avatar
      result fix · ad57f912
      unknown authored
      ad57f912
    • unknown's avatar
      Bug#27747 database metadata doesn't return sufficient column default info · fac190a2
      unknown authored
      added get_field_default_value() function which obtains default value from the field
      (used in store_create_info() & get_schema_column_record() functions)
      
      
      mysql-test/r/alter_table.result:
        result fix
      mysql-test/r/create.result:
        result fix
      mysql-test/r/ctype_collate.result:
        result fix
      mysql-test/r/ctype_recoding.result:
        result fix
      mysql-test/r/default.result:
        result fix
      mysql-test/r/gis.result:
        result fix
      mysql-test/r/grant.result:
        result fix
      mysql-test/r/information_schema.result:
        result fix
      mysql-test/r/key.result:
        result fix
      mysql-test/r/mysql.result:
        result fix
      mysql-test/r/ps_1general.result:
        result fix
      mysql-test/r/show_check.result:
        result fix
      mysql-test/r/sp.result:
        result fix
      mysql-test/r/type_enum.result:
        result fix
      mysql-test/r/type_ranges.result:
        result fix
      mysql-test/t/information_schema.test:
        test case
      fac190a2
  33. 28 Jun, 2007 1 commit
    • unknown's avatar
      Patch for the following bugs: · 405f82d3
      unknown authored
        - BUG#11986: Stored routines and triggers can fail if the code
          has a non-ascii symbol
        - BUG#16291: mysqldump corrupts string-constants with non-ascii-chars
        - BUG#19443: INFORMATION_SCHEMA does not support charsets properly
        - BUG#21249: Character set of SP-var can be ignored
        - BUG#25212: Character set of string constant is ignored (stored routines)
        - BUG#25221: Character set of string constant is ignored (triggers)
      
      There were a few general problems that caused these bugs:
      1. Character set information of the original (definition) query for views,
         triggers, stored routines and events was lost.
      2. mysqldump output query in client character set, which can be
         inappropriate to encode definition-query.
      3. INFORMATION_SCHEMA used strings with mixed encodings to display object
         definition;
      
      1. No query-definition-character set.
      
      In order to compile query into execution code, some extra data (such as
      environment variables or the database character set) is used. The problem
      here was that this context was not preserved. So, on the next load it can
      differ from the original one, thus the result will be different.
      
      The context contains the following data:
        - client character set;
        - connection collation (character set and collation);
        - collation of the owner database;
      
      The fix is to store this context and use it each time we parse (compile)
      and execute the object (stored routine, trigger, ...).
      
      2. Wrong mysqldump-output.
      
      The original query can contain several encodings (by means of character set
      introducers). The problem here was that we tried to convert original query
      to the mysqldump-client character set.
      
      Moreover, we stored queries in different character sets for different
      objects (views, for one, used UTF8, triggers used original character set).
      
      The solution is
        - to store definition queries in the original character set;
        - to change SHOW CREATE statement to output definition query in the
          binary character set (i.e. without any conversion);
        - introduce SHOW CREATE TRIGGER statement;
        - to dump special statements to switch the context to the original one
          before dumping and restore it afterwards.
      
      Note, in order to preserve the database collation at the creation time,
      additional ALTER DATABASE might be used (to temporary switch the database
      collation back to the original value). In this case, ALTER DATABASE
      privilege will be required. This is a backward-incompatible change.
      
      3. INFORMATION_SCHEMA showed non-UTF8 strings
      
      The fix is to generate UTF8-query during the parsing, store it in the object
      and show it in the INFORMATION_SCHEMA.
      
      Basically, the idea is to create a copy of the original query convert it to
      UTF8. Character set introducers are removed and all text literals are
      converted to UTF8.
      
      This UTF8 query is intended to provide user-readable output. It must not be
      used to recreate the object.  Specialized SHOW CREATE statements should be
      used for this.
      
      The reason for this limitation is the following: the original query can
      contain symbols from several character sets (by means of character set
      introducers).
      
      Example:
      
        - original query:
          CREATE VIEW v1 AS SELECT _cp1251 'Hello' AS c1;
      
        - UTF8 query (for INFORMATION_SCHEMA):
          CREATE VIEW v1 AS SELECT 'Hello' AS c1;
      
      
      client/mysqldump.c:
        Set original character set and collation before dumping definition query.
      include/my_sys.h:
        Move out-parameter to the end of list.
      mysql-test/lib/mtr_report.pl:
        Ignore server-warnings during the test case.
      mysql-test/r/create.result:
        Update result file.
      mysql-test/r/ctype_cp932_binlog_stm.result:
        Update result file.
      mysql-test/r/events.result:
        Update result file.
      mysql-test/r/events_bugs.result:
        Update result file.
      mysql-test/r/events_grant.result:
        Update result file.
      mysql-test/r/func_in.result:
        Update result file.
      mysql-test/r/gis.result:
        Update result file.
      mysql-test/r/grant.result:
        Update result file.
      mysql-test/r/information_schema.result:
        Update result file.
      mysql-test/r/information_schema_db.result:
        Update result file.
      mysql-test/r/lowercase_view.result:
        Update result file.
      mysql-test/r/mysqldump.result:
        Update result file.
      mysql-test/r/ndb_sp.result:
        Update result file.
      mysql-test/r/ps.result:
        Update result file.
      mysql-test/r/rpl_replicate_do.result:
        Update result file.
      mysql-test/r/rpl_sp.result:
        Update result file.
      mysql-test/r/rpl_trigger.result:
        Update result file.
      mysql-test/r/rpl_view.result:
        Update result file.
      mysql-test/r/show_check.result:
        Update result file.
      mysql-test/r/skip_grants.result:
        Update result file.
      mysql-test/r/sp-destruct.result:
        Update result file.
      mysql-test/r/sp-error.result:
        Update result file.
      mysql-test/r/sp-security.result:
        Update result file.
      mysql-test/r/sp.result:
        Update result file.
      mysql-test/r/sql_mode.result:
        Update result file.
      mysql-test/r/system_mysql_db.result:
        Update result file.
      mysql-test/r/temp_table.result:
        Update result file.
      mysql-test/r/trigger-compat.result:
        Update result file.
      mysql-test/r/trigger-grant.result:
        Update result file.
      mysql-test/r/trigger.result:
        Update result file.
      mysql-test/r/view.result:
        Update result file.
      mysql-test/r/view_grant.result:
        Update result file.
      mysql-test/t/events.test:
        Update test case (new columns added).
      mysql-test/t/information_schema.test:
        Update test case (new columns added).
      mysql-test/t/show_check.test:
        Test case for SHOW CREATE TRIGGER in prepared statements and
        stored routines.
      mysql-test/t/sp-destruct.test:
        Update test case (new columns added).
      mysql-test/t/sp.test:
        Update test case (new columns added).
      mysql-test/t/view.test:
        Update test.
      mysys/charset.c:
        Move out-parameter to the end of list.
      scripts/mysql_system_tables.sql:
        Add new columns to mysql.proc and mysql.event.
      scripts/mysql_system_tables_fix.sql:
        Add new columns to mysql.proc and mysql.event.
      sql/event_data_objects.cc:
        Support new attributes for events.
      sql/event_data_objects.h:
        Support new attributes for events.
      sql/event_db_repository.cc:
        Support new attributes for events.
      sql/event_db_repository.h:
        Support new attributes for events.
      sql/events.cc:
        Add new columns to SHOW CREATE event resultset.
      sql/mysql_priv.h:
        1. Introduce Object_creation_ctx;
        2. Introduce SHOW CREATE TRIGGER;
        3. Introduce auxilary functions.
      sql/sp.cc:
        Add support for new store routines attributes.
      sql/sp_head.cc:
        Add support for new store routines attributes.
      sql/sp_head.h:
        Add support for new store routines attributes.
      sql/sql_lex.cc:
        Generate UTF8-body on parsing/lexing.
      sql/sql_lex.h:
        1. Generate UTF8-body on parsing/lexing.
        2. Introduce SHOW CREATE TRIGGER.
      sql/sql_parse.cc:
        Introduce SHOW CREATE TRIGGER.
      sql/sql_partition.cc:
        Update parse_sql().
      sql/sql_prepare.cc:
        Update parse_sql().
      sql/sql_show.cc:
        Support new attributes for views
      sql/sql_trigger.cc:
        Support new attributes for views
      sql/sql_trigger.h:
        Support new attributes for views
      sql/sql_view.cc:
        Support new attributes for views
      sql/sql_yacc.yy:
        1. Add SHOW CREATE TRIGGER statement.
        2. Generate UTF8-body for views, stored routines, triggers and events.
      sql/table.cc:
        Introduce Object_creation_ctx.
      sql/table.h:
        Introduce Object_creation_ctx.
      sql/share/errmsg.txt:
        Add new errors.
      mysql-test/include/ddl_i18n.check_events.inc:
        Aux file for test suite.
      mysql-test/include/ddl_i18n.check_sp.inc:
        Aux file for test suite.
      mysql-test/include/ddl_i18n.check_triggers.inc:
        Aux file for test suite.
      mysql-test/include/ddl_i18n.check_views.inc:
        Aux file for test suite.
      mysql-test/include/have_cp1251.inc:
        Aux file for test suite.
      mysql-test/include/have_cp866.inc:
        Aux file for test suite.
      mysql-test/include/have_koi8r.inc:
        Aux file for test suite.
      mysql-test/include/have_utf8.inc:
        Aux file for test suite.
      mysql-test/r/ddl_i18n_koi8r.result:
        Result file.
      mysql-test/r/ddl_i18n_utf8.result:
        Result file.
      mysql-test/r/have_cp1251.require:
        Aux file for test suite.
      mysql-test/r/have_cp866.require:
        Aux file for test suite.
      mysql-test/r/have_koi8r.require:
        Aux file for test suite.
      mysql-test/r/have_utf8.require:
        Aux file for test suite.
      mysql-test/t/ddl_i18n_koi8r.test:
        Complete koi8r test case for the CS patch.
      mysql-test/t/ddl_i18n_utf8.test:
        Complete utf8 test case for the CS patch.
      405f82d3
  34. 12 May, 2007 1 commit
  35. 11 May, 2007 1 commit
    • unknown's avatar
      grant.result, grant.test: · f0ddabc5
      unknown authored
        Corrected test case for the bug#27878.
      
      
      mysql-test/t/grant.test:
        Corrected test case for the bug#27878.
      mysql-test/r/grant.result:
        Corrected test case for the bug#27878.
      f0ddabc5