1. 16 May, 2007 1 commit
    • unknown's avatar
      A fix and a test case for · 3395c53e
      unknown authored
      Bug#21483 "Server abort or deadlock on INSERT DELAYED with another
      implicit insert"
      Also fixes and adds test cases for bugs:
      20497 "Trigger with INSERT DELAYED causes Error 1165"
      21714 "Wrong NEW.value and server abort on INSERT DELAYED to a
      table with a trigger".
      Post-review fixes.
      
      Problem:
      In MySQL INSERT DELAYED is a way to pipe all inserts into a
      given table through a dedicated thread. This is necessary for
      simplistic storage engines like MyISAM, which do not have internal
      concurrency control or threading and thus can not
      achieve efficient INSERT throughput without support from SQL layer.
      DELAYED INSERT works as follows:
      For every distinct table, which can accept DELAYED inserts and has
      pending data to insert, a dedicated thread is created to write data
      to disk. All user connection threads that attempt to
      delayed-insert into this table interact with the dedicated thread in
      producer/consumer fashion: all records to-be inserted are pushed
      into a queue of the dedicated thread, which fetches the records and 
      writes them.
      In this design, client connection threads never open or lock
      the delayed insert table.
      This functionality was introduced in version 3.23 and does not take 
      into account existence of triggers, views, or pre-locking.
      E.g. if INSERT DELAYED is called from a stored function, which,
      in turn, is called from another stored function that uses the delayed
      table, a deadlock can occur, because delayed locking by-passes
      pre-locking. Besides:
       * the delayed thread works directly with the subject table through
         the storage engine API and does not invoke triggers
       * even if it was patched to invoke triggers, if triggers,
         in turn, used other tables, the delayed thread would
         have to open and lock involved tables (use pre-locking).
       * even if it was patched to use pre-locking, without deadlock
         detection the delayed thread could easily lock out user 
         connection threads in case when the same table is used both
         in a trigger and on the right side of the insert query: 
         the delayed thread would not release locks until all inserts 
         are complete, and user connection can not complete inserts 
         without having locks on the tables used on the right side of the
         query.
      
      Solution:
      
      These considerations suggest two general alternatives for the
      future of INSERT DELAYED:
       * it is considered a full-fledged alternative to normal INSERT
       * it is regarded as an optimisation that is only relevant 
         for simplistic engines.
      Since we missed our chance to provide complete support of new
      features when 5.0 was in development, the first alternative
      currently renders infeasible.
      However, even the second alternative, which is to detect
      new features and convert DELAYED insert into a normal insert, 
      is not easy to implement.
      The catch-22 is that we don't know if the subject table has triggers
      or is a view before we open it, and we only open it in the
      delayed thread. We don't know if the query involves pre-locking
      until we have opened all tables, and we always first create
      the delayed thread, and only then open the remaining tables.
      This patch detects the problematic scenarios and converts
      DELAYED INSERT to a normal INSERT using the following approach:
       * if the statement is executed under pre-locking (e.g. from
         within a stored function or trigger) or the right
         side may require pre-locking, we detect the situation
         before creating a delayed insert thread and convert the statement
         to a conventional INSERT.
        * if the subject table is a view or has triggers, we shutdown
         the delayed thread and convert the statement to a conventional
         INSERT.
      
      
      mysql-test/r/insert.result:
        Update test results.
      mysql-test/t/insert.test:
        Add a test case for Bug#21483, Bug#20497, Bug#21714 (INSERT DELAYED
        and stored routines, triggers).
      sql/sp_head.cc:
        Upgrade lock type to TL_WRITE when computing the pre-locking set.
      sql/sql_base.cc:
        Use a new method.
      sql/sql_insert.cc:
        INSERT DELAYED and pre-locking:
        - if  under pre-locking, upgrade the lock type to TL_WRITE
        and proceed as a normal write
        - if DELAYED table has triggers, also request a lock upgrade.
        - make sure errors in the delayed thread are propagated
        correctly
      sql/sql_lex.h:
        Add a method to check if a parsed tree refers to stored
        routines.
      3395c53e
  2. 10 May, 2007 4 commits
  3. 08 May, 2007 4 commits
    • unknown's avatar
      Merge adventure.(none):/home/thek/Development/cpp/bug27792/my50-bug27792 · d8658088
      unknown authored
      into  adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime
      
      
      mysql-test/r/query_cache.result:
        Auto merged
      sql/mysql_priv.h:
        Auto merged
      d8658088
    • unknown's avatar
      4.1 -> 5.0 Manual merge for Bug #27792 · 2c3a4641
      unknown authored
      
      mysql-test/r/query_cache.result:
        Added 5.0 testcase
      mysql-test/t/query_cache.test:
        Added 5.0 test case
      sql/mysql_priv.h:
        Added support for div_precision_increment
      sql/set_var.cc:
        - Added query cache flush when system variable ft_boolean_syntax is
          updated since this also invalidates all cached result sets using this
          variable.
      sql/sql_cache.cc:
        - Added the local system variable div_precision_increment as an identification flag
          for cached queries.
      2c3a4641
    • unknown's avatar
      Merge adventure.(none):/home/thek/Development/cpp/bug27792/my41-bug27792 · 625c2b1d
      unknown authored
      into  adventure.(none):/home/thek/Development/cpp/bug27792/my50-bug27792
      
      
      sql/mysql_priv.h:
        Auto merged
      mysql-test/r/query_cache.result:
        Null merge
      mysql-test/t/query_cache.test:
        Null merge
      sql/set_var.cc:
        Null merge
      sql/sql_cache.cc:
        Null merge
      625c2b1d
    • unknown's avatar
      Bug #27792 query cache returns wrong result, with certain system variables · ed947499
      unknown authored
       - Queries in the query cache are identified by the individual 
         characters in the query statement, the current database and 
         the current environment expressed as a set of system variable
         flags.
       - Since the set of environment flags didn't properly describe the
         current environment unexpected results were returned from the 
         query cache.
       - Query cache is now cleared when the variable ft_boolean_syntax is 
         updated.
       - An identification flag for the variable default_week_format is 
         added to the query cache record.
       
      Thanks to Martin Friebe who has supplied significant parts of this patch.
      
      
      mysql-test/r/query_cache.result:
        Added test case
      mysql-test/t/query_cache.test:
        Added test case
      sql/mysql_priv.h:
        - Added missing flags to reflect the significant local environment
          settings of the cached query.
      sql/set_var.cc:
        - Added query cache flush when system variable ft_boolean_syntax is
          updated since this also invalidates all cached result sets using this
          variable.
      sql/sql_cache.cc:
        - Added another local system variable as an identification flag
          for cached queries.
      ed947499
  4. 07 May, 2007 2 commits
    • unknown's avatar
      Merge adventure.(none):/home/thek/Development/cpp/bug26977/my50-bug26977 · 49ff1740
      unknown authored
      into  adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime
      
      
      49ff1740
    • unknown's avatar
      Bug#26977 exception handlers never hreturn · 72569cc6
      unknown authored
        - In some cases, flow control optimization implemented in sp::optimize
          removes hreturn instructions, causing SQL exception handlers to:
            * never return
            * execute wrong logic
        - This patch overrides default short cut optimization on hreturn instructions
          to avoid this problem.
      
      
      mysql-test/r/sp-code.result:
        Added test case
      mysql-test/t/sp-code.test:
        Added test case
      sql/sp_head.cc:
        Override opt_mark to get correct execution paths without jump short cut 
        optimization.
      sql/sp_head.h:
        Added override sp_instr_hreturn::opt_shortcut_jump so that jump short cuts aren't
        performed on hreturn instructions operating on handlers which are set to CONTINUE
        after interruption.
      72569cc6
  5. 02 May, 2007 2 commits
    • unknown's avatar
      Merge weblab.(none):/home/marcsql/TREE/mysql-5.0-base · 03e76835
      unknown authored
      into  weblab.(none):/home/marcsql/TREE/mysql-5.0-rt-merge
      
      
      mysql-test/t/sp.test:
        Auto merged
      sql/item.cc:
        Auto merged
      sql/item_func.cc:
        Auto merged
      sql/mysql_priv.h:
        Auto merged
      sql/sql_lex.cc:
        Auto merged
      sql/sql_parse.cc:
        Auto merged
      03e76835
    • unknown's avatar
      Format corrections for various "Makefile.am": Leading tab, no trailing blank. · 589ae7b4
      unknown authored
      
      client/Makefile.am:
        "Makefile" command lines must start with a tab, not with blanks.
      libmysqld/Makefile.am:
        "Makefile" command lines must start with a tab, not with blanks.
      netware/Makefile.am:
        "Makefile" command lines must start with a tab, not with blanks.
      scripts/Makefile.am:
        "Makefile" command lines must start with a tab, not with blanks.
      win/Makefile.am:
        After a backslash (to mark a continuation line) there must not be a trailing blank.
      589ae7b4
  6. 01 May, 2007 2 commits
  7. 30 Apr, 2007 9 commits
    • unknown's avatar
      Merge dkatz@bk-internal.mysql.com:/home/bk/mysql-5.0-maint · 0fc282bb
      unknown authored
      into  damien-katzs-computer.local:/Users/dkatz/mysql50
      
      
      0fc282bb
    • unknown's avatar
      Merge quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50 · 2127e26d
      unknown authored
      into  quadxeon.mysql.com:/benchmarks/ext3/TOSAVE/tsmith/bk/maint/50
      
      
      2127e26d
    • unknown's avatar
      Bug #27653: Temp table can't be created if lower_case_table_names=1 and · 36dea21b
      unknown authored
                  tmpdir has uppercase
      
      Fix: don't convert mysql_tmpdir to lower case when building the path to a
      temporary table
      
      
      mysql-test/include/have_lowercase1.inc:
        BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/include/have_lowercase1.inc
      mysql-test/r/lowercase1.require:
        BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/r/lowercase1.require
      mysql-test/r/lowercase_mixed_tmpdir.result:
        BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/r/lowercase_mixed_tmpdir.result
      mysql-test/t/lowercase_mixed_tmpdir-master.opt:
        BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir-master.opt
      mysql-test/t/lowercase_mixed_tmpdir-master.sh:
        BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir-master.sh
      mysql-test/t/lowercase_mixed_tmpdir.test:
        BitKeeper file /benchmarks/ext3/TOSAVE/tsmith/bk/maint/b27653/50/mysql-test/t/lowercase_mixed_tmpdir.test
      sql/sql_table.cc:
        When building the path for a temporary table file, do not
        convert mysql_tmpdir to lower case; lower_case_table_names
        should not apply to mysql_tmpdir.
      36dea21b
    • unknown's avatar
      Merge damien-katzs-computer.local:/Users/dkatz/mysql50 · 930912f8
      unknown authored
      into  damien-katzs-computer.local:/Users/dkatz/50_frm_files
      
      
      930912f8
    • unknown's avatar
      Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-maint · 0f6f3aa0
      unknown authored
      into  maint1.mysql.com:/data/localhome/tnurnberg/50-27293
      
      
      0f6f3aa0
    • unknown's avatar
      Bug#27293: mysqldump crashes when dumping procedure defined by different user · 3f18c6bc
      unknown authored
      mysqldump didn't properly handle getting no data on
      SHOW CREATE PROCEDURE.  If S/C/P fails (due to dumping
      user's insufficient privileges on mysql.proc, say),
      mysqldump will print a comment to that effect to the
      output and return an error-code.  If the -f (force) option
      is used, the dump will continue, otherwise, it will abort
      right there and then.
      
      Also fixes Bug#22761, "mysqldump reports no errors when using
      --routines without mysql.proc privileges"
      ---
      Merge tnurnberg@bk-internal.mysql.com:/home/bk/mysql-5.0-maint
      into  mysql.com:/home/tnurnberg/27293/50-27293
      
      
      client/mysqldump.c:
        Bug#27293: mysqldump crashes when dumping procedure defined by different user
        
        handle failure of SHOW CREATE PROCEDURE, give user diagnostics,
        heed -f (force) option
      mysql-test/r/mysqldump.result:
        Bug#27293: mysqldump crashes when dumping procedure defined by different user
        
        show that trying to mysqldump --routines with insufficient
        privileges will no longer crash the client
        ---
        manual merge
      mysql-test/t/mysqldump.test:
        Bug#27293: mysqldump crashes when dumping procedure defined by different user
        
        show that trying to mysqldump --routines with insufficient
        privileges will no longer crash the client
        ---
        manual merge
      3f18c6bc
    • unknown's avatar
      Post-merge fix. · 5352b41d
      unknown authored
      5352b41d
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-4.1-opt · 532f2e84
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug24856
      
      
      sql/item_func.h:
        Auto merged
      sql/sql_select.cc:
        Auto merged
      mysql-test/r/olap.result:
        Manual merge.
      mysql-test/t/olap.test:
        Manual merge.
      532f2e84
    • unknown's avatar
      Fix in comments. · c004ad09
      unknown authored
      c004ad09
  8. 29 Apr, 2007 14 commits
    • unknown's avatar
      Fixed bug #24856: the result set of a ROLLUP query with DISTINCT could lack · dd34042e
      unknown authored
      some rollup rows (rows with NULLs for grouping attributes) if GROUP BY
      list contained constant expressions.
      
      This happened because the results of constant expressions were not put
      in the temporary table used for duplicate elimination. In fact a constant
      item from the GROUP BY list of a ROLLUP query can be replaced for an
      Item_null_result object when a rollup row is produced . 
      
      Now the JOIN::rollup_init function wraps any constant item referenced in
      the GROYP BY list of a ROLLUP query into an Item_func object of a special
      class that is never detected as constant item. This ensures creation of
      fields for such  constant items in temporary tables and guarantees right
      results when the result of the rollup operation first has to be written
      into a temporary table, e.g. in the cases when duplicate elimination is
      required.  
      
      
      mysql-test/r/olap.result:
        Added a test case for bug #24856.
      mysql-test/t/olap.test:
        Added a test case for bug #24856.
      sql/item_func.h:
        Fixed bug #24856: the result set of a ROLLUP query with DISTINCT could lack
        some rollup rows (rows with NULLs for grouping attributes) if GROUP BY
        list contained constant expressions.
        
        Itroduced class Item_func_rollup_const derived from Item_func. The object of
        this class are never detected as constant items.
        We use them for wrapping constant items from the GROUP BY list of any ROLLUP
        query. This wrapping allows us to ensure writing constant items into temporary
        tables whenever the result of the ROLLUP operation has to be written into a
        temporary table, e.g. when ROLLUP is used together with DISTINCT in the SELECT
        list.
      sql/sql_select.cc:
        Fixed bug #24856: the result set of a ROLLUP query with DISTINCT could lack
        some rollup rows (rows with NULLs for grouping attributes) if GROUP BY
        list contained constant expressions.
        
        Now the JOIN::rollup_init function wraps any constant item referenced in
        the GROYP BY list of a ROLLUP query into an Item_func object of a special
        class that is never detected as constant item. This ensures creation of
        fields for such  constant items in temporary tables and guarantees right
        results when the result of the rollup operation first has to be written
        into a temporary table, e.g. in the cases when duplicate elimination is
        required.
      dd34042e
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · ba967f5b
      unknown authored
      into  moonbone.local:/mnt/gentoo64/work/16377-bug-5.0-opt-mysql
      
      
      ba967f5b
    • unknown's avatar
      type_datetime.result, type_datetime.test: · d4b1b813
      unknown authored
        The test case for the bug#27590 is altered.
      
      
      mysql-test/t/type_datetime.test:
        The test case for the bug#27590 is altered.
      mysql-test/r/type_datetime.result:
        The test case for the bug#27590 is altered.
      d4b1b813
    • unknown's avatar
      Merge mysql.com:/d2/hf/mrg/mysql-4.1-opt · ad429913
      unknown authored
      into  mysql.com:/d2/hf/mrg/mysql-5.0-opt
      
      
      ad429913
    • unknown's avatar
      Merge bk@192.168.21.1:mysql-5.0 · d812bcb9
      unknown authored
      into  mysql.com:/d2/hf/mrg/mysql-5.0-opt
      
      
      CMakeLists.txt:
        Auto merged
      sql/ha_innodb.cc:
        Auto merged
      sql/item_cmpfunc.cc:
        Auto merged
      tests/mysql_client_test.c:
        Auto merged
      mysql-test/r/innodb_mysql.result:
        merging
      mysql-test/t/innodb_mysql.test:
        merging
      d812bcb9
    • unknown's avatar
      Merge bk@192.168.21.1:mysql-4.1 · 0cd6377f
      unknown authored
      into  mysql.com:/d2/hf/mrg/mysql-4.1-opt
      
      
      0cd6377f
    • unknown's avatar
      If isinf() is not available on a target platform, use our own imlementation... · b42eb01e
      unknown authored
      If isinf() is not available on a target platform, use our own imlementation via finite() and isnan(). If either of the last two is not available as well, use simple replacements which are platform-neutral, but slower than compiler intrinsics.
      
      
      
      b42eb01e
    • unknown's avatar
    • unknown's avatar
      Merge gshchepa.loc:/home/uchum/work/bk-trees/mysql-4.1-opt · a925eadc
      unknown authored
      into  gshchepa.loc:/home/uchum/work/bk-trees/mysql-5.0-opt-13191
      
      
      sql/key.cc:
        Patch to eliminate compilation errors under VC after bug #13191 fix.
      a925eadc
    • unknown's avatar
    • unknown's avatar
      Merge gshchepa.loc:/home/uchum/work/bk-trees/mysql-4.1-opt · edfa3dcf
      unknown authored
      into  gshchepa.loc:/home/uchum/work/bk-trees/mysql-5.0-opt-13191
      
      
      mysql-test/r/innodb_mysql.result:
        SCCS merged
      mysql-test/t/innodb_mysql.test:
        SCCS merged
      sql/field.cc:
        Merge with 4.1, fix of bug #13191.
      sql/field.h:
        Merge with 4.1, fix of bug #13191.
      sql/key.cc:
        Merge with 4.1, fix of bug #13191.
      edfa3dcf
    • unknown's avatar
      Merge gshchepa.loc:/home/uchum/work/bk-trees/mysql-4.1-opt · 25033826
      unknown authored
      into  gshchepa.loc:/home/uchum/work/bk-trees/mysql-4.1-opt-13191
      
      
      25033826
    • unknown's avatar
      Merge gshchepa.loc:/home/uchum/work/bk-trees/mysql-4.1-opt · cecc0495
      unknown authored
      into  gshchepa.loc:/home/uchum/work/bk-trees/mysql-5.0-opt
      
      
      cecc0495
    • unknown's avatar
      Adjusted results after the fix for bug #20710. · 3f169678
      unknown authored
      3f169678
  9. 28 Apr, 2007 2 commits
    • unknown's avatar
      Fixed bug #13191. · 98c0da4e
      unknown authored
      INSERT...ON DUPLICATE KEY UPDATE may cause error 1032: 
      "Can't find record in ..." if we are inserting into
      InnoDB table unique index of partial key with
      underlying UTF-8 string field.
      
      This error occurs because INSERT...ON DUPLICATE uses a wrong
      procedure to copy string fields of multi-byte character sets
      for index search.
      
      
      mysql-test/t/innodb_mysql.test:
        Added test case for bug #13191.
      mysql-test/r/innodb_mysql.result:
        Added test case for bug #13191.
      sql/field.h:
        Fixed bug #13191.
        Field_string::get_key_image() virtual function was overloaded
        to implement copying of variable length character (UTF-8) fields.
        Field::get_key_image() function prototype has been changed to
        return byte size of copied data.
      sql/field.cc:
        Fixed bug #13191.
        Field_string::get_key_image() virtual function was overloaded
        to implement copying of variable length character (UTF-8) fields.
        Field::get_key_image() function prototype has been changed to
        return byte size of copied data.
      sql/key.cc:
        Fixed bug #13191.
        INSERT...ON DUPLICATE KEY UPDATE may cause error 1032: 
        "Can't find record in ...".
        This error occurs because INSERT...ON DUPLICATE uses
        a wrong procedure to copy field parts for index search.
        key_copy() function has been fixed.
      98c0da4e
    • unknown's avatar
      Merge gshchepa.loc:/home/uchum/work/bk-trees/mysql-4.1-opt · fd14779b
      unknown authored
      into  gshchepa.loc:/home/uchum/work/bk-trees/mysql-5.0-opt
      
      
      fd14779b