1. 22 Aug, 2007 2 commits
    • unknown's avatar
      Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.0-runtime · d4e34c80
      unknown authored
      into  weblab.(none):/home/marcsql/TREE/mysql-5.0-30237
      
      
      sql/sql_yacc.yy:
        Auto merged
      d4e34c80
    • unknown's avatar
      Bug#30237 (Performance regression in boolean expressions) · fb1be0f1
      unknown authored
      This is a performance bug, related to the parsing or 'OR' and 'AND' boolean
      expressions.
      
      Let N be the number of expressions involved in a OR (respectively AND).
      
      When N=1
      
      For example, "select 1" involve only 1 term: there is no OR operator.
      
      In 4.0 and 4.1, parsing expressions not involving OR had no overhead.
      In 5.0, parsing adds some overhead, with Select->expr_list.
      
      With this patch, the overhead introduced in 5.0 has been removed,
      so that performances for N=1 should be identical to the 4.0 performances,
      which are optimal (there is no code executed at all)
      
      The overhead in 5.0 was in fact affecting significantly some operations.
      For example, loading 1 Million rows into a table with INSERTs,
      for a table that has 100 columns, leads to parsing 100 Millions of
      expressions, which means that the overhead related to Select->expr_list
      is executed 100 Million times ...
      
      Considering that N=1 is by far the most probable expression,
      this case should be optimal.
      
      When N=2
      
      For example, "select a OR b" involves 2 terms in the OR operator.
      
      In 4.0 and 4.1, parsing expressions involving 2 terms created 1 Item_cond_or
      node, which is the expected result.
      In 5.0, parsing these expression also produced 1 node, but with some extra
      overhead related to Select->expr_list : creating 1 list in Select->expr_list
      and another in Item_cond::list is inefficient.
      
      With this patch, the overhead introduced in 5.0 has been removed
      so that performances for N=2 should be identical to the 4.0 performances.
      Note that the memory allocation uses the new (thd->mem_root) syntax
      directly.
      The cost of "is_cond_or" is estimated to be neglectable: the real problem
      of the performance degradation comes from unneeded memory allocations.
      
      When N>=3
      
      For example, "select a OR b OR c ...", which involves 3 or more terms.
      
      In 4.0 and 4.1, the parser had no significant cost overhead, but produced
      an Item tree which is difficult to evaluate / optimize during runtime.
      In 5.0, the parser produces a better Item tree, using the Item_cond
      constructor that accepts a list of children directly, but at an extra cost
      related to Select->expr_list.
      
      With this patch, the code is implemented to take the best of the two
      implementations:
      - there is no overhead with Select->expr_list
      - the Item tree generated is optimized and flattened.
      
      This is achieved by adding children nodes into the Item tree directly,
      with Item_cond::add(), which avoids the need for temporary lists and memory
      allocation
      
      Note that this patch also provide an extra optimization, that the previous
      code in 5.0 did not provide: expressions are flattened in the Item tree,
      based on what the expression already parsed is, and not based on the order
      in which rules are reduced.
      
      For example : "(a OR b) OR c", "a OR (b OR c)" would both be represented
      with 2 Item_cond_or nodes before this patch, and with 1 node only with this
      patch. The logic used is based on the mathematical properties of the OR
      operator (it's associative), and produces a simpler tree.
      
      
      sql/item_cmpfunc.h:
        Improved performances for parsing boolean expressions
      sql/sql_yacc.yy:
        Improved performances for parsing boolean expressions
      mysql-test/r/parser_precedence.result:
        Added test cases to cover boolean operator precedence
      mysql-test/t/parser_precedence.test:
        Added test cases to cover boolean operator precedence
      fb1be0f1
  2. 21 Aug, 2007 2 commits
    • unknown's avatar
      Merge adventure.(none):/home/thek/Development/cpp/bug30269/my50-bug30269 · abc02d7e
      unknown authored
      into  adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime
      
      
      mysql-test/r/query_cache.result:
        Auto merged
      mysql-test/t/query_cache.test:
        Auto merged
      abc02d7e
    • unknown's avatar
      Bug#30269 Query cache eats memory · 3a5a0ea3
      unknown authored
      Although the query cache doesn't support retrieval of statements containing
      column level access control, it was still possible to cache such statements
      thus wasting memory.
        
      This patch extends the access control check on the target tables to avoid
      caching a statement with column level restrictions. 
      
      Views are excepted and can be cached but only retrieved by super user account.
      
      
      mysql-test/t/query_cache_with_views.test:
        Rename: mysql-test/t/view_query_cache.test -> mysql-test/t/query_cache_with_views.test
      mysql-test/r/query_cache_with_views.result:
        Rename: mysql-test/r/view_query_cache.result -> mysql-test/r/query_cache_with_views.result
      mysql-test/r/query_cache.result:
        Modified test case to allow caching of views
      mysql-test/t/query_cache.test:
        Modified test case to allow caching of views
      sql/sql_cache.cc:
        Allow caching of views
      3a5a0ea3
  3. 20 Aug, 2007 1 commit
  4. 18 Aug, 2007 1 commit
  5. 17 Aug, 2007 2 commits
    • unknown's avatar
      Merge adventure.(none):/home/thek/Development/cpp/bug30269/my50-bug30269 · 3ff26995
      unknown authored
      into  adventure.(none):/home/thek/Development/cpp/mysql-5.0-runtime
      
      
      mysql-test/r/query_cache.result:
        Auto merged
      mysql-test/t/query_cache.test:
        Auto merged
      3ff26995
    • unknown's avatar
      Bug #30269 Query cache eats memory · bd80048f
      unknown authored
      Although the query cache doesn't support retrieval of statements containing
      column level access control, it was still possible to cache such statements
      thus wasting memory.
      
      This patch extends the access control check on the target tables to avoid
      caching a statement with column level restrictions. 
      
      
      mysql-test/r/query_cache.result:
        Added test
      mysql-test/t/query_cache.test:
        Added test
      sql/sql_cache.cc:
        The function check_table_access leaves the artifact
        grant.want_privileges= 1, if a statement refers to tables with column level
        privileges. To avoid the statement from being stored into the query cache,
        it is enough to check this flag and set 'safe_to_cache_query' to zero.
      sql/sql_cache.h:
        - Removed 'static' attribute or class methods
        - Added THD parameter to process_and_count_tables
      bd80048f
  6. 16 Aug, 2007 2 commits
  7. 15 Aug, 2007 7 commits
    • unknown's avatar
      NULL MERGE this ChangeSet to 5.1 · 05dd9e49
      unknown authored
      Apply innodb-5.0-ss1696 snapshot
      
      Fixes:
      - Bug#20090: InnoDB: Error: trying to declare trx to enter InnoDB
      - Bug#23710: crash_commit_before fails if innodb_file_per_table=1
        At InnoDB startup consider the case where log scan went beyond
        checkpoint_lsn as a crash and initiate crash recovery code path.
      - Bug#28781: InnoDB increments auto-increment value incorrectly with ON DUPLICATE KEY UPDATE
        We need to do some special AUTOINC handling for the following case:
        INSERT INTO t (c1,c2) VALUES(x,y) ON DUPLICATE KEY UPDATE ...
        We need to use the AUTOINC counter that was actually used by
        MySQL in the UPDATE statement, which can be different from the
        value used in the INSERT statement.
      - Bug#29097: fsp_get_available_space_in_free_extents() is capped at 4TB
        Fix by typecasting the variables before multiplying them, so that the
        result of the multiplication is of type "unsigned long long".
      - Bug#29155: Innodb "Parallel recovery" is not prevented
        Fix by enabling file locking on FreeBSD.  It has been disabled because
        InnoDB has refused to start on FreeBSD & LinuxThreads, but now it
        starts just fine.
      
      
      innobase/fsp/fsp0fsp.c:
        Apply innodb-5.0-ss1696 snapshot
        
        Revision r1614:
        branches/5.0:
        
        Merge r1605 from trunk:
        
        Fix Bug#29097 "fsp_get_available_space_in_free_extents() is capped at 4TB"
        by typecasting the variables before multiplying them, so that the result of
        the multiplication is of type "unsigned long long".
        
        I verified this fix by creating a sparse file of 6TB and forcing InnoDB to
        use it without overwriting it with zeroes (by commenting the code that
        overwrites :newraw files).
        
        New type ullint is introduced with the sole purpose of shortening
        "unsigned long long", please do not define it to something else than
        "unsigned long long".
        
        Approved by:	Heikki
      innobase/include/fsp0fsp.h:
        Apply innodb-5.0-ss1696 snapshot
        
        Revision r1614:
        branches/5.0:
        
        Merge r1605 from trunk:
        
        Fix Bug#29097 "fsp_get_available_space_in_free_extents() is capped at 4TB"
        by typecasting the variables before multiplying them, so that the result of
        the multiplication is of type "unsigned long long".
        
        I verified this fix by creating a sparse file of 6TB and forcing InnoDB to
        use it without overwriting it with zeroes (by commenting the code that
        overwrites :newraw files).
        
        New type ullint is introduced with the sole purpose of shortening
        "unsigned long long", please do not define it to something else than
        "unsigned long long".
        
        Approved by:	Heikki
      innobase/include/univ.i:
        Apply innodb-5.0-ss1696 snapshot
        
        Revision r1614:
        branches/5.0:
        
        Merge r1605 from trunk:
        
        Fix Bug#29097 "fsp_get_available_space_in_free_extents() is capped at 4TB"
        by typecasting the variables before multiplying them, so that the result of
        the multiplication is of type "unsigned long long".
        
        I verified this fix by creating a sparse file of 6TB and forcing InnoDB to
        use it without overwriting it with zeroes (by commenting the code that
        overwrites :newraw files).
        
        New type ullint is introduced with the sole purpose of shortening
        "unsigned long long", please do not define it to something else than
        "unsigned long long".
        
        Approved by:	Heikki
      innobase/log/log0recv.c:
        Apply innodb-5.0-ss1696 snapshot
        
        Revision r1608:
        branches/5.0: Bug#23710
        Back port of r1607 from trunk
        
        At InnoDB startup consider the case where log scan went beyond checkpoint_lsn as a crash and initiate crash recovery code path.
        
        reviewed by: Heikki
      innobase/os/os0file.c:
        Apply innodb-5.0-ss1696 snapshot
        
        Revision r1615:
        branches/5.0:
        
        Merge r1613 from trunk:
        
        Fix Bug#29155 by enabling file locking on FreeBSD.
        It has been disabled because InnoDB has refused to start on
        FreeBSD & LinuxThreads, but now it starts just fine.
        
        Approved by:	Heikki
      innobase/srv/srv0srv.c:
        Apply innodb-5.0-ss1696 snapshot
        
        Revision r1552:
        branches/5.0:
        Fix Bug#20090 as suggested in the bug followup by Heikki.
        
        Approved by:	Heikki
      innobase/trx/trx0trx.c:
        Apply innodb-5.0-ss1696 snapshot
        
        Revision r1596:
        branches/5.0: Merge r1595 from trunk:
        
        trx_commit_for_mysql(): Avoid acquiring and releasing kernel_mutex when
        trx->sess or trx_dummy_sess is non-NULL.
      sql/ha_innodb.cc:
        Apply innodb-5.0-ss1696 snapshot
        
        Revision r1614:
        branches/5.0:
        
        Merge r1605 from trunk:
        
        Fix Bug#29097 "fsp_get_available_space_in_free_extents() is capped at 4TB"
        by typecasting the variables before multiplying them, so that the result of
        the multiplication is of type "unsigned long long".
        
        I verified this fix by creating a sparse file of 6TB and forcing InnoDB to
        use it without overwriting it with zeroes (by commenting the code that
        overwrites :newraw files).
        
        New type ullint is introduced with the sole purpose of shortening
        "unsigned long long", please do not define it to something else than
        "unsigned long long".
        
        Approved by:	Heikki
        
        
        Revision r1695:
        branches/5.0: Merge a change from MySQL AB:
        
        ChangeSet@1.2463.166.1  2007-06-20 19:22:27+03:00  monty@mysql.fi
        
        Allow multiple calls to mysql_server_end()
        (Part of fix for Bug 25621 Error in my_thread_global_end(): 1 threads
        didn't exit)
        Give correct error message if InnoDB table is not found
        (This allows us to drop a an innodb table that is not in the InnoDB registery)
        
        ha_innodb.cc:
          Give correct error message if InnoDB table is not found.
          (This allows us to drop a an innodb table that is not in the InnoDB
          registery)
        
        
        Revision r1606:
        branches/5.0: Formatting corrections.
        
        spotted by: Vasil
        
        
        Revision r1691:
        branches/5.0: Merge a change from MySQL AB:
        
        ChangeSet@1.2463.261.1  2007-07-20 14:17:15+03:00  gkodinov@magare.gmz
          Bug 29644: alter table hangs if records locked in share mode 
          by long running transaction
          
          On Windows opened files can't be deleted. There was a special
          upgraded lock mode (TL_WRITE instead of TL_WRITE_ALLOW_READ) 
          in ALTER TABLE to make sure nobody has the table opened
          when deleting the old table in ALTER TABLE. This special mode
          was causing ALTER TABLE to hang waiting on a lock inside InnoDB.
          This special lock is no longer necessary as the server is 
          closing the tables it needs to delete in ALTER TABLE.
          Fixed by removing the special lock.
          Note that this also reverses the fix for bug 17264 that deals with
          another consequence of this special lock mode being used.
        
        sql/ha_innodb.cc: Bug 29644: reverse the (now excessive) fix
        for bug 17264 (but leave the test case).
        
        
        Revision r1601:
        branches/5.0: Fix for bug#28781
        We need to do some special AUTOINC handling for the following case:
        
        INSERT INTO t (c1,c2) VALUES(x,y) ON DUPLICATE KEY UPDATE ...
        
        We need to use the AUTOINC counter that was actually used by
        MySQL in the UPDATE statement, which can be different from the
        value used in the INSERT statement.
        
        approved by: Sunny
        
        
        Revision r1692:
        branches/5.0: Merge a change from MySQL AB:
        
        ChangeSet@1.2463.267.1  2007-07-30 17:14:34+04:00  evgen@local
          Bug 24989: The DEADLOCK error is improperly handled by InnoDB.
          
          When innodb detects a deadlock it calls ha_rollback_trans() to rollback the 
          main transaction. But such action isn't allowed from inside of triggers and
          functions. When it happen the 'Explicit or implicit commit' error is thrown
          even if there is no commit/rollback statements in the trigger/function. This
          leads to the user confusion.
          
          Now the convert_error_code_to_mysql() function doesn't call the 
          ha_rollback_trans() function directly but rather calls the
          mark_transaction_to_rollback function and returns an error.
          The sp_rcontext::find_handler() now doesn't allow errors to be caught by the
          trigger/function error handlers when the thd->is_fatal_sub_stmt_error flag
          is set. Procedures are still allowed to catch such errors.
          The sp_rcontext::find_handler function now accepts a THD handle as a parameter.
          The transaction_rollback_request and the is_fatal_sub_stmt_error flags are 
          added to the THD class. The are initialized by the THD class constructor.
          Now the ha_autocommit_or_rollback function rolls back main transaction
          when not in a sub statement and the thd->transaction_rollback_request
          is set.
          The THD::restore_sub_statement_state function now resets the 
          thd->is_fatal_sub_stmt_error flag on exit from a sub-statement.
        
        innodb-big.test, innodb-big.result:
          Added a test case for the bug 24989: The DEADLOCK error is improperly
          handled by InnoDB.
        
        sql/ha_innodb.cc:
          Bug 24989: The DEADLOCK error is improperly handled by InnoDB.
          Now the convert_error_code_to_mysql() function doesn't call the
          ha_rollback_trans() function directly but rather calls the
          mark_transaction_to_rollback function and returns an error.
        
        
        Revision r1693:
        branches/5.0: Merge a change from MySQL AB:
        
        ChangeSet@1.2489.5.1  2007-07-31 17:42:48+04:00  evgen@local
          ha_innodb.cc:
            Warning fixed.
      05dd9e49
    • unknown's avatar
      Merge ramayana.hindu.god:/home/tsmith/m/bk/50 · 0739c70e
      unknown authored
      into  ramayana.hindu.god:/home/tsmith/m/bk/maint/50
      
      
      0739c70e
    • unknown's avatar
      Rework doxygen documentation for the function mysql_ha_close_table. · a0ed0ea1
      unknown authored
      
      sql/sql_handler.cc:
        Add missing parameter to the @param tag and fix style.
      a0ed0ea1
    • unknown's avatar
      Merge mysql.com:/nfsdisk1/lars/MERGE/mysql-4.1-merge · 8c5bb9da
      unknown authored
      into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
      
      
      8c5bb9da
    • unknown's avatar
      Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-5.0-rpl · c6f10a56
      unknown authored
      into  mysql.com:/nfsdisk1/lars/MERGE/mysql-5.0-merge
      
      
      c6f10a56
    • unknown's avatar
      Merge mysql.com:/nfsdisk1/lars/bkroot/mysql-4.1-rpl · 7a7674c8
      unknown authored
      into  mysql.com:/nfsdisk1/lars/MERGE/mysql-4.1-merge
      
      
      7a7674c8
    • unknown's avatar
      Bug#25856 (HANDLER table OPEN in one connection lock DROP TABLE in another one) · 9c1ffac0
      unknown authored
      mysql_ha_open calls mysql_ha_close on the error path (unsupported) to close the (opened) table before inserting it into the tables hash list handler_tables_hash) but mysql_ha_close only closes tables which are on the hash list, causing the table to be left open and locked.
      
      This change moves the table close logic into a separate function that is always called on the error path of mysql_ha_open or on a normal handler close (mysql_ha_close).
      
      
      mysql-test/r/handler.result:
        Bug#25856 test result
      mysql-test/t/handler.test:
        Bug#25856 test case
      sql/sql_handler.cc:
        Move the table close logic into a separate function that is always called on the error path of mysql_ha_open or on a normal handler close
      9c1ffac0
  8. 14 Aug, 2007 1 commit
  9. 13 Aug, 2007 4 commits
  10. 10 Aug, 2007 1 commit
  11. 08 Aug, 2007 1 commit
  12. 07 Aug, 2007 4 commits
    • unknown's avatar
      Reversing additional change suggested by Serg · c6e88899
      unknown authored
      under terms of bug#28875 for better performance.
      The change appeared to require more changes in item_cmpfunc.cc,
      which is dangerous in 5.0.
          
      Conversion between a latin1 column and an ascii string constant
      stopped to work.
      
      
      mysql-test/r/ctype_recoding.result:
        Adding test case.
      mysql-test/t/ctype_recoding.test:
        Adding test case.
      c6e88899
    • unknown's avatar
      Merge bk-internal.mysql.com:/home/bk/mysql-5.0-maint · db73e34f
      unknown authored
      into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint
      
      
      strings/ctype-extra.c:
        Auto merged
      db73e34f
    • unknown's avatar
      Merge zippy.cornsilk.net:/home/cmiller/work/mysql/bug27562/my50-bug27562 · 81536446
      unknown authored
      into  zippy.cornsilk.net:/home/cmiller/work/mysql/mysql-5.0-maint
      
      
      81536446
    • unknown's avatar
      Bug#27562: ascii.xml invalid? · cfd34fe2
      unknown authored
      Two character mappings were way off (backtick and tilde were "E"
      and "Y"!), and three others were slightly rotated.  The first 
      would cause collisions, and the latter was probably benign.
      
      Now, assign the character mappings exactly to their normal values.
      
      
      sql/share/charsets/ascii.xml:
        Change the character mapping for 
         "`" to "`" (was "E") and 
         "[" to "[" (was "\") and 
         "\" to "\" (was "]") and
         "]" to "]" (was "[") and 
         "~" to "~" (was "Y").
      strings/ctype-extra.c:
        Generated from charsets directory.
      mysql-test/r/ctype_ascii.result:
        Add new test file.
        
        Test all combinations of printable letter comparisons for 
        similarity.
      mysql-test/t/ctype_ascii.test:
        Add new test file.
        
        Test all combinations of printable letter comparisons for 
        similarity.
      cfd34fe2
  13. 06 Aug, 2007 8 commits
  14. 05 Aug, 2007 4 commits
    • unknown's avatar
      mysql-test-run.pl: · 57e225bb
      unknown authored
        Search "relwithdebinfo" directory in CMake Visual Studio build
        Search for "mysqld-debug" even in source tree
      
      
      mysql-test/mysql-test-run.pl:
        Search "relwithdebinfo" directory in CMake Visual Studio build
        Search for "mysqld-debug" even in source tree
      57e225bb
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-5.0-opt · e106b09a
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug30219
      
      
      e106b09a
    • unknown's avatar
      Fix bug #30219. · 4e6e1220
      unknown authored
      This bug manifested itself for queries with grouping by columns of
      the BIT type. It led to wrong comparisons of bit-field values and
      wrong result sets.
      Bit-field values never cannot be compared as binary values. Yet
      the class Field_bit had an implementation of the cmp method that
      compared bit-fields values as binary values. 
      Also the get_image and set_image methods of the base class Field 
      cannot be used for objects of the Field_bit class. 
      Now these methods are declared as virtual and specific implementations
      of the methods are provided for the class Field_bit.
      
      
      mysql-test/r/type_bit.result:
        Added a test case for bug #30219.
      mysql-test/t/type_bit.test:
        Added a test case for bug #30219.
      sql/field.h:
        Fix bug #30219.
        This bug manifested itself for queries with grouping by columns of
        the BIT type. It led to wrong comparisons of bit-field values and
        wrong result sets.
        Bit-field values never cannot be compared as binary values. Yet
        the class Field_bit had an implementation of the cmp method that
        compared bit-fields values as binary values.
        Also the get_image and set_image methods of the base class Field
        cannot be used for objects of the Field_bit class. 
        Now these methods are declared as virtual and specific implementations
        of these methods are provided for the class Field_bit.
      4e6e1220
    • unknown's avatar
      Merge pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-4.1-build · 308c6448
      unknown authored
      into  pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.0-build
      
      
      308c6448