1. 16 Jun, 2011 3 commits
  2. 15 Jun, 2011 1 commit
    • Marko Mäkelä's avatar
      Introduce UNIV_BLOB_NULL_DEBUG for temporarily hiding Bug#12650861. · 2a48b142
      Marko Mäkelä authored
      Some ut_a(!rec_offs_any_null_extern()) assertion failures are indicating
      genuine BLOB bugs, others are bogus failures when rolling back incomplete
      transactions at crash recovery. This needs more work, and until I get a
      chance to work on it, other testing must not be disrupted by this.
      2a48b142
  3. 14 Jun, 2011 1 commit
    • Marko Mäkelä's avatar
      Merge a fix from mysql-5.5 to mysql-5.1: · c0fcd9e0
      Marko Mäkelä authored
      revno 2995.37.209
      revision id marko.makela@oracle.com-20110518120508-qhn7vz814vn77v5k
      parent marko.makela@oracle.com-20110517121555-lmple24qzxqkzep4
      timestamp: Wed 2011-05-18 15:05:08 +0300
      message:
        Fix a bogus UNIV_SYNC_DEBUG failure in the fix of Bug #59641
        or Oracle Bug #11766513.
      
        trx_undo_free_prepared(): Do not acquire or release trx->rseg->mutex.
        This code is invoked in the single-threaded part of shutdown, therefore
        a mutex is not needed.
      c0fcd9e0
  4. 13 Jun, 2011 1 commit
  5. 10 Jun, 2011 5 commits
    • Karen Langford's avatar
      Merged from mysql-5.0 · ba6d3a5c
      Karen Langford authored
      ba6d3a5c
    • Karen Langford's avatar
      increase version number to 5.0.95 · 940335e1
      Karen Langford authored
      940335e1
    • Karen Langford's avatar
      Raise version number after cloning 5.1.58 · afafca1a
      Karen Langford authored
      afafca1a
    • Sunanda Menon's avatar
      Raise version number after cloning 5.0.94 · 7174bd38
      Sunanda Menon authored
      7174bd38
    • Dmitry Shulga's avatar
      Fixed bug#11753738 (formely known as bug#45235) - 5.1 DOES NOT SUPPORT 5.0-ONLY · 8867ad80
      Dmitry Shulga authored
      SYNTAX TRIGGERS IN ANY WAY
      
      Table with triggers which were using deprecated (5.0-only) syntax became
      unavailable for any DML and DDL after upgrade to 5.1 version of server.
      Attempt to execute any statement on such a table resulted in parsing
      error reported. Since this included DROP TRIGGER and DROP TABLE
      statements (actually, the latter was allowed but was not functioning
      properly for such tables) it was impossible to fix the problem without
      manual operations on .TRG and .TRN files in data directory.
      
      The problem was that failure to parse trigger body (due to 5.0-only
      syntax) when opening trigger file for a table prevented the table
      from being open. This made all operations on the table impossible
      (except DROP TABLE which due to peculiarity in its implementation
      dropped the table but left trigger files around).
      
      This patch solves this problem by silencing error which occurs when
      we parse trigger body during table open. Error message is preserved
      for the future use and table is marked as having a broken trigger.
      We also try to analyze parse tree to recover trigger name, which
      will be needed in order to drop the broken trigger. DML statements
      which invoke triggers on the table marked as having broken trigger
      are prohibited and emit saved error message. The same happens for
      DDL which change triggers except DROP TRIGGER and DROP TABLE which
      try their best to do what was requested. Table becomes no longer
      marked as having broken trigger when last such trigger is dropped.
      8867ad80
  6. 09 Jun, 2011 6 commits
    • Marko Mäkelä's avatar
      Disable a debug assertion that was added to track down Bug#12612184. · c8419fac
      Marko Mäkelä authored
      row_build(): The record may contain null BLOB pointers when the server
      is rolling back an insert that was interrupted by a server crash.
      c8419fac
    • Dmitry Shulga's avatar
      Follow-up for patch of bug#11764334. · ef3c145d
      Dmitry Shulga authored
      ef3c145d
    • Dmitry Shulga's avatar
      Fixed bug#11764334 (formerly bug#57156): ALTER EVENT CHANGES · 1cc304e3
      Dmitry Shulga authored
      THE EVENT STATUS.
      
      Any ALTER EVENT statement on a disabled event enabled it back
      (unless this ALTER EVENT statement explicitly disabled the event).
      
      The problem was that during processing of an ALTER EVENT statement
      value of status field was overwritten unconditionally even if new
      value was not specified explicitly. As a consequence this field
      was set to default value for status which corresponds to ENABLE.
      
      The solution is to check if status field was explicitly specified in
      ALTER EVENT statement before assigning new value to status field.
      1cc304e3
    • Dmitry Shulga's avatar
      Fixed bug#11840395 (formerly known as bug#60347: THE STRING "VERSIONDATA" · 639605a9
      Dmitry Shulga authored
      SEEMS TO BE 'LEAKING' INTO THE SCHEMA NAME SPACE)
      and bug#12428824 (Parser stack overflow and crash in sp_add_used_routine
      with obscure query).
      
      The first problem was that attempts to call a stored function by
      its fully qualified name ended up with unwarranted error "ERROR 1305
      (42000): FUNCTION someMixedCaseDb.my_function_name does not exist"
      if this function belonged to a schema that had uppercase letters in
      its name AND --lower_case_table_names was equal to either 1 or 2.
      
      The second problem was that 5.5 version of MySQL server might have
      crashed when a user tried to call stored function with too long name
      or too long database name (i.e if a function and database name combined
      occupied more than 2*3*64 bytes in utf8). This issue didn't affect
      versions of server < 5.5.
       
      The first problem was caused by the fact that in cases when a stored
      function was called by its fully qualified name we didn't lowercase
      name of its schema before performing look up of the function in
      mysql.proc table even although lower_case_table_names mode was on.
      As result we were unable to find this function since during its
      creation we store lowercased version of schema name in the system
      table in this mode and field for schema name uses binary collation.
      
      Calls to stored functions were unaffected by this problem since for
      them schema name is converted to lowercase as necessary.
      
      The reason for the second bug was that MySQL Server didn't check length
      of function name and database name before proceeding with execution of
      stored function. As a consequence too long database name or function
      name caused buffer overruns in places where the code assumes that their
      length is within fixed limits, like mdl_key_init() in 5.5.
      
      Again this issue didn't affect calls to stored procedures as for them
      length of schema name and procedure name are properly checked.
      
      This patch fixes both these bugs by adding calls to check_db_name()
      and check_routine_name() to grammar rule which corresponds to a call
      to a stored function. These functions ensure that length of database
      name and function name for routine called is within standard limit.
      Moreover call to check_db_name() handles conversion of database name
      to lowercase if --lower_case_table_names mode is on.
      
      Note that even although the second issue seems to be only reproducible
      in 5.5 we still add code fixing it to 5.1 to be on the safe side (and
      make code a bit more robust against possible future changes).
      639605a9
    • Karen Langford's avatar
      Raise version number after cloning 5.1.58 · e104d49c
      Karen Langford authored
      e104d49c
    • Marko Mäkelä's avatar
      BLOB instrumentation for Bug#12612184 Race condition in row_upd_clust_rec() · 6d20340c
      Marko Mäkelä authored
      If UNIV_DEBUG or UNIV_BLOB_LIGHT_DEBUG is enabled, add
      !rec_offs_any_null_extern() assertions, ensuring that records do not
      contain null pointers to externally stored columns in inappropriate
      places.
      
      btr_cur_optimistic_update(): Assert !rec_offs_any_null_extern().
      Incomplete records must never be updated or deleted. This assertion
      will cover also the pessimistic route.
      
      row_build(): Assert !rec_offs_any_null_extern(). Search tuples must
      never be built from incomplete index entries.
      
      row_rec_to_index_entry(): Assert !rec_offs_any_null_extern() unless
      ROW_COPY_DATA is requested. ROW_COPY_DATA is used for
      multi-versioning, and therefore it might be valid to copy the most
      recent (uncommitted) version while it contains a null pointer to
      off-page columns.
      
      row_vers_build_for_consistent_read(),
      row_vers_build_for_semi_consistent_read(): Assert !rec_offs_any_null_extern()
      on all versions except the most recent one.
      
      trx_undo_prev_version_build(): Assert !rec_offs_any_null_extern() on
      the previous version.
      
      rb:682 approved by Sunny Bains
      6d20340c
  7. 07 Jun, 2011 1 commit
    • Ramil Kalimullin's avatar
      Bug#11764487: myisam corruption with insert ignore and invalid spatial data · 55015ea0
      Ramil Kalimullin authored
      Problem: in case of wrong data insert into indexed GEOMETRY fields 
      (e.g. NULL value for a not NULL field) MyISAM reported 
      "ERROR 126 (HY000): Incorrect key file for table; try to repair it"
      due to misuse of the key deletion function.
      
      Fix: always use R-tree key functions for R-tree based indexes
      and B-tree key functions for B-tree based indexes.
      55015ea0
  8. 06 Jun, 2011 2 commits
    • Georgi Kodinov's avatar
      merge of mysql-5.1->mysql-5.1-security · 4f2b3cd3
      Georgi Kodinov authored
      4f2b3cd3
    • Georgi Kodinov's avatar
      Bug #11749418: 38965: TEST CASES GIS-RTREE, TYPE_FLOAT, TYPE_NEWDECIMAL · 29d840ee
      Georgi Kodinov authored
        FAIL IN EMBEDDED SERVER
      
      FreeBSD 64 bit needs the FP_X_DNML to fpsetmask() to prevent exceptions from
      propagating into mysql (as a threaded application).
      However fpsetmask() itself is deprecated in favor of fedisableexcept().
      1. Fixed the #ifdef to check for FP_X_DNML instead of i386.
      2. Added a configure.in check for fedisableexcept() and, if present,
         this function is called insted of the fpsetmask().
      No need for new tests, as the existing tests cover this already.
      Removed the affected tests from the experimental list.
      29d840ee
  9. 03 Jun, 2011 2 commits
  10. 30 May, 2011 1 commit
    • Davi Arnaut's avatar
      Bug#12563279: REGRESSION IN HANDLING PRE-4.1 AUTHENTICATION PACKET · c20552e1
      Davi Arnaut authored
      The problem is that clients implementing the 4.0 version of the
      protocol (that is, mysql-4.0) do not null terminate a string
      at the end of the authentication packet. These clients denote
      the end of the string with the end of the packet.
      
      Although this goes against the documented (see MySQL Internals
      ClientServer Protocol wiki) description of the protocol, these
      old clients still need to be supported.
      
      The solution is to support the documented and actual behavior
      of the clients. If a client is using the pre-4.1 version of
      the protocol, the end of a string in the authentication packet
      can either be denoted with a null character or by the end of
      the packet. This restores backwards compatibility with old
      clients implementing either the documented or actual behavior.
      c20552e1
  11. 27 May, 2011 2 commits
    • Davi Arnaut's avatar
      BUG 11763056 - 55721: AIX 5.1.50 build failing, cannot locate bzero · 79de9c71
      Davi Arnaut authored
      The problem is that although AIX implements bzero, its prototype
      is not declared by default. Since AC_CHECK_FUNC(bzero) succeeds
      even though a prototype is not declared, this breaks compilation
      in C++ files where a prototype is required.
      
      The solution is to only use bzero if a prototype is also declared.
      79de9c71
    • Dmitry Shulga's avatar
      Fixed bug#12546938 (formerly known as 61005) - CREATE IF NOT EXIST EVENT · 8bb8385f
      Dmitry Shulga authored
      will create multiple running events.
      
      A CREATE IF NOT EXIST on an event that existed and was enabled caused
      multiple instances of the event to run. Disabling the event didn't  help.
      If the event was  dropped, the event stopped running, but when created
      again, multiple instances of the event were still running. The only way
      to get out of this situation was  to restart the server.
      
      The problem was that Event_db_repository::create_event() didn't return
      enough information to discriminate between situation when event didn't
      exist and was created and when event did exist and was not created
      (but a warning was emitted). As result in the latter case event
      was added to in-memory queue of events second time. And this led to
      unwarranted multiple executions of the same event.
      
      The solution is to add out-parameter to Event_db_repository::create_event()
      method which will signal that event was not created because it already
      exists and so it should not be added to the in-memory queue.
      8bb8385f
  12. 26 May, 2011 3 commits
    • Dmitry Lenev's avatar
      Fix for bug #11762012 - "54553: INNODB ASSERTS IN · d076be2a
      Dmitry Lenev authored
      HA_INNOBASE::UPDATE_ROW, TEMPORARY TABLE, TABLE LOCK".
      
      Attempt to update an InnoDB temporary table under LOCK TABLES
      led to assertion failure in both debug and production builds
      if this temporary table was explicitly locked for READ. The 
      same scenario works fine for MyISAM temporary tables.
      
      The assertion failure was caused by discrepancy between lock 
      that was requested on the rows of temporary table at LOCK TABLES
      time and by update operation. Since SQL-layer requested a 
      read-lock at LOCK TABLES time InnoDB engine assumed that upcoming
      statements which are going to be executed under LOCK TABLES will 
      only read table and therefore should acquire only S-lock.
      An update operation broken this assumption by requesting X-lock.
      
      Possible approaches to fixing this problem are:
      
      1) Skip locking of temporary tables as locking doesn't make any
         sense for connection-local objects.
      2) Prohibit changing of temporary table locked by LOCK TABLES ... 
         READ.
      
      Unfortunately both of these approaches have drawbacks which make 
      them unviable for stable versions of server.
      
      So this patch takes another approach and changes code in such way
      that LOCK TABLES for a temporary table will always request write
      lock. In 5.1 version of this patch switch from read lock to write
      lock is done inside of InnoDBs handler methods as doing it on 
      SQL-layer causes compatibility troubles with FLUSH TABLES WITH
      READ LOCK.
      d076be2a
    • Sven Sandberg's avatar
      BUG#12574820: binlog.binlog_tmp_table timing out in daily and weekly trunk run · b76c277a
      Sven Sandberg authored
      Problem: MYSQL_BIN_LOG::reset_logs acquires mutexes in wrong order.
      The correct order is first LOCK_thread_count and then LOCK_log. This function
      does it the other way around. This leads to deadlock when run in parallel
      with a thread that takes the two locks in correct order. For example, a thread
      that disconnects will take the locks in the correct order.
      Fix: change order of the locks in MYSQL_BIN_LOG::reset_logs:
      first LOCK_thread_count and then LOCK_log.
      b76c277a
    • Sergey Glukhov's avatar
      Bug#12392636 ASSERTION FAILED: SCALE >= 0 && PRECISION > 0 && SCALE <= PRECISION · aa0c8235
      Sergey Glukhov authored
      Assertion happens due to missing NULL value check in
      Item_func_round::fix_length_and_dec() function.
      The fix: added NULL value check for second parameter.
      aa0c8235
  13. 24 May, 2011 4 commits
  14. 22 May, 2011 1 commit
  15. 21 May, 2011 1 commit
  16. 20 May, 2011 1 commit
    • Dmitry Shulga's avatar
      Fixed bug#11749345 (formerly bug#38813) - increasing memory consumption · 967cf758
      Dmitry Shulga authored
      when selecting from I_S and views exist, in SP.
      
      Symptoms: re-execution of prepared statement (or statement in a stored
      routine) which read from one of I_S tables and which in order to fill
      this I_S table had to open a view led to increasing memory consumption.
      
      What happened in this situation was that during the process of view
      opening for purpose of I_S filling view-related structures (like its
      LEX) were allocated on persistent MEM_ROOT of prepared statement (or 
      stored routine). Since this MEM_ROOT is not freed until prepared
      statement deallocation (or expulsion of stored routine from the cache)
      and code responsible for filling I_S is not able to re-use results of
      view opening from previous executions this allocation ended up in
      memory hogging.
      
      This patch solves the problem by ensuring that when a view opened
      for the purpose of I_S filling all its structures are allocated on
      non-persistent runtime MEM_ROOT. This is achieved by activating a
      temporary Query_arena bound to this MEM_ROOT.
      Since this step makes impossible linking of view structures into
      LEX of our prepared statement (or stored routine statement) this
      patch also changes code filling I_S table to install a proxy LEX
      before trying to open a view or a table. Consequently some code
      which was responsible for backing-up/restoring parts of LEX when
      view/table was opened during filling of I_S table became redundant
      and was removed.
      
      This patch doesn't contain test case for this bug as it is hard
      to test memory hogging in our test suite.
      967cf758
  17. 19 May, 2011 3 commits
    • Luis Soares's avatar
      BUG#11746302 · f633e6f5
      Luis Soares authored
      Automerge mysql-5.1-gca into latest mysql-5.1.
      f633e6f5
    • Luis Soares's avatar
      BUG#11746302: 25228: RPL_RELAYSPACE.TEST FAILS ON POWERMACG5, · 21163d68
      Luis Soares authored
                    VM-WIN2003-32-A, SLES10-IA64-A 
            
      The test case waits for master_pos_wait not to timeout, which
      means that the deadlock between SQL and IO threads was 
      succesfully and automatically dealt with.
            
      However, very rarely, master_pos_wait reports a timeout. This
      happens because the time set for master_pos_wait to wait was
      too small (6 seconds). On slow test env this could be a 
      problem.
            
      We fix this by setting the timeout inline with the one used
      in sync_slave_with_master (300 seconds). In addition we 
      refactored the test case and refined some comments.
      21163d68
    • Marko Mäkelä's avatar
  18. 18 May, 2011 2 commits
    • Mayank Prasad's avatar
      Bug#11764633 : 57491: THD->MAIN_DA.IS_OK() ASSERT IN EMBEDDED · 55d3381c
      Mayank Prasad authored
      Issue:
      While running embedded server, if client issues TEE command (\T foo/bar) and
      "foo/bar" directory doesn't exist, it is suppose to give error. But it was
      aborting.  This was happening because wrong error handler was being called.
      
      Solution:
      Modified calls to correct error handler. In embedded server case, there are 
      two error handler (client and server) which are supposed to be called based 
      on which context code is in. If it is in client context, client error handler
      should be called otherwise server.
      
      Test case:
      Test case automation is not possible as current (following) code doesn't 
      allow '\T' to be executed from command line (OR command read from a file):
      [client/mysql.cc]
      ...
       static int
       com_tee(String *buffer __attribute__((unused)),
               char *line __attribute__((unused)))
       {
         char file_name[FN_REFLEN], *end, *param;
      
         if (status.batch) << THIS IS TRUE WHILE EXECUTING FROM COMMAND LINE.
            return 0;
       ...
      So, not adding test case in GA. WIll add a test case in mysql-trunk after 
      removing above code so that this could be properly tested before GA.
      55d3381c
    • Sergey Vojtovich's avatar
      BUG#12402794 - 60976: CRASH, VALGRIND WARNING AND MEMORY · 33a9d9fa
      Sergey Vojtovich authored
                     LEAK WITH PARTITIONED ARCHIVE TABLES
      
      CHECK TABLE against archive table, when file descriptors
      are exhausted, caused server crash.
      
      Archive didn't handle errors when opening data file for
      CHECK TABLE.
      33a9d9fa