1. 11 Sep, 2008 3 commits
    • Tatiana A. Nurnberg's avatar
      Bug#35981: ALTER EVENT causes the server to change the PRESERVE option. · d5fd1736
      Tatiana A. Nurnberg authored
      If [NOT] PRESERVE was not given, parser always defaulted to NOT
      PRESERVE, making it impossible for the "not given = no change"
      rule to work in ALTER EVENT. Leaving out the PRESERVE-clause
      defaults to NOT PRESERVE on CREATE now, and to "no change" in
      ALTER.
      
      mysql-test/r/events_2.result:
        show that giving no PRESERVE-clause to ALTER EVENT
        results in no change. show that giving no PRESERVE-clause
        to CREATE EVENT defaults to NOT PRESERVE as per the docs.
        Show specifically that this is also handled correctly when
        trying to ALTER EVENTs into the past.
      mysql-test/t/events_2.test:
        show that giving no PRESERVE-clause to ALTER EVENT
        results in no change. show that giving no PRESERVE-clause
        to CREATE EVENT defaults to NOT PRESERVE as per the docs.
        Show specifically that this is also handled correctly when
        trying to ALTER EVENTs into the past.
      sql/event_db_repository.cc:
        If ALTER EVENT was given no PRESERVE-clause (meaning "no change"),
        we don't know the previous PRESERVE-setting by the time we check
        the parse-data. If ALTER EVENT was given dates that are in the past,
        we don't know how to react, lacking the PRESERVE-setting. Heal this
        by running the check later when we have actually read the previous
        EVENT-data.
      sql/event_parse_data.cc:
        Change default for ON COMPLETION to indicate, "not specified."
        Also defer throwing errors when ALTER EVENT is given dates in
        the past but not PRESERVE-clause until we know the previous
        PRESERVE-value.
      sql/event_parse_data.h:
        Add third state for ON COMPLETION [NOT] PRESERVE (preserve,
        don't, not specified).
        
        Make check_dates() public so we can defer this check until
        deeper in the callstack where we have all the required data.
      sql/sql_yacc.yy:
        If CREATE EVENT is not given ON COMPLETION [NOT] PRESERVE,
        we default to NOT, as per the docs.
      d5fd1736
    • Tatiana A. Nurnberg's avatar
      Bug#31434 mysqldump dumps view as table · 45e385fe
      Tatiana A. Nurnberg authored
      mysqldump creates stand-in tables before dumping the actual view.
      Those tables were of the default type; if the view had more columns
      than that (a pathological case, arguably), loading the dump would
      fail. We now make the temporary stand-ins MyISAM tables to prevent
      this.
      
      client/mysqldump.c:
        When creating a stand-in table, specify its type to
        avoid defaulting to a type with a column-number limit
        (like Inno). The type is always MyISAM as we know that
        to be available.
      mysql-test/r/mysqldump-max.result:
        add test results for 31434
      mysql-test/r/mysqldump.result:
        mysqldump sets engine-type (MyISAM) for stand-in tables
        for views now. Update test results.
      mysql-test/t/mysqldump-max.test:
        Show that mysqldump's stand-in tables for views explicitly
        set engine-type to MyISAM to avoid falling back on an engine
        that might support fewer columns than the final view requires
        (here's lookin' at you, inno). Also show that this actually
        has the desired effect by dumping and reloading a view that
        has more columns than inno supports.
      45e385fe
    • Tatiana A. Nurnberg's avatar
      Bug#31434 mysqldump dumps view as table · 18703726
      Tatiana A. Nurnberg authored
      mysqldump creates stand-in tables before dumping the actual view.
      Those tables were of the default type; if the view had more columns
      than that (a pathological case, arguably), loading the dump would
      fail. We now make the temporary stand-ins MyISAM tables to prevent
      this.
      
      client/mysqldump.c:
        When creating a stand-in table, specify its type to
        avoid defaulting to a type with a column-number limit
        (like Inno). The type is always MyISAM as we know that
        to be available.
      mysql-test/r/mysqldump.result:
        mysqldump sets engine-type (MyISAM) for stand-in tables
        for views now. Update test results.
      18703726
  2. 10 Sep, 2008 1 commit
  3. 09 Sep, 2008 7 commits
    • Ramil Kalimullin's avatar
      Merge · 3363e185
      Ramil Kalimullin authored
      3363e185
    • Ramil Kalimullin's avatar
      Merge · c29da10e
      Ramil Kalimullin authored
      c29da10e
    • Martin Hansson's avatar
      Bug#35600: Auto merged. · da8fecaa
      Martin Hansson authored
      da8fecaa
    • Ramil Kalimullin's avatar
      Fix for bug#37526: asymertic operator <=> in trigger · 835f3528
      Ramil Kalimullin authored
      Problem: <=> operator may return wrong results 
      comparing NULL and a DATE/DATETIME/TIME value.
      
      Fix: properly check NULLs.
      
      
      mysql-test/r/type_datetime.result:
        Fix for bug#37526: asymertic operator <=> in trigger
          - test result.
      mysql-test/t/type_datetime.test:
        Fix for bug#37526: asymertic operator <=> in trigger
          - test case.
      sql/item_cmpfunc.cc:
        Fix for bug#37526: asymertic operator <=> in trigger
          - if is_nulls_eq is TRUE Arg_comparator::compare_datetime() 
        should return 1 only if both arguments are NULL.
      835f3528
    • Mats Kindahl's avatar
      Merging with 5.1-5.1.29-rc · 4fa5cd08
      Mats Kindahl authored
      4fa5cd08
    • Martin Hansson's avatar
      Bug#35600: Security breach via view, I_S table and prepared · 2f9486e4
      Martin Hansson authored
      statement/stored procedure
      
      View privileges are properly checked after the fix for bug no 
      36086, so the method TABLE_LIST::get_db_name() must be used 
      instead of field TABLE_LIST::db, as this only works for tables.
      Bug appears when accessing views in prepared statements.
      
      mysql-test/r/view_grant.result:
        Bug#35600: Extended existing test case.
      mysql-test/t/view_grant.test:
        Bug#35600: Extended existing test result.
      sql/sql_parse.cc:
        Bug#35600: Using method to retrieve database name instead of
        field.
      2f9486e4
    • Mats Kindahl's avatar
      Bug #39106: · 0dcca07f
      Mats Kindahl authored
      SUPER is not required to change binlog format for session
      
      A user without SUPER privileges can change the value of the
      session variable BINLOG_FORMAT, causing problems for a DBA.
      
      This changeset requires a user to have SUPER privileges to
      change the value of the session variable BINLOG_FORMAT, and
      not only the global variable BINLOG_FORMAT.
      
      
      mysql-test/suite/binlog/t/binlog_grant.test:
        Adding test to test grants needed for SQL_LOG_BIN and BINLOG_FORMAT.
      sql/set_var.cc:
        Adding code to check that user has SUPER permission
        needed to change the value of BINLOG_FORMAT.
      sql/set_var.h:
        Adding function sys_var_thd_binlog_format::check()
      0dcca07f
  4. 08 Sep, 2008 4 commits
  5. 05 Sep, 2008 8 commits
    • Georgi Kodinov's avatar
      Bug #38701: Crash in String::append when inserting duplicate empty strings an uft8 · 4f7be648
      Georgi Kodinov authored
      SET col
                        
      When reporting a duplicate key error the server was making incorrect assumptions 
      on what the state of the value string to include in the error is.
      
      Fixed by accessing the data in this string in a "safe" way (without relying on it
      having a terminating 0).
            
      Detected by code analysis and fixed a similar problem in reporting the foreign key
      duplicate errors.
      
      mysql-test/r/type_set.result:
        Bug #38701: test case
      mysql-test/t/type_set.test:
        Bug #38701: test case
      sql/handler.cc:
        Bug #38701: don't rely on the presence of a terminating 0 in the string
      4f7be648
    • Narayanan V's avatar
      updating server version number · 7903c1d1
      Narayanan V authored
      configure.in:
        change server version number to 5.1.29
      7903c1d1
    • Narayanan V's avatar
      WL#4380: abi_check rule (using gcc -E) for storage engine API · 850abe6b
      Narayanan V authored
      Added a rule that uses gcc to generate preprocessor
      output (gcc -E) that can be compared to an already
      generated output using the diff utility.
      
      icheck has been removed and replaced by gcc -E
      because icheck does not support C++.
      
      Makefile.am:
        Added a rule for checking that the abi/api
        has not changed.
        
        The following rules are followed in the rule in makefile.am
        
        1) Generate preprocessor output for the
           files that need to be tested for abi/ 
           api changes. use -nostdinc to prevent
           generation of preprocessor output for
           system headers. This results in
           messages in stderr saying that these
           headers were not found. Redirect the
           stderr output to /dev/null to prevent
           seeing these messages.
        2) sed the output to 
           2.1) remove blank lines and lines that
                begin with "# "
           2.2) When gcc -E is run on the Mac OS 
                and solaris sparc platforms it
                introduces a line of output that
                shows up as a difference between
                the .pp and .out files. Remove
                these OS specific preprocessor
                text inserted by the preprocessor.
        3) diff the generated file and the canons
           (.pp files already in the repository).
        4) delete the .out file that is generated.
           If the diff fails, the generated file 
           is not removed. This will be useful
           for analysis of ABI differences (e.g.
           using a visual diff tool).
        
        A ABI change that causes a build to fail will always be accompanied by new canons (.out files). The .out files that are not removed will be replaced as the new .pp files.
        
        e.g. If include/mysql/plugin.h has an ABI
             change then this rule would leave a
             <build directory>/abi_check.out file.
        
        A developer with a justified API change will then do a 
        
        mv <build directory>/abi_check.out include/mysql/plugin.pp 
        
        to replace the old canons with the new ones.
      configure.in:
        1) Removed the part of the file that was
           icheck related
        2) Added an entry for the configure
           variable DIFF
        3) Ensured that the abi_check rule is run
           only if gcc is available
      include/Makefile.am:
        1) Removed the icheck related entries
      include/mysql.h.pp:
        The pre-processor output cannon file for
        include/mysql.h
      include/mysql/plugin.h.pp:
        The pre-processor output cannon file
        for include/mysql/plugin.h
      include/mysql_h.ic:
        Removed the cannon file related to icheck.
      sql/mysql_priv.h.pp:
        The pre-processor output cannon file for
        sql/mysql_priv.h
      850abe6b
    • Evgeny Potemkin's avatar
      Bug#37908: Skipped access right check caused server crash. · b3f4648e
      Evgeny Potemkin authored
            
      The check_table_access function initializes per-table grant info and performs
      access rights check. It wasn't called for SHOW STATUS statement thus left
      grants info uninitialized. In some cases this led to server crash. In other
      cases it allowed a user to check for presence/absence of arbitrary values in
      any tables.
            
      Now the check_table_access function is called prior to the statement
      processing.
      
      
      mysql-test/r/status.result:
        Added a test case for the bug#37908.
      mysql-test/t/status.test:
        Added a test case for the bug#37908.
      sql/sql_parse.cc:
        Bug#37908: Skipped access right check caused server crash.
        Now the check_table_access function is called when the SHOW STATUS statement
        uses any table except information.STATUS.
      sql/sql_yacc.yy:
        Bug#37908: Skipped access right check caused server crash.
        For the SHOW PROCEDURE/FUNCTION STATUS the 'mysql.proc' table isn't added
        to the table list anymore as there is no need.
      b3f4648e
    • Ramil Kalimullin's avatar
      After-merge fix. · 94dc45b1
      Ramil Kalimullin authored
      94dc45b1
    • Ramil Kalimullin's avatar
      Merge · 06672cfb
      Ramil Kalimullin authored
      06672cfb
    • Ramil Kalimullin's avatar
      Fix for bug #39021: SELECT REGEXP BINARY NULL never returns · f024a8b6
      Ramil Kalimullin authored
      Problem: SELECT ... REGEXP BINARY NULL may lead to server crash/hang.
      
      Fix: properly handle NULL regular expressions.
      
      
      mysql-test/r/func_regexp.result:
        Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
          - test result.
      mysql-test/t/func_regexp.test:
        Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
          - test case.
      sql/item_cmpfunc.cc:
        Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
          - checking regular expressions' null_value
        we tested it without a val_xxx() call before, which is wrong.
        Now Item_func_regex::regcomp() returns -1 in the case
        and allows to handle NULL expessions properly.
      sql/item_cmpfunc.h:
        Fix for bug #39021: SELECT REGEXP BINARY NULL never returns
          - checking regular expressions' null_value
        we tested it without a val_xxx() call before, which is wrong.
        Now Item_func_regex::regcomp() returns -1 in the case
        and allows to handle NULL expessions properly.
      f024a8b6
    • Ramil Kalimullin's avatar
      Merge · bb92371b
      Ramil Kalimullin authored
      bb92371b
  6. 04 Sep, 2008 1 commit
  7. 03 Sep, 2008 9 commits
    • Mats Kindahl's avatar
      BUG#32709: Assertion failed: trx_data->empty(), file log.cc · ac2e3a23
      Mats Kindahl authored
      Incremental fixes: updating a comment and fixing a result file.
      
      sql/sql_class.h:
        Changing comment.
      ac2e3a23
    • Mats Kindahl's avatar
      Bug #32709: Assertion failed: trx_data->empty(), file log.cc · 874c3a25
      Mats Kindahl authored
      The assertion indicates that some data was left in the transaction
      cache when the server was shut down, which means that a previous
      statement did not commit or rollback correctly.
      
      What happened was that a bug in the rollback of a transactional
      table caused the transaction cache to be emptied, but not reset.
      The error can be triggered by having a failing UPDATE or INSERT,
      on a transactional table, causing an implicit rollback.
      
      Fixed by always flushing the pending event to reset the state
      properly.
      
      
      mysql-test/extra/rpl_tests/rpl_row_basic.test:
        Testing that a failed update (that writes some rows to the
        transaction cache) does not cause the transaction cache to
        hold on to the data or forget to reset the transaction cache.
      sql/log.cc:
        Added call to remove pending event when the transaction cache
        is emptied instead of written to binary log. The call will also
        clear the outstanding table map count so that the cache is not
        left it in a state of "empty but not reset".
        
        Added function MYSQL_BIN_LOG::remove_pending_rows_event().
      sql/log.h:
        Added function MYSQL_BIN_LOG::remove_pending_rows_event().
      sql/sql_class.cc:
        Adding function THD::binlog_remove_pending_rows_event().
      sql/sql_class.h:
        Adding function THD::binlog_remove_pending_rows_event().
      874c3a25
    • Martin Hansson's avatar
      Bug#36086: SELECT * from views don't check column grants · d88ceff0
      Martin Hansson authored
      This patch also fixes bugs 36963 and 35600.
                            
      - In many places a view was confused with an anonymous derived
        table, i.e. access checking was skipped. Fixed by introducing a
        predicate to tell the difference between named and anonymous
        derived tables.
                            
      - When inserting fields for "SELECT * ", there was no 
        distinction between base tables and views, where one should be
        made. View privileges are checked elsewhere.
      
      mysql-test/include/grant_cache.inc:
        Bug#36086: Changed test case.
      mysql-test/r/grant2.result:
        Bug#36086: Changed test result.
      mysql-test/r/grant_cache_no_prot.result:
        Bug#36086: Changed test result.
      mysql-test/r/grant_cache_ps_prot.result:
        Bug#36086: Changed test result.
      mysql-test/r/view_grant.result:
        Bug#36086: Test result.
      mysql-test/t/grant2.test:
        Bug#36086: Changed test case.
      mysql-test/t/view_grant.test:
        Bug#36086: Test case.
      sql/item.cc:
        Bug#36086: Replaced conditional with new methods.
      sql/sql_acl.cc:
        Bug no 35600: 
        In mysql_table_grant:
          Replaced conditional with the new accessor method.
        
        In check_grant:
         - Changed the requirement table->derived != null to 
           checking all anonymous derived tables.
         - Use of the accessor methods for getting object and database 
           names.
            
        Bug#36086: In check_grant_all_columns:
          - Updated comment. This function is now called for views
            as well.
          - The error message should not disclose any column names 
            unless the user has privilege to see all column names.
          - Changed names of Field_iterator_table_ref methods.
      sql/sql_base.cc:
        Bug no 36963: In insert_fields()
          - Commented.
          - We should call check_grant_all_columns() for views in  
            this case.        
          - Changed names of Field_iterator_table_ref methods.
          - We should not disclose column names in the error message
            when the user has no approprate privilege.
      sql/sql_cache.cc:
        Bug#36086: Replaced test with new predicate method.
      sql/sql_derived.cc:
        Bug#36086: commenting only. Updated and doxygenated
        comment for mysql_derived_prepare().
      sql/sql_parse.cc:
        Bug no 35600: 
        - In check_single_table_access:
          Due to the bug, check_grant would raise an error for a
          SHOW CREATE TABLE command for a TEMPTABLE view. It should in
          fact not be be invoked in this case. This table privilege
          is checked already.
          There is a test case for this in information_schema_db.test.
            
        - In check_access: replaced table->derived
      sql/table.cc:
        Bug#36086: 
        
        - In TABLE_LIST::set_underlying_merge(): 
          Commenting only. Doxygenated, corrected spelling,
          added.
        
        - Renamed table_name() and db_name() methods of 
          Field_iterator_table_ref in order to be consistent
          with new methods in TABLE_LIST.
      sql/table.h:
        Bug#36086: 
          - Commented GRANT_INFO.
          - Added a predicate is_anonymous_derived_table() to    
            TABLE_LIST.
          - Added get_table_name() and get_db_name() to   
            TABLE_LIST in order to hide the disparate   
            representation of these properties.
      d88ceff0
    • Andrei Elkin's avatar
      merging with 5.1.29. · 1c46abaa
      Andrei Elkin authored
      1c46abaa
    • Ramil Kalimullin's avatar
      Fix for bug#38821: Assert table->auto_increment_field_not_null failed · 644471d5
      Ramil Kalimullin authored
      in open_table()
      
      Problem: repeating "CREATE... ( AUTOINCREMENT) ... SELECT" may lead to
      an assertion failure.
      
      Fix: reset table->auto_increment_field_not_null after each record 
      writing.
      
      
      mysql-test/r/create.result:
        Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
        in open_table()
          - test result.
      mysql-test/t/create.test:
        Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
        in open_table()
          - test case.
      sql/sql_insert.cc:
        Fix for bug#38821: Assert table->auto_increment_field_not_null failed 
        in open_table()
          - reset table->auto_increment_field_not_null after writing a record
        for "{CREATE, INSERT}..SELECT".
      644471d5
    • Andrei Elkin's avatar
      Bug#36099 replicate-do-db affects replaying RBR events with mysqlbinlog · 9166c5f1
      Andrei Elkin authored
            
      The replication filtering rules were inappropiately applied when
      executing BINLOG pseudo-query.  The rules are supposed to be active
      only at times when the slave's sql thread executes an event.
                  
      Fixed with correcting a condition to call replication rules only if
      the slave sql thread executes the event.
      
      mysql-test/suite/rpl/r/rpl_binlog_query_filter_rules.result:
        new result file
      mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules-master.opt:
        a filtering option that would refuse to replicate a row event of the main test on
        slave
      mysql-test/suite/rpl/t/rpl_binlog_query_filter_rules.test:
        a regression test for the bug
      sql/log_event.cc:
        avoiding to call the filtering rules if the execution thread is not a slave.
      9166c5f1
    • Gleb Shchepa's avatar
      merge 5.0 --> 5.1 · 95f3fd3d
      Gleb Shchepa authored
      95f3fd3d
    • Gleb Shchepa's avatar
      merge with local tree · 25624b0a
      Gleb Shchepa authored
      25624b0a
    • Gleb Shchepa's avatar
      Bug #39002: The server crashes on the query: · 0e9cba18
      Gleb Shchepa authored
        INSERT .. SELECT .. ON DUPLICATE KEY UPDATE col=DEFAULT
      
      In order to get correct values from update fields that
      belongs to the SELECT part in the INSERT .. SELECT .. ON
      DUPLICATE KEY UPDATE statement, the server adds referenced
      fields to the select list. Part of the code that does this
      transformation is shared between implementations of
      the DEFAULT(col) function and the DEFAULT keyword (in
      the col=DEFAULT expression), and an implementation of
      the DEFAULT keyword is incomplete.
      
      
      mysql-test/r/default.result:
        Added test case for bug #39002.
      mysql-test/t/default.test:
        Added test case for bug #39002.
      sql/item.cc:
        The Item_default_value::transform() function has been
        modified to take into account the fact that the DEFAULT
        keyword has no arguments unlike the DEFAULT(col) function
        that always has an argument.
      0e9cba18
  8. 28 Aug, 2008 4 commits
  9. 27 Aug, 2008 3 commits
    • Gleb Shchepa's avatar
      Bug #37799: SELECT with a BIT column in WHERE clause · a591f2cb
      Gleb Shchepa authored
                  returns unexpected result
      
      If:
        1. a table has a not nullable BIT column c1 with a length
           shorter than 8 bits and some additional not nullable
           columns c2 etc, and
        2. the WHERE clause is like: (c1 = constant) AND c2 ...,
      the SELECT query returns unexpected result set.
      
      
      The server stores BIT columns in a tricky way to save disk
      space: if column's bit length is not divisible by 8, the
      server places reminder bits among the null bits at the start
      of a record. The rest bytes are stored in the record itself,
      and Field::ptr points to these rest bytes.
      
      However if a bit length of the whole column is less than 8,
      there are no remaining bytes, and there is nothing to store in
      the record at its regular place. In this case Field::ptr points
      to bytes actually occupied by the next column in a record.
      If both columns (BIT and the next column) are NOT NULL,
      the Field::eq function incorrectly deduces that this is the
      same column, so query transformation/equal item elimination
      code (see build_equal_items_for_cond) may mix these columns
      and damage conditions containing references to them.
      
      
      mysql-test/r/type_bit.result:
        Added test case for bug #37799.
      mysql-test/t/type_bit.test:
        Added test case for bug #37799.
      sql/field.h:
        1. The Field::eq function has been modified to take types of
        comparing columns into account to distinguish between BIT and
        not BIT columns referencing the same bytes in a record.
        
        2. Unnecessary type comparison has been removed from the
        Field_bit::eq function (moved to Field::eq).
      a591f2cb
    • Mats Kindahl's avatar
      Merging 5.1 into 5.1-rpl-merge · e72e5cc9
      Mats Kindahl authored
      e72e5cc9
    • Georgi Kodinov's avatar
      merged 5.1-bugteam into B37548 tree · 6e948385
      Georgi Kodinov authored
      6e948385