1. 18 Mar, 2010 1 commit
    • Alexey Kopytov's avatar
      Bug #8433: Overflow must be an error · 2acfdc50
      Alexey Kopytov authored
       
      All numeric operators and functions on integer, floating point 
      and DECIMAL values now throw an 'out of range' error rather 
      than returning an incorrect value or NULL,  when the result is 
      out of supported range for the corresponding data type. 
       
      Some test cases in the test suite had to be updated 
      accordingly either because the test case itself relied on a 
      value returned in case of a numeric overflow, or because a 
      numeric overflow was the root cause of the corresponding bugs. 
      The latter tests are no longer relevant, since the expressions 
      used to trigger the corresponding bugs are not valid anymore. 
      However, such test cases have been adjusted and kept "for the 
      record". 
      
      mysql-test/r/func_math.result:
        Added test cases for bug #8433. 
        Updated results of the test case for bug #31236.
      mysql-test/r/func_misc.result:
        Streamlined test cases.
      mysql-test/r/func_test.result:
        Streamlined test cases.
      mysql-test/r/select.result:
        Streamlined test cases.
      mysql-test/r/sp.result:
        Streamlined test cases.
      mysql-test/r/strict.result:
        Streamlined test cases.
      mysql-test/r/type_newdecimal.result:
        Streamlined test cases.
      mysql-test/suite/sys_vars/r/sql_slave_skip_counter_basic.result:
        Streamlined test cases.
      mysql-test/suite/sys_vars/t/sql_slave_skip_counter_basic.test:
        Streamlined test cases.
      mysql-test/t/func_math.test:
        Added test cases for bug #8433. 
        Updated results of the test case for bug #31236.
      mysql-test/t/func_misc.test:
        Streamlined test cases.
      mysql-test/t/func_test.test:
        Streamlined test cases.
      mysql-test/t/select.test:
        Streamlined test cases.
      mysql-test/t/sp.test:
        Streamlined test cases.
      mysql-test/t/strict.test:
        Streamlined test cases.
      mysql-test/t/type_newdecimal.test:
        Streamlined test cases.
      sql/item_create.cc:
        Changed Item_func_cot() to be defined as a standalone Item
        rather than a combination of "1 / TAN(x)".
      sql/item_func.cc:
        Throw an 'out of range' error rather than returning an  
        incorrect value or NULL,  when the result of a numeric 
        operator or a function is out of supported range for  
        the corresponding data type.
      sql/item_func.h:
        Added validation helpers as inline methods of Item_func.
      sql/share/errmsg-utf8.txt:
        New ER_DATA_OUT_OF_RANGE error.
      2acfdc50
  2. 20 Feb, 2010 6 commits
  3. 18 Feb, 2010 3 commits
  4. 17 Feb, 2010 8 commits
  5. 16 Feb, 2010 5 commits
  6. 15 Feb, 2010 10 commits
    • Konstantin Osipov's avatar
      A fix and a test case for Bug#47648 "main.merge fails sporadically". · 3a856d44
      Konstantin Osipov authored
      If a prepared statement used both a MyISAMMRG table and a stored 
      function or trigger, execution could fail with "No such table"
      error or crash. 
      The error would come from a failure of the MyISAMMRG engine
      to meet the expectations of the prelocking algorithm, 
      in particular maintain lex->query_tables_own_last pointer
      in sync with lex->query_tables_last pointer/the contents
      of lex->query_tables. When adding merge children, the merge
      engine would extend the table list. Then, when adding 
      prelocked tables, the prelocking algorithm would use a pointer
      to the last merge child to assign to lex->query_tables_own_last.
      Then, when merge children were removed at the end of
      open_tables(), lex->query_tables_own_last
      was not updated, and kept pointing
      to a removed merge child.
      
      The fix ensures that query_tables_own_last is always in
      sync with lex->query_tables_last.
      
      This is a regression introduced by WL#4144 and present only
      in next-4284 tree and 6.0.
      
      mysql-test/r/merge.result:
        Update results (Bug#47648).
      mysql-test/t/merge.test:
        Add a test case for Bug#47648.
        Update the result file to reflect a fix of another bug
        in MyISAMMRG code: not maintaining lex->query_tables_own_last
        allowed a stored function or trigger to modify a merge table
        which was already updated by the main statement.
        It is not allowed for other storage engines, and should
        not be allowed for MyISAMMRG.
      storage/myisammrg/ha_myisammrg.cc:
        When adding children to the list of tables to open,
        make sure that we properly set lex->query_tables_own_last.
        When removing the children, update lex->query_tables_own_last
        if necessary.
      3a856d44
    • Alexander Nozdrin's avatar
      Auto-merge from mysql-next-4284. · c15886a1
      Alexander Nozdrin authored
      c15886a1
    • Dmitry Lenev's avatar
      Fix for bug #51093 "Crash (possibly stack overflow) in · 03672b96
      Dmitry Lenev authored
      MDL_lock::find_deadlock".
      
      On some platforms deadlock detector in metadata locking 
      subsystem under certain conditions might have exhausted
      stack space causing server crashes.
      
      Particularly this caused failures of rqg_mdl_stability
      test on Solaris in PushBuild.
      
      During search for deadlock MDL deadlock detector could 
      sometimes encounter loop in the waiters graph in which 
      MDL_context which has started search for a deadlock 
      does not participate. In such case our algorithm will 
      continue looping assuming that either this deadlock will 
      be resolved by MDL_context which has created it (i.e.
      by one of loop participants) or maximum search depth
      will be reached. 
      Since max search depth was set to 1000 in the latter case 
      on platforms where each iteration of deadlock search 
      algorithm needs more than DEFAULT_STACK_SIZE/1000 bytes 
      of stack (around 192 bytes for 32-bit and around 256 bytes 
      for 64-bit platforms) we might have exhausted stack space.
      
      This patch solves this problem by reducing maximum search
      depth for MDL deadlock detector to 32. This should be safe
      at the moment as it is unlikely that each iteration of the 
      current deadlock detector algorithm will consume more than 
      1K of stack (thus total amount of stack required can't be
      more than 32K) and we require at least 80K of stack in order
      to open any table. Also this value should be (hopefully) big
      enough to not cause too much false deadlock errors (there
      is an anecdotal evidence that real-life deadlocks are
      typically shorter than that).
      
      Additional reasearch should be conducted in future in order
      to determine the more optimal value of maximum search depth.
      
      This patch does not include test case as existing
      rqg_mdl_stability test can serve as one.
      03672b96
    • Jon Olav Hauglid's avatar
      Followup to Bug#45225 Locking: hang if drop table with no timeout · 37fd0bcf
      Jon Olav Hauglid authored
      This patch removes the unused server variable
      "table_lock_wait_timeout".
      
      
      mysql-test/r/variables.result:
        Updated the test for Bug#28580 to reflect that 
        "table_lock_wait_timeout" no longer exists.
      mysql-test/t/variables.test:
        Updated the test for Bug#28580 to reflect that 
        "table_lock_wait_timeout" no longer exists.
      37fd0bcf
    • Alexander Nozdrin's avatar
      Auto-merge from mysql-next-4284. · cb7078f5
      Alexander Nozdrin authored
      cb7078f5
    • Alexander Nozdrin's avatar
      After-merge fix. · fe8d83a1
      Alexander Nozdrin authored
      fe8d83a1
    • Dmitry Lenev's avatar
      Fix for bug #51136 "Crash in pthread_rwlock_rdlock on · be3e256d
      Dmitry Lenev authored
      TEMPORARY + HANDLER + LOCK + SP".
      
      Server crashed when one: 
      1) Opened HANDLER or acquired global read lock
      2) Then locked one or several temporary tables with
         LOCK TABLES statement (but no base tables).
      3) Then issued any statement causing commit (explicit 
         or implicit).
      4) Issued statement which should have closed HANDLER
         or released global read lock.
         
      The problem was that when entering LOCK TABLES mode in the
      scenario described above we incorrectly set transactional
      MDL sentinel to zero. As result during commit all metadata 
      locks were released (including lock for open HANDLER or
      global metadata shared lock). Indeed, attempt to release
      metadata lock for the second time which happened during
      HANLDER CLOSE or during release of GLR caused crash.
      
      This patch fixes problem by changing MDL_context's
      set_trans_sentinel() method to set sentinel to correct 
      value (it should point to the most recent ticket).
      
      mysql-test/include/handler.inc:
        Added test for bug #51136 "Crash in pthread_rwlock_rdlock on 
        TEMPORARY + HANDLER + LOCK + SP".
      mysql-test/r/flush.result:
        Updated test results (see flush.test).
      mysql-test/r/handler_innodb.result:
        Updated test results (see include/handler.inc).
      mysql-test/r/handler_myisam.result:
        Updated test results (see include/handler.inc).
      mysql-test/t/flush.test:
        Added additional coverage for bug #51136 "Crash in
        pthread_rwlock_rdlock on TEMPORARY + HANDLER + LOCK +
        SP".
      sql/mdl.h:
        When setting new value of transactional sentinel use 
        pointer to the most recent ticket instead of value 
        returned by MDL_context::mdl_savepoint(). 
        This allows to handle correctly situation when the new 
        value of sentinel should be the same as its current value 
        (MDL_context::mdl_savepoint() returns NULL in this case).
      be3e256d
    • Alexander Nozdrin's avatar
      Manual merge from mysql-next-mr. · a8ef1baf
      Alexander Nozdrin authored
      Conflicts:
        - sql/log_event.cc
        - sql/sql_class.h
      a8ef1baf
    • Dmitry Lenev's avatar
      Fix for bug #51134 "Crash in MDL_lock::destroy on a concurrent · eb0f0971
      Dmitry Lenev authored
      DDL workload".
      
      When a RENAME TABLE or LOCK TABLE ... WRITE statement which
      mentioned the same table several times were aborted during 
      the process of acquring metadata locks (due to deadlock 
      which was discovered or because of KILL statement) server 
      might have crashed.
      
      When attempt to acquire all locks requested had failed we
      went through the list of requests and released locks which
      we have managed to acquire by that moment one by one. Since 
      in the scenario described above list of requests contained 
      duplicates this led to releasing the same ticket twice and 
      a crash as result.
      
      This patch solves the problem by employing different approach
      to releasing locks in case of failure to acquire all locks
      requested. 
      Now we take a MDL savepoint before starting acquiring locks 
      and simply rollback to it if things go bad.
      
      mysql-test/r/lock_multi.result:
        Updated test results (see lock_multi.test).
      mysql-test/t/lock_multi.test:
        Added test case for bug #51134 "Crash in MDL_lock::destroy
        on a concurrent DDL workload".
      sql/mdl.cc:
        MDL_context::acquire_locks():
          When attempt to acquire all locks requested has failed do
          not go through the list of requests and release locks which
          we have managed to acquire one by one. 
          Since list of requests can contain duplicates such approach
          may lead to releasing the same ticket twice and a crash as
          result.
          Instead use the following approach - take a MDL savepoint
          before starting acquiring locks and simply rollback to it
          if things go bad.
      eb0f0971
    • Alexander Barkov's avatar
      WL#3090 Japanese Character Set adjustments · 4e4122b9
      Alexander Barkov authored
      added:
        @ mysql-test/include/ctype_utf8_table.inc
          Adding a share file to populate all utf8 values [U+0000..U+FFFF]
      modified:
        @ include/m_ctype.h
          Introducing MB2 and MY_PUT_MB2 macros
      
        @ mysql-test/r/ctype_cp932_binlog_stm.result
        @ mysql-test/r/ctype_eucjpms.result
        @ mysql-test/r/ctype_sjis.result
        @ mysql-test/r/ctype_ujis.result
        @ mysql-test/t/ctype_cp932_binlog_stm.test
        @ mysql-test/t/ctype_eucjpms.test
        @ mysql-test/t/ctype_sjis.test
        @ mysql-test/t/ctype_ujis.test
          Adding test
      
        @ strings/ctype-cp932.c
        @ strings/ctype-eucjpms.c
        @ strings/ctype-sjis.c
        @ strings/ctype-ujis.c
          Adding new functions using Big-Table approach.
      4e4122b9
  7. 14 Feb, 2010 7 commits