1. 07 Aug, 2009 1 commit
    • Martin Hansson's avatar
      Bug#46454: MySQL wrong index optimisation leads to incorrect result & crashes · 1164f8a6
      Martin Hansson authored
      Problem 1:
      When the 'Using index' optimization is used, the optimizer may still - after
      cost-based optimization - decide to use another index in order to avoid using
      a temporary table. But when this happens, the flag to the storage engine to 
      read index only (not table) was still set. Fixed by resetting the flag in the 
      storage engine and TABLE structure in the above scenario, unless the new index
      allows for the same optimization.
      Problem 2:
      When a 'ref' access method was employed by cost-based optimizer, (when the column
      is non-NULLable), it was assumed that it needed no initialization if 'quick' access
      methods (since they are based on range scan). When ORDER BY optimization overrides 
      the decision, however, it expects to have this initialized and hence crashes. 
      Fixed in 5.1 (was fixed in 6.0 already) by initializing 'quick' even when there's 
      'ref' access. 
      
      mysql-test/r/order_by.result:
        Bug#46454: Test result.
      mysql-test/t/order_by.test:
        Bug#46454: Test case.
      sql/sql_select.cc:
        Bug#46454: 
        Problem 1 fixed in make_join_select()
        Problem 2 fixed in test_if_skip_sort_order()
      sql/table.h:
        Bug#46454: Added comment to field.
      1164f8a6
  2. 01 Aug, 2009 1 commit
  3. 31 Jul, 2009 11 commits
    • Jim Winstead's avatar
      Merge fix to test results · fb13ebb2
      Jim Winstead authored
      fb13ebb2
    • Jim Winstead's avatar
      6a8218ad
    • Davi Arnaut's avatar
      Test case clean up: Move test cases that depend on the CSV storage · be05eb4d
      Davi Arnaut authored
      engine to the partition_csv test. Also remove test case that was
      duplicated. Fix connection procedure with the embedded server.
      
      mysql-test/r/partition.result:
        Update test case result.
      mysql-test/r/partition_csv.result:
        Update test case result.
      mysql-test/t/partition.test:
        Move test cases to the partition_csv test.
      mysql-test/t/partition_csv.test:
        Move tests from partition.test and remove duplicate.
        Tweaky connection procedure to work with embedded.
      be05eb4d
    • Ignacio Galarza's avatar
      Auto-merge · c93db24b
      Ignacio Galarza authored
      c93db24b
    • Tatiana A. Nurnberg's avatar
      auto-merge · ef5f4a4e
      Tatiana A. Nurnberg authored
      ef5f4a4e
    • Ignacio Galarza's avatar
      Auto-merge · 2567f49e
      Ignacio Galarza authored
      2567f49e
    • Ignacio Galarza's avatar
      Bug#17270 - mysql client tool could not find ../share/charsets folder and fails. · 286e9e40
      Ignacio Galarza authored
      - Define and pass compile time path variables as pre-processor definitions to 
        mimic the makefile build.
      - Set new CMake version and policy requirements explicitly.
      - Changed DATADIR to MYSQL_DATADIR to avoid conflicting definition in 
        Platform SDK header ObjIdl.h which also defines DATADIR.
      286e9e40
    • Gleb Shchepa's avatar
      Bug# 30946: mysqldump silently ignores --default-character-set · 1b538291
      Gleb Shchepa authored
                  when used with --tab
      
      1) New syntax: added CHARACTER SET clause to the
        SELECT ... INTO OUTFILE (to complement the same clause in
        LOAD DATA INFILE).
        mysqldump is updated to use this in --tab mode.
      
      2) ESCAPED BY/ENCLOSED BY field parameters are documented as
         accepting CHAR argument, however SELECT .. INTO OUTFILE
         silently ignored rests of multisymbol arguments.
         For the symmetrical behavior with LOAD DATA INFILE the
         server has been modified to fail with the same error:
      
           ERROR 42000: Field separator argument is not what is
                        expected; check the manual
      
      3) Current LOAD DATA INFILE recognizes field/line separators
         "as is" without converting from client charset to data
         file charset. So, it is supposed, that input file of
         LOAD DATA INFILE consists of data in one charset and
         separators in other charset. For the compatibility with
         that [buggy] behaviour SELECT INTO OUTFILE implementation
         has been saved "as is" too, but the new warning message
         has been added:
      
           Non-ASCII separator arguments are not fully supported
      
         This message warns on field/line separators that contain
         non-ASCII symbols.
      
      
      client/mysqldump.c:
        mysqldump has been updated to call SELECT ... INTO OUTFILE
        statement with a charset from the --default-charset command
        line parameter.
      mysql-test/r/mysqldump.result:
        Added test case for bug #30946.
      mysql-test/r/outfile_loaddata.result:
        Added test case for bug #30946.
      mysql-test/t/mysqldump.test:
        Added test case for bug #30946.
      mysql-test/t/outfile_loaddata.test:
        Added test case for bug #30946.
      sql/field.cc:
        String conversion code has been moved from check_string_copy_error()
        to convert_to_printable() for reuse.
      sql/share/errmsg.txt:
        New WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED message has been added.
      sql/sql_class.cc:
        The select_export::prepare() method has been modified to:
        
          1) raise the ER_WRONG_FIELD_TERMINATORS error on multisymbol
             ENCLOSED BY/ESCAPED BY field arguments like LOAD DATA INFILE;
        
          2) warn with a new WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED
             message on non-ASCII field or line separators.
        
        The select_export::send_data() merhod has been modified to
        convert item data to output charset (see new SELECT INTO OUTFILE
        syntax). By default the BINARY charset is used for backward
        compatibility.
      sql/sql_class.h:
        The select_export::write_cs field added to keep output
        charset.
      sql/sql_load.cc:
        mysql_load has been modified to warn on non-ASCII field or
        line separators with a new WARN_NON_ASCII_SEPARATOR_NOT_IMPLEMENTED
        message.
      sql/sql_string.cc:
        New global function has been added: convert_to_printable()
        (common code has been moved from check_string_copy_error()).
      sql/sql_string.h:
        New String::is_ascii() method and new global convert_to_printable()
        function have been added.
      sql/sql_yacc.yy:
        New syntax: added CHARACTER SET clause to the
        SELECT ... INTO OUTFILE (to complement the same clause in
        LOAD DATA INFILE). By default the BINARY charset is used for
        backward compatibility.
      1b538291
    • Davi Arnaut's avatar
      Bug#46265: Can not disable warning about unsafe statements for binary logging · ad1c06b0
      Davi Arnaut authored
      If using statement based replication (SBR), repeatedly calling
      statements which are unsafe for SBR will cause a warning message
      to be written to the error for each statement. This might lead
      to filling up the error log and there is no way to disable this
      behavior.
      
      The solution is to only log these message (about statements unsafe
      for statement based replication) if the log_warnings option is set.
      
      For example:
      
      SET GLOBAL LOG_WARNINGS = 0;
      INSERT INTO t1 VALUES(UUID());
      SET GLOBAL LOG_WARNINGS = 1;
      INSERT INTO t1 VALUES(UUID());
      
      In this case the message will be printed only once:
      
      [Warning] Statement may not be safe to log in statement format.
                Statement: INSERT INTO t1 VALUES(UUID())
      
      mysql-test/suite/binlog/r/binlog_stm_unsafe_warning.result:
        Add test case result for Bug#46265
      mysql-test/suite/binlog/t/binlog_stm_unsafe_warning-master.opt:
        Make log_error value available.
      mysql-test/suite/binlog/t/binlog_stm_unsafe_warning.test:
        Add test case for Bug#46265
      sql/sql_class.cc:
        Print warning only if the log_warnings is enabled.
      ad1c06b0
    • Tatiana A. Nurnberg's avatar
      Bug#40281, partitioning the general log table crashes the server · bba587cd
      Tatiana A. Nurnberg authored
      We disallow the partitioning of a log table. You could however
      partition a table first, and then point logging to it. This is
      not only against the docs, it also crashes the server.
      
      We catch this case now.
      
      mysql-test/r/partition.result:
        results for 40281
      mysql-test/t/partition.test:
        test for 40281: show that trying to log to partitioned table fails rather
        to crash the server
      sql/ha_partition.cc:
        Signal that we no longer support logging to partitioned tables,
        as per the docs.
      sql/sql_partition.cc:
        Some commands like "USE ..." have no select, yet we may try
        to parse partition info after their execution if user set a
        partitioned table as log target. This shouldn't lead to a
        NULL-deref/crash.
      bba587cd
    • Jim Winstead's avatar
      Merge bug fix. · 89077ec0
      Jim Winstead authored
      89077ec0
  4. 30 Jul, 2009 1 commit
    • Davi Arnaut's avatar
      Bug#43435: LOCK_open does not use MY_MUTEX_INIT_FAST · b8122e8c
      Davi Arnaut authored
      Initialize LOCK_open as a adapative mutex on platforms where the
      PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP macro is available. The flag
      indicates that a thread should spin (busy wait) for some time on a
      locked adaptive mutex before blocking (sleeping). It's intended to
      to alleviate performance problems due to LOCK_open being a highly
      contended mutex.
      
      sql/mysqld.cc:
        Initialize LOCK_open as a adapative mutex.
      b8122e8c
  5. 31 Jul, 2009 1 commit
  6. 30 Jul, 2009 7 commits
    • Matthias Leich's avatar
    • Matthias Leich's avatar
      8e410185
    • Davi Arnaut's avatar
      Manual merge. · 652413a8
      Davi Arnaut authored
      652413a8
    • Matthias Leich's avatar
      4ef7ee02
    • Matthias Leich's avatar
      Merge 5.0 -> 5.1 of fix for bug 44493 · f2eb8490
      Matthias Leich authored
      f2eb8490
    • Matthias Leich's avatar
      Merge of fix for bug 44493 into GCA tree · a800612b
      Matthias Leich authored
      a800612b
    • V Narayanan's avatar
      Bug#45800 crash when replacing into a merge table and there is a duplicate · 0c7528df
      V Narayanan authored
            
      A REPLACE in the MERGE engine is actually a REPLACE
      into one (FIRST or LAST) of the underlying MyISAM
      tables. So in effect the server works on the meta
      data of the MERGE table, while the real insert happens
      in the MyISAM table.
      
      The MERGE table has no index, while MyISAM has a
      unique index. When a REPLACE into a MERGE table (
      and the REPLACE conflicts with a duplicate in a
      child table) is done, we try to access the duplicate
      key information for the MERGE table. This information
      actually does not exist, hence this results in a crash.
      
      The problem can be resolved by modifying the MERGE
      engine to provide us the duplicate key information
      directly, instead of just returning the MyISAM index
      number as the error key. Then the SQL layer (or "the
      server") does not try to access the key_info of the
      MERGE table, which does not exist.
      
      The current patch modifies the MERGE engine to provide
      the position for a record where a unique key violation
      occurs.
      
      include/myisammrg.h:
        Bug#45800 crash when replacing into a merge table and there is a duplicate
        
        Add a member to the st_mymerge_info structure that will
        store the duplicate key offset in the MERGE table. This
        offset will be the sum of the record offset of the MyISAM
        table within the MERGE table and the offset of the record
        within the MyISAM table.
      mysql-test/r/merge.result:
        Bug#45800 crash when replacing into a merge table and there is a duplicate
        
        Result file for the test case.
      mysql-test/t/merge.test:
        Bug#45800 crash when replacing into a merge table and there is a duplicate
        
        Added test case for both REPLACE and INSERT...ON DUPLICATE UPDATE.
      storage/myisammrg/ha_myisammrg.cc:
        Bug#45800 crash when replacing into a merge table and there is a duplicate
        
        The info method now will process the HA_STATUS_ERRKEY flag
        and will return the index and the offset of the duplicate
        key.
      storage/myisammrg/ha_myisammrg.h:
        Bug#45800 crash when replacing into a merge table and there is a duplicate
        
        Set the HA_DUPLICATE_POS flag to indicate that the duplicate
        key information is now available in the MERGE storage engine.
      storage/myisammrg/myrg_info.c:
        Bug#45800 crash when replacing into a merge table and there is a duplicate
        
        We modify the myrg_status function to return the position of the
        duplicate key. The duplicate key position in the MERGE table will
        be the MyISAM file_offset and the offset within the MyISAM table
        of the start position of the records.
      0c7528df
  7. 29 Jul, 2009 7 commits
    • Kristofer Pettersson's avatar
      Bug#44521 Prepared Statement: CALL p() - crashes: `! thd->main_da.is_sent' failed et.al. · d897317c
      Kristofer Pettersson authored
      Fixed wrong prototype declaration which cased build failure on solaris.
      d897317c
    • Kristofer Pettersson's avatar
      auto-merge · 490e921c
      Kristofer Pettersson authored
      490e921c
    • Kristofer Pettersson's avatar
      Bug#44521 Executing a stored procedure as a prepared statement can sometimes cause · cdfbb2e9
      Kristofer Pettersson authored
                an assertion in a debug build.
      
      The reason is that the C API doesn't support multiple result sets for prepared
      statements and attempting to execute a stored routine which returns multiple result
      sets sometimes lead to a network error. The network error sets the diagnostic area
      prematurely which later leads to the assert when an attempt is made to set a second
      server state.
      
      This patch fixes the issue by changing the scope of the error code returned by
      sp_instr_stmt::execute() to include any error which happened during the execution.
      To assure that Diagnostic_area::is_sent really mean that the message was sent all
      network related functions are checked for return status.
      
      libmysqld/lib_sql.cc:
        * Changed prototype to return success/failure status on net_send_error_packet(),
          net_send_ok(), net_send_eof(), write_eof_packet().
      mysql-test/r/sp_notembedded.result:
        * Added test case for bug 44521
      mysql-test/t/sp_notembedded.test:
        * Added test case for bug 44521
      sql/protocol.cc:
        * Changed prototype to return success/failure status on net_send_error_packet(),
          net_send_ok(), net_send_eof(), write_eof_packet().
      sql/protocol.h:
        * Changed prototype to return success/failure status on net_send_error_packet(),
          net_send_ok(), net_send_eof(), write_eof_packet().
      sql/sp_head.cc:
        * Changed prototype to return success/failure status on net_send_error_packet(),
          net_send_ok(), net_send_eof(), write_eof_packet().
      cdfbb2e9
    • Mikael Ronstrom's avatar
      e20f744f
    • Mikael Ronstrom's avatar
      Bug#46354, when defining partitions without subpartition definition after... · 29642ea6
      Mikael Ronstrom authored
      Bug#46354, when defining partitions without subpartition definition after defining it with the first partition and using list partition caused crash, fixed by more error checks in parser
      29642ea6
    • Guilhem Bichot's avatar
      removing unused array (compiler warning) · 43fcef17
      Guilhem Bichot authored
      43fcef17
    • Guilhem Bichot's avatar
      Bug#45829 "CREATE TABLE TRANSACTIONAL PAGE_CHECKSUM ROW_FORMAT=PAGE accepted, does nothing": · ed9acbb0
      Guilhem Bichot authored
      those keywords do nothing in 5.1 (they are meant for future versions, for example featuring the Maria engine)
      so they are here removed from the syntax. Adding those keywords to future versions when needed is:
      - WL#5034 "Add TRANSACTIONA=0|1 and PAGE_CHECKSUM=0|1 clauses to CREATE TABLE"
      - WL#5037 "New ROW_FORMAT value for CREATE TABLE: PAGE"
      
      mysql-test/r/create.result:
        test that syntax is not accepted
      mysql-test/t/create.test:
        test that syntax is not accepted
      sql/handler.cc:
        remove ROW_FORMAT=PAGE
      sql/handler.h:
        Mark unused objects, but I don't remove them by fear of breaking any plugin which includes this file
        (see also table.h)
      sql/lex.h:
        removing syntax
      sql/sql_show.cc:
        removing output of noise keywords in SHOW CREATE TABLE and INFORMATION_SCHEMA.TABLES
      sql/sql_table.cc:
        removing TRANSACTIONAL
      sql/sql_yacc.yy:
        removing syntax
      sql/table.cc:
        removing TRANSACTIONAL, PAGE_CHECKSUM. Their place in the frm file is not reclaimed,
        for compatibility with older 5.1.
      sql/table.h:
        Mark unused objects, but I don't remove them by fear of breaking any plugin which includes this file
        (and there are several engines which use the content TABLE_SHARE and thus rely on a certain binary
        layout of this structure).
      ed9acbb0
  8. 28 Jul, 2009 8 commits
    • Alfranio Correia's avatar
    • Davi Arnaut's avatar
      If running the mysql_upgrade test case with Valgrind, the resource · 6aa74254
      Davi Arnaut authored
      consumption (CPU) for upgrading a large log table can be intense.
      Therefore, truncate the general_log table beforehand if running
      mysql_upgrade test with Valgrind.
      
      mysql-test/t/mysql_upgrade.test:
        Truncate log table if running with Valgrind.
      6aa74254
    • Alexey Kopytov's avatar
      Automerge. · 547520ee
      Alexey Kopytov authored
      547520ee
    • Alexey Kopytov's avatar
      Automerge. · 1654f18f
      Alexey Kopytov authored
      1654f18f
    • Alexey Kopytov's avatar
      Automerge. · 6084ee27
      Alexey Kopytov authored
      6084ee27
    • Alexey Kopytov's avatar
      Manual merge. · 5575a495
      Alexey Kopytov authored
      5575a495
    • Alexey Kopytov's avatar
      Bug #45031: invalid memory reads in my_real_read using protocol · 3e2d8d93
      Alexey Kopytov authored
                  compression 
       
      Since uint3korr() may read 4 bytes depending on build flags and 
      platform, allocate 1 extra "safety" byte in the network buffer 
      for cases when uint3korr() in my_real_read() is called to read
      last 3 bytes in the buffer. 
       
      It is practically hard to construct a reliable and reasonably 
      small test case for this bug as that would require constructing 
      input stream such that a certain sequence of bytes in a 
      compressed packet happens to be the last 3 bytes of the network 
      buffer. 
      
      
      sql/net_serv.cc:
        Allocate 1 extra "safety" byte in the network buffer for cases 
        when uint3korr() is used to read last 3 bytes in the buffer.
      3e2d8d93
    • Alfranio Correia's avatar
      BUG#41166 stored function requires "deterministic" if binlog_format is "statement" · 33396f41
      Alfranio Correia authored
      If the log_bin_trust_function_creators option is not defined, creating a stored
      function requires either one of the modifiers DETERMINISTIC, NO SQL, or READS
      SQL DATA. Executing a stored function should also follows the same rules if in
      STATEMENT mode. However, this was not happening and a wrong error was being
      printed out: ER_BINLOG_ROW_RBR_TO_SBR.
      
      The patch makes the creation and execution compatible and prints out the correct
      error ER_BINLOG_UNSAFE_ROUTINE when a stored function without one of the modifiers
      above is executed in STATEMENT mode.
      33396f41
  9. 27 Jul, 2009 3 commits
    • Davi Arnaut's avatar
      Bug#46385: [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted t · f9551a9c
      Davi Arnaut authored
      The maximum value of the max_join_size variable is set by converting
      a signed type (long int) with negative value (-1) to a wider unsigned
      type (unsigned long long), which yields the largest possible value of
      the wider unsigned type -- as per the language conversion rules. But,
      depending on build options, the type of the max_join_size might be a
      shorter type (ha_rows - unsigned long) which causes the warning to be
      thrown once the large value is truncated to fit.
      
      The solution is to ensure that the maximum value of the variable is
      always set to the maximum value of integer type of max_join_size.
      
      Furthermore, it would be interesting to always have a fixed type for
      this variable, but this would incur in a change of behavior which is
      not acceptable for a GA version. See Bug#35346.
      
      sql/mysqld.cc:
        Set max value for type.
      f9551a9c
    • Davi Arnaut's avatar
      Post-merge fix for Bug#43587: Handle failures to execute a statement · ded0cb8c
      Davi Arnaut authored
      during bootstrap on a embedded server.
      
      libmysqld/lib_sql.cc:
        Handle a failure during bootstrap.
      ded0cb8c
    • Davi Arnaut's avatar
      Merge from mysql-5.0-bugteam. · d242f780
      Davi Arnaut authored
      d242f780