1. 20 Mar, 2007 1 commit
    • unknown's avatar
      Bug #24484: · b8912903
      unknown authored
      To correctly decide which predicates can be evaluated with a given table
      the optimizer must know the exact set of tables that a predicate depends 
      on. If that mask is too wide (refer to non-existing tables) the optimizer
      can erroneously skip a predicate.
      One such case of wrong table usage mask were the aggregate functions.
      The have a all-1 mask (meaning depend on all tables, including non-existent
      ones).
      Fixed by making a real used_tables mask for the aggregates. The mask is
      constructed in the following way :
      1. OR the table dependency masks of all the arguments of the aggregate.
      2. If all the arguments of the function are from the local name resolution 
        context and it is evaluated in the same name resolution
        context where it is referenced all the tables from that name resolution 
        context are OR-ed to the dependency mask. This is to denote that an
        aggregate function depends on the number of rows it processes.
      3. Handle correctly the case of an aggregate function optimization (such that
        the aggregate function can be pre-calculated and made a constant).
      
      Made sure that an aggregate function is never a constant (unless subject of a 
      specific optimization and pre-calculation).  
      
      One other flaw was revealed and fixed in the process : references were 
      not calling the recalculation method for used_tables of their targets.
      
      
      mysql-test/r/subselect3.result:
        Bug #24484: test case
      mysql-test/t/subselect3.test:
        Bug #24484: test case
      sql/item.h:
        Bug #24484: Item_ref must update the used tables.
      sql/item_sum.cc:
        Bug #24484: correct calculation of used_tables for aggregates.
      sql/item_sum.h:
        Bug #24484: correct calculation of used_tables for aggregates.
      sql/opt_range.cc:
        Bug #24484: fixed ref resolution in loose index scan
      sql/sql_base.cc:
        Bug #24484: moved counting of leaf tables inside 
        setup_tables_and_check_access.
      sql/sql_class.h:
        Bug #24484: changed table count to more narrow type.
      sql/sql_insert.cc:
        Bug #24484: moved counting of leaf tables inside 
        setup_tables_and_check_access. Substract the first
        table (and its subtables) of an INSERT statement
        from leaf_count.
      sql/sql_select.cc:
        Bug #24484: correct check for aggregates
      b8912903
  2. 01 Feb, 2007 6 commits
    • unknown's avatar
      Bug#23299 Some queries against INFORMATION_SCHEMA with subqueries fail · 4e8d7ac4
      unknown authored
      additional call of file->extra() method with HA_EXTRA_NO_CACHE parameter
      
      
      mysql-test/r/information_schema.result:
        test result
      mysql-test/t/information_schema.test:
        test case
      sql/sql_show.cc:
        additional call of file->extra() method with HA_EXTRA_NO_CACHE parameter
      4e8d7ac4
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 568dda14
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B23556-5.0-opt
      
      568dda14
    • unknown's avatar
      trigger.result: · c63f242a
      unknown authored
        merge of the 5.0-opt tree
      
      
      mysql-test/r/trigger.result:
        merge of the 5.0-opt tree
      c63f242a
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · c2f35d03
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B23556-5.0-opt
      
      
      mysql-test/t/trigger.test:
        Auto merged
      sql/sql_delete.cc:
        Auto merged
      c2f35d03
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · f6eddc01
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B25551-5.0-opt
      
      
      sql/sql_select.cc:
        Auto merged
      f6eddc01
    • unknown's avatar
      Fixed bug #25407. · 77890fe1
      unknown authored
      The bug could cause choosing a sub-optimal execution plan for 
      a single-table query if a unique index with many null keys were 
      defined for the table. 
      It happened because the code of the check_quick_keys function 
      made an assumption that any key may occur in an unique index 
      only once. Yet this is not true for keys with nulls that may 
      have multiple occurrences in the index.
      
      
      mysql-test/r/null_key.result:
        Fixed bug #25407
        Adjusted result after the fix.
      mysql-test/r/select.result:
        Added a test case for bug #25407.
      mysql-test/t/select.test:
        Added a test case for bug #25407.
      77890fe1
  3. 31 Jan, 2007 6 commits
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 240e24a7
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-5.0-opt
      
      240e24a7
    • unknown's avatar
      Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · c80a6b9e
      unknown authored
      into  mysql.com:/home/hf/work/25973/my50-25973
      
      c80a6b9e
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 756d67c0
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B25575-5.0-opt
      
      
      sql/mysql_priv.h:
        Auto merged
      sql/sql_lex.h:
        Auto merged
      sql/sql_parse.cc:
        Auto merged
      sql/sql_yacc.yy:
        Auto merged
      sql/table.cc:
        Auto merged
      756d67c0
    • unknown's avatar
      BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join · c2ff0cc4
      unknown authored
       Two problems here:
      
       Problem 1:
      
       While constructing the join columns list the optimizer does as follows:
        1. Sets the join_using_fields/natural_join members of the right JOIN 
         operand.
        2. Makes a "table reference" (TABLE_LIST) to parent the two tables.
        3. Assigns the join_using_fields/is_natural_join of the wrapper table
         using join_using_fields/natural_join of the rightmost table
        4. Sets join_using_fields to NULL for the right JOIN operand.
        5. Passes the parent table up to the same procedure on the upper 
         level.
      
       Step 1 overrides the the join_using_fields that are set for a nested 
       join wrapping table in step 4.
       Fixed by making a designated variable SELECT_LEX::prev_join_using to 
       pass the data from step 1 to step 4 without destroying the wrapping 
       table data.
      
       Problem 2:
      
       The optimizer checks for ambiguous columns while transforming 
       NATURAL JOIN/JOIN USING to JOIN ON. While doing that there was no
       distinction between columns that are used in the generated join
       condition (where ambiguity can be checked) and the other columns
       (where ambiguity can be checked only when resolving references
       coming from outside the JOIN construct itself).
       Fixed by allowing the non-USING columns to be present in multiple 
       copies in both sides of the join and moving the ambiguity check 
       to the place where unqualified references to the join columns are
       resolved (find_field_in_natural_join()).
      
      
      mysql-test/r/join_nested.result:
        BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
         - test case
      mysql-test/t/join_nested.test:
        BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
         - test case
      sql/mysql_priv.h:
        BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
         - use SELECT_LEX to store the ref to JOIN USING list needed by the 
           parser
      sql/sql_base.cc:
        BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
         - proper check for duplicate cols
         - more detailed debug output
      sql/sql_lex.h:
        BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
         - use SELECT_LEX to store the ref to JOIN USING list needed by the 
           parser
      sql/sql_parse.cc:
        BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
         - proper check for duplicate cols in JOIN USING
      sql/sql_yacc.yy:
        BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
         - use SELECT_LEX to store the ref to JOIN USING list needed by the 
           parser
      sql/table.cc:
        BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join
         - return null if no table ref (as in nested join columns).
      c2ff0cc4
    • unknown's avatar
      bug #25973 (ps_1general.test fails in embedded server) · 91daacfb
      unknown authored
      
      mysql-test/t/ps_1general.test:
        replace_result fixed
      91daacfb
    • unknown's avatar
      Bug #25551: inconsistent behaviour in grouping NULL, depending on index type · 3a42c810
      unknown authored
       The optimizer takes away columns from GROUP BY/DISTINCT if they constitute
       all the parts of an unique index.
       However if some of the columns can contain NULLs this cannot be done 
      (because an UNIQUE index can have multiple rows with NULL values).
       Fixed by not using UNIQUE indexes with nullable columns to remove
       grouping columns from GROUP BY/DISTINCT.
      
      
      mysql-test/r/distinct.result:
        Bug #25551: inconsistent behaviour in grouping NULL, depending on index type
         - test case
      mysql-test/t/distinct.test:
        Bug #25551: inconsistent behaviour in grouping NULL, depending on index type
         - test case
      sql/sql_select.cc:
        Bug #25551: inconsistent behaviour in grouping NULL, depending on index type
         - UNIQUE NULL indices don't guarantee GROUP BY/DISTINCT.
      3a42c810
  4. 30 Jan, 2007 4 commits
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/dev-opt/mysql-4.1-opt-bug24987 · 7ebda36c
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug24987
      
      
      sql/opt_sum.cc:
        Auto merged
      sql/sql_select.cc:
        Manual merge
      7ebda36c
    • unknown's avatar
      Fixed bug #24987. · 396025b0
      unknown authored
      Made the function opt_sum_query to return HA_ERR_KEY_NOT_FOUND when
      no matches were found (instead of -1 it returned prior this patch).
      This changes allow us to avoid possible conflicts with return values
      from user-defined handler methods which also may return -1. 
      No particular test cases are provided with this fix.
      
      
      sql/opt_sum.cc:
        Fixed bug #24987.
        Made the function opt_sum_query to return HA_ERR_KEY_NOT_FOUND when
        no matches were found (instead of -1 it returned prior this patch).
        This changes allow us to avoid possible conflicts with return values
        from user-defined handler methods which also may return -1.
      sql/sql_select.cc:
        Fixed bug #24987.
        Made the function opt_sum_query to return HA_ERR_KEY_NOT_FOUND when
        no matches were found (instead of -1 it returned prior this patch).
        This changes allow us to avoid possible conflicts with return values
        from user-defined handler methods which also may return -1.
      396025b0
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · cb0943e7
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B25643-5.0-opt
      
      cb0943e7
    • unknown's avatar
      Bug #25643: SEC_TO_TIME function problem · 59bdd12f
      unknown authored
       Checking for NULL before calling the val_xxx()
       methods only checks for such arguments that are 
       known to be NULLs at compile time. 
       The arguments that may or may not contain
       NULLs (e.g. function calls and possibly others)
       are not checked at all.
       Fixed by first calling the val_xxx() method and
       then checking for null in SEC_TO_TIME().
       In addition QUARTER() was not returning 0 (as all the 
       val_int() functions do when processing a NULL value).
      
      
      mysql-test/r/func_time.result:
        Bug #25643: SEC_TO_TIME function problem
         - test case
      mysql-test/t/func_time.test:
        Bug #25643: SEC_TO_TIME function problem
         - test case
      sql/item_timefunc.cc:
        Bug #25643: SEC_TO_TIME function problem
         - null handling fixed for QUARTER() and SEC_TO_TIME()
      59bdd12f
  5. 27 Jan, 2007 1 commit
    • unknown's avatar
      Fixed bug #24420. · 30161731
      unknown authored
      Objects of the classes Item_func_is_not_null_test and Item_func_trig_cond
      must be transparent for the method Item::split_sum_func2 as these classes
      are pure helpers. It means that the method Item::split_sum_func2 should
      look at those objects as at pure wrappers.
      
      
      mysql-test/r/subselect3.result:
        Added a test case for bug #24420.
      mysql-test/t/subselect3.test:
        Added a test case for bug #24420.
      30161731
  6. 26 Jan, 2007 5 commits
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-5.0-opt · 0e5890e1
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug24653
      
      
      sql/item.h:
        Auto merged
      0e5890e1
    • unknown's avatar
      Merge mysql.com:/home/gluh/MySQL/Merge/5.0-opt · 8b12f20a
      unknown authored
      into  mysql.com:/home/gluh/MySQL/Merge/5.0
      
      
      sql/item.h:
        Auto merged
      sql/sql_table.cc:
        Auto merged
      sql/sql_update.cc:
        Auto merged
      8b12f20a
    • unknown's avatar
      Post merge fix · 9c70d40a
      unknown authored
      9c70d40a
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/dev-opt/mysql-4.1-opt-bug24653 · a0d5ced4
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug24653
      
      
      sql/item.cc:
        Auto merged
      sql/item.h:
        Auto merged
      sql/item_cmpfunc.cc:
        Auto merged
      sql/item_func.cc:
        Auto merged
      sql/sql_select.cc:
        Auto merged
      mysql-test/r/subselect.result:
        Manual merge
      mysql-test/t/subselect.test:
        Manual merge
      sql/filesort.cc:
        Manual merge
      sql/item_cmpfunc.h:
        Manual merge
      sql/item_subselect.cc:
        Manual merge
      a0d5ced4
    • unknown's avatar
      Fixed bug #24653. · 78c3a85d
      unknown authored
      The bug report has demonstrated the following two problems.
      1. If an ORDER/GROUP BY list includes a constant expression being 
      optimized away and, at the same time, containing single-row
      subselects that return more that one row, no error is reported.
      Strictly speaking the standard allows to ignore error in this case.
      Yet, now a corresponding fatal error is reported in this case.
      2. If a query requires sorting by expressions containing single-row
      subselects that, however, return more than one row, then the execution
      of the query may cause a server crash. 
      To fix this some code has been added that blocks execution of a subselect
      item in case of a fatal error in the method Item_subselect::exec.
      
      
      mysql-test/r/subselect.result:
        Added a test cases for bug #24653.
      mysql-test/t/subselect.test:
        Added a test cases for bug #24653.
      sql/filesort.cc:
        Fixed bug #24653.
        Added a check for fatal error after reading the next row from the table
        in the function find_all_keys.
      sql/item.cc:
        Fixed bug #24653.
        Down-ported calculation of the attribute with_subselect of for Item objects.
      sql/item.h:
        Fixed bug #24653.
        Down-ported calculation of the attribute with_subselect of for Item objects.
      sql/item_cmpfunc.cc:
        Fixed bug #24653.
        Down-ported calculation of the attribute with_subselect of for Item objects.
      sql/item_cmpfunc.h:
        Fixed bug #24653.
        Down-ported calculation of the attribute with_subselect of for Item objects.
      sql/item_func.cc:
        Fixed bug #24653.
        Down-ported calculation of the attribute with_subselect of for Item objects.
      sql/item_subselect.cc:
        Fixed bug #24653.
        Added a check for fatal error in the method Item_subselect::exec
        to block evaluation of subselects in erroneous situations.
        Down-ported calculation of the attribute with_subselect of for Item objects.
      sql/sql_select.cc:
        Fixed bug #24653.
        Added a check to verify that any constant expression used
        in ORDER BY and/or GROUP BY lists which is optimized away
        does not contain subselects returning more than one row.
        If it does a fatal error is reported.
      78c3a85d
  7. 25 Jan, 2007 1 commit
  8. 24 Jan, 2007 16 commits