1. 20 Mar, 2007 1 commit
    • unknown's avatar
      Bug #24484: · 9c89dd65
      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
      9c89dd65
  2. 01 Feb, 2007 6 commits
    • unknown's avatar
      Bug#23299 Some queries against INFORMATION_SCHEMA with subqueries fail · a3083046
      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
      a3083046
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 1ff126e9
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B23556-5.0-opt
      
      
      1ff126e9
    • unknown's avatar
      trigger.result: · 0c523325
      unknown authored
        merge of the 5.0-opt tree
      
      
      mysql-test/r/trigger.result:
        merge of the 5.0-opt tree
      0c523325
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 020e82c6
      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
      020e82c6
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 6bddf2a0
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B25551-5.0-opt
      
      
      sql/sql_select.cc:
        Auto merged
      6bddf2a0
    • unknown's avatar
      Fixed bug #25407. · c15b2e41
      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.
      c15b2e41
  3. 31 Jan, 2007 6 commits
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · c118eeae
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-5.0-opt
      
      
      c118eeae
    • unknown's avatar
      Merge abotchkov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 0375a7a8
      unknown authored
      into  mysql.com:/home/hf/work/25973/my50-25973
      
      
      0375a7a8
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 41f862e1
      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
      41f862e1
    • unknown's avatar
      BUG#25575: ERROR 1052 (Column in from clause is ambiguous) with sub-join · fbc16a85
      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).
      fbc16a85
    • unknown's avatar
      bug #25973 (ps_1general.test fails in embedded server) · e8040084
      unknown authored
      
      mysql-test/t/ps_1general.test:
        replace_result fixed
      e8040084
    • unknown's avatar
      Bug #25551: inconsistent behaviour in grouping NULL, depending on index type · d01ec5e7
      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.
      d01ec5e7
  4. 30 Jan, 2007 4 commits
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/dev-opt/mysql-4.1-opt-bug24987 · 309f2a60
      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
      309f2a60
    • unknown's avatar
      Fixed bug #24987. · 1944b4ca
      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.
      1944b4ca
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 21d915c0
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B25643-5.0-opt
      
      
      21d915c0
    • unknown's avatar
      Bug #25643: SEC_TO_TIME function problem · 3cb3a9a1
      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()
      3cb3a9a1
  5. 27 Jan, 2007 1 commit
    • unknown's avatar
      Fixed bug #24420. · 14959243
      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.
      14959243
  6. 26 Jan, 2007 5 commits
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-5.0-opt · 4f118f1d
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug24653
      
      
      sql/item.h:
        Auto merged
      4f118f1d
    • unknown's avatar
      Merge mysql.com:/home/gluh/MySQL/Merge/5.0-opt · 92a7c1ed
      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
      92a7c1ed
    • unknown's avatar
      Post merge fix · 917adbae
      unknown authored
      917adbae
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/dev-opt/mysql-4.1-opt-bug24653 · 483a41bb
      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
      483a41bb
    • unknown's avatar
      Fixed bug #24653. · da561a80
      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.
      da561a80
  7. 25 Jan, 2007 1 commit
  8. 24 Jan, 2007 16 commits