1. 31 Jan, 2007 1 commit
    • 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
  2. 19 Jan, 2007 6 commits
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-5.0-opt · c6d4b94d
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug25580
      
      
      c6d4b94d
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 3e49c84c
      unknown authored
      into  moonbone.local:/work/25172-bug-5.0-opt-mysql
      
      
      3e49c84c
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-5.0-opt · 9325931a
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug25580
      
      
      mysql-test/r/subselect.result:
        Auto merged
      9325931a
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-5.0-opt · 341a31b0
      unknown authored
      into  olga.mysql.com:/home/igor/dev-opt/mysql-5.0-opt-bug25580
      
      
      341a31b0
    • unknown's avatar
      Bug#25172: Not checked buffer size leads to a server crash. · 5effa05d
      unknown authored
      After fix for bug#21798 JOIN stores the pointer to the buffer for sorting
      fields. It is used while sorting for grouping and for ordering. If ORDER BY
      clause has more elements then the GROUP BY clause then a memory overrun occurs.
      
      Now the length of the ORDER BY list is always passed to the 
      make_unireg_sortorder() function and it allocates buffer big enough to be
      used for bigger list.
      
      
      sql/sql_delete.cc:
        Bug#25172: Not checked buffer size leads to a server crash.
        Length parameter is initialized to 0 for the make_unireg_sortorder() function.
      sql/sql_select.cc:
        Bug#25172: Not checked buffer size leads to a server crash.
        Now the length of the ORDER BY list is always passed to the 
        make_unireg_sortorder() function and it allocates buffer big enough to be
        used for bigger list.
      sql/sql_table.cc:
        Bug#25172: Not checked buffer size leads to a server crash.
        Length parameter is initialized to 0 for the make_unireg_sortorder() function.
      sql/sql_update.cc:
        Bug#25172: Not checked buffer size leads to a server crash.
        Length parameter is initialized to 0 for the make_unireg_sortorder() function.
      mysql-test/r/select.result:
        Added a test case for bug#25172: Not checked buffer size leads to a server crash.
      mysql-test/t/select.test:
        Added a test case for bug#25172: Not checked buffer size leads to a server crash.
      5effa05d
    • unknown's avatar
      Fixed bug #25219: crash for a query that contains an EXIST subquery with · edf72bf6
      unknown authored
      UNION over correlated and uncorrelated SELECTS.
      In such subqueries each uncorrelated SELECT should be considered as
      uncacheable. Otherwise join_free is called for it and in many cases
      it causes some problems.
      
      
      mysql-test/r/subselect.result:
        Added a test case for bug #25219.
      mysql-test/t/subselect.test:
        Added a test case for bug #25219.
      sql/mysql_priv.h:
        Fixed bug #25219: crash for a query that contains an EXIST subquery with
        UNION over correlated and uncorrelated SELECTS.
        In such subqueries each uncorrelated SELECT should be considered as
        uncacheable. Otherwise join_free is called for it and in many cases
        it causes some problems. 
        Added a new flag UNCACHEABLE_UNITED for such SELECTs.
      sql/sql_lex.cc:
        Fixed bug #25219: crash for a query that contains an EXIST subquery with
        UNION over correlated and uncorrelated SELECTS.
        In such subqueries each uncorrelated SELECT should be considered as
        uncacheable. Otherwise join_free is called for it and in many cases
        it causes some problems.
        Added a new flag UNCACHEABLE_UNITED for such SELECTs.
      edf72bf6
  3. 18 Jan, 2007 3 commits
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 9c897762
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B25382-5.0-opt
      
      
      9c897762
    • unknown's avatar
      Bug #25382: Passing NULL to an UDF called from stored procedures · 4ced38b8
      unknown authored
       crashes server
       Check for null value is reliable only after calling some of the 
       val_xxx() methods. If the val_xxx() method is not called
       the null_value flag will be set only for certain types of NULL
       values (like SQL constant NULLs for example).
       This caused a crash while trying to dereference a NULL pointer
       that is returned by val_str() for NULL values.
       Fixed by swapping the order of val_xxx() and null_value check.
      
      
      mysql-test/r/udf.result:
        Bug #25382: Passing NULL to an UDF called from stored procedures 
         crashes server
         - test case
      mysql-test/t/udf.test:
        Bug #25382: Passing NULL to an UDF called from stored procedures 
         crashes server
         - test case
      sql/item_func.cc:
        Bug #25382: Passing NULL to an UDF called from stored procedures 
         crashes server
         - reliably check null_value
      4ced38b8
    • unknown's avatar
      Fixed bug #25580: incorrect stored representations of views in cases · af321686
      unknown authored
      when they contain the '!' operator.
      Added an implementation for the method Item_func_not::print. 
      The method encloses any NOT expression into extra parentheses to avoid
      incorrect stored representations of views that use the '!' operators.
      Without this change when a view was created that contained
      the expression !0*5  its stored representation contained not this
      expression but rather the expression not(0)*5 . 
      The operator '!' is of a higher precedence than '*', while NOT is 
      of a lower precedence than '*'. That's why the expression !0*5 
      is interpreted as not(0)*5, while the expression not(0)*5 is interpreted
      as not((0)*5) unless sql_mode is set to HIGH_NOT_PRECEDENCE.
      Now we translate !0*5 into (not(0))*5. 
      
      
      mysql-test/r/sp-code.result:
        Adjusted results after the fix of bug 25580.
      mysql-test/r/subselect.result:
        Adjusted results after the fix of bug 25580.
      mysql-test/r/view.result:
        Added a test case for bug #25580.
      mysql-test/t/view.test:
        Added a test case for bug #25580.
      sql/item_cmpfunc.cc:
        Fixed bug #25580: incorrect stored representations of views in cases
        when they contain the '!' operator.
        Added an implementation for the method Item_func_not::print. 
        The method encloses the NOT expression into extra parenthesis to avoid
        incorrect stored representations of views that use the '!' operators.
      sql/item_cmpfunc.h:
        Fixed bug #25580: incorrect stored representations of views in cases
        when they contain the '!' operator.
        Added an implementation for the method Item_func_not::print. 
        The method encloses the NOT expression into extra parenthesis to avoid
        incorrect stored representations of views that use the '!' operators.
      af321686
  4. 15 Jan, 2007 7 commits
    • unknown's avatar
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 2c88731e
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-5.0-opt
      
      
      2c88731e
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 8c4acf37
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-5.0-opt
      
      
      8c4acf37
    • unknown's avatar
      sql_select.cc: · c797abae
      unknown authored
        Fix for crashes on 64bit platforms after fixing bug#23417.
      
      
      sql/sql_select.cc:
        Fix for crashes on 64bit platforms after fixing bug#23417.
      c797abae
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-4.1-opt · 8db06e69
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-5.0-opt
      
      
      mysql-test/r/range.result:
        Auto merged
      mysql-test/t/range.test:
        Auto merged
      sql/opt_range.h:
        Manual merge.
      8db06e69
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · c0fd0546
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B20420-5.0-opt
      
      
      sql/item_cmpfunc.h:
        Auto merged
      c0fd0546
    • unknown's avatar
      BUG#20420: optimizer reports wrong keys on left join with IN · a2ae17b1
      unknown authored
       The optimizer needs to evaluate whether predicates are better
       evaluated using an index. IN is one such predicate.
       To qualify an IN predicate must involve a field of the index
       on the left and constant arguments on the right.
       However whether an expression is a constant can be determined only
       by knowing the preceding tables in the join order. 
       Assuming that only IN predicates with expressions on the right that
       are constant for the whole query qualify limits the scope of 
       possible optimizations of the IN predicate (more specifically it
       doesn't allow the "Range checked for each record" optimization for
       such an IN predicate.
       Fixed by not pre-determining the optimizability of the IN predicate
       in the case when all right IN operands are not SQL constant expressions
      
      
      mysql-test/r/func_in.result:
        BUG#20420: optimizer reports wrong keys on left join with IN
         - test case
      mysql-test/t/func_in.test:
        BUG#20420: optimizer reports wrong keys on left join with IN
         - test case
      sql/item_cmpfunc.h:
        BUG#20420: optimizer reports wrong keys on left join with IN
         - cannot decide on the optimizability of a function without
           knowing the tables before it in the join order
      a2ae17b1
  5. 13 Jan, 2007 1 commit
    • unknown's avatar
      Fixed bug #24776: an assertion abort in handler::ha_index_init · b9dc0243
      unknown authored
      for queries using 'range checked for each record'.
      The problem was fixed in 5.0 by the patch for bug 12291.
      This patch down-ported the corresponding code from 5.0 into 
      QUICK_SELECT::init() and added a new test case. 
      
      
      mysql-test/r/range.result:
        Added a test case for bug #24776.
      mysql-test/t/range.test:
        Added a test case for bug #24776.
      sql/opt_range.h:
        Fixed bug #24776: an assertion abort in handler::ha_index_init
        for queries using 'range checked for each record'.
        The problem was fixed in 5.0 by the patch for bug 12291.
        The patch for 4.1 down-ported the corresponding code from 5.0 into 
        QUICK_SELECT::init().
      b9dc0243
  6. 12 Jan, 2007 4 commits
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · fd4db68c
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-5.0-opt
      
      
      fd4db68c
    • unknown's avatar
      Fixed bug #25398: crash in a trigger when using trigger fields · 35e36393
      unknown authored
      in a select list.
      The objects of the Item_trigger_field class inherited the implementations
      of the methods copy_or_same, get_tmp_table_item and get_tmp_table_field
      from the class Item_field while they rather should have used the default
      implementations defined for the base class Item.
      It could cause catastrophic problems for triggers that used SELECTs
      with select list containing trigger fields such as NEW.<table column>
      under DISTINCT.
      
      
      mysql-test/r/trigger.result:
        Added a test case for bug #25398.
      mysql-test/t/trigger.test:
        Added a test case for bug #25398.
      35e36393
    • unknown's avatar
      func_str.result: · 6746efb1
      unknown authored
        After merge fix
      
      
      mysql-test/r/func_str.result:
        After merge fix
      6746efb1
    • unknown's avatar
      Merge moonbone.local:/work/latest-4.1-opt-mysql · cb96e8bc
      unknown authored
      into  moonbone.local:/work/latest-5.0-opt-mysql
      
      
      mysql-test/t/func_str.test:
        Auto merged
      sql/item_strfunc.cc:
        Auto merged
      sql/item_strfunc.h:
        Auto merged
      sql/sql_delete.cc:
        Auto merged
      mysql-test/r/delete.result:
        Manual merge
      mysql-test/r/func_str.result:
        Manual merge
      mysql-test/t/delete.test:
        Manual merge
      cb96e8bc
  7. 11 Jan, 2007 8 commits
    • unknown's avatar
      Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 0f0d0f5b
      unknown authored
      into  moonbone.local:/work/23417-bug-5.0-opt-mysql
      
      
      sql/sql_base.cc:
        Auto merged
      0f0d0f5b
    • unknown's avatar
      Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode. · 4d143a6f
      unknown authored
      Currently in the ONLY_FULL_GROUP_BY mode no hidden fields are allowed in the
      select list. To ensure this each expression in the select list is checked
      to be a constant, an aggregate function or to occur in the GROUP BY list.
      The last two requirements are wrong and doesn't allow valid expressions like
      "MAX(b) - MIN(b)" or "a + 1" in a query with grouping by a.
      
      The correct check implemented by the patch will ensure that:
      any field reference in the [sub]expressions of the select list 
        is under an aggregate function or
        is mentioned as member of the group list or
        is an outer reference or
        is part of the select list element that coincide with a grouping element.
      
      The Item_field objects now can contain the position of the select list
      expression which they belong to. The position is saved during the
      field's Item_field::fix_fields() call.
      
      The non_agg_fields list for non-aggregated fields is added to the SELECT_LEX
      class. The SELECT_LEX::cur_pos_in_select_list now contains the position in the
      select list of the expression being currently fixed.
      
      
      sql/item.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        The Item_field objects now contain the position of the select list
        expression which they belong to. The position is saved at the field's
        Item_field::fix_fields() call.
      sql/item.h:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        The Item_field objects now can store the position in the select list of the
        expression to which they are belongs to.
      sql/mysql_priv.h:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Added the UNDEF_POS constant.
      sql/sql_base.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Now the setup_fields() function maintains the cur_pos_in_select_list variable.
      sql/sql_lex.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Set the cur_pos_in_select_list variable and the non_agg_fields list to their initial state.
      sql/sql_lex.h:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        The non_agg_fields list for non-aggregated fields is added to the SELECT_LEX
        class. The SELECT_LEX::cur_pos_in_select_list now stores the position in the
        select list of the expression being currently fixed.
      sql/sql_select.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Each select now keeps the list of fields that aren't
        used under any aggregate function. If an expression from the select list
        isn't found in the GROUP BY list the setup_group() function additionally
        checks whether non-aggregated fields occur in that expression.
        If there at least one such field and it isn't found in the GROUP BY list
        then an error is thrown.
      sql/sql_union.cc:
        Bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
        Clean up of the non_agg_fields list.
      mysql-test/r/group_by.result:
        Added a test case for the bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
      mysql-test/t/group_by.test:
        Added a test case for the bug#23417: Too strict checks against GROUP BY in the ONLY_FULL_GROUP_BY mode.
      4d143a6f
    • unknown's avatar
      Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · 7f9da471
      unknown authored
      into  rakia.gmz:/home/kgeorge/mysql/autopush/B25106-5.0-opt
      
      
      sql/sql_base.cc:
        Auto merged
      7f9da471
    • unknown's avatar
      BUG#25106: A USING clause in combination with a VIEW results in column · 6c41a043
      unknown authored
                 aliases ignored
      When a column reference to a column in JOIN USING is resolved and a new 
      Item is created for this column the user defined name was lost.
      This fix preserves the alias by setting the name of the new Item to the
      original alias.
      
      
      mysql-test/r/join.result:
        BUG#25106: A USING clause in combination with a VIEW results in column
                   aliases ignored
         - test case
      mysql-test/t/join.test:
        BUG#25106: A USING clause in combination with a VIEW results in column
                   aliases ignored
         - test case
      sql/sql_base.cc:
        BUG#25106: A USING clause in combination with a VIEW results in column
                   aliases ignored
         - take the alias of the Item to be replaced and set it into the newly
           allocated Item.
      6c41a043
    • unknown's avatar
      Bug#23409: Arguments of the ENCODE() and the DECODE() functions were not printed · 52c100ae
      unknown authored
      correctly.
      
      The Item_func::print method was used to print the Item_func_encode and the
      Item_func_decode objects. The last argument to ENCODE and DECODE functions
      is a plain C string and thus Item_func::print wasn't able to print it.
      
      The print() method is added to the Item_func_encode class. It correctly
      prints the Item_func_encode and the Item_func_decode objects.
      
      
      mysql-test/t/func_str.test:
        Added a test case for bug#23409: Arguments of the ENCODE() and the
        > DECODE() functionswere not printed correctly.
      mysql-test/r/func_str.result:
        Added a test case for bug#23409: Arguments of the ENCODE() and the DECODE() functions were not printed correctly.
      sql/item_strfunc.h:
        Bug#23409: Arguments of the ENCODE() and the DECODE() functions were not printed correctly.
        The print() method is added to the Item_func_encode class.
      sql/item_strfunc.cc:
        Bug#23409: Arguments of the ENCODE() and the DECODE() functions were not printed correctly.
        The print() method is added to the Item_func_encode class. It correctly
        prints the Item_func_encode and the Item_func_decode objects.
      52c100ae
    • unknown's avatar
      Merge fix for bug#17711 · 0fdd3dce
      unknown authored
      0fdd3dce
    • unknown's avatar
      Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and non-restricting · 66179638
      unknown authored
      WHERE is present.
      
      If a DELETE statement with ORDER BY and LIMIT contains a WHERE clause
      with conditions that for sure cannot be used for index access (like in
      WHERE @var:= field) the execution always follows the filesort path.    
      It happens currently even when for the above case there is an index that
      can be used to speedup sorting by the order by list.
      
      Now if a DELETE statement with ORDER BY and LIMIT contains such WHERE
      clause conditions that cannot be used to build any quick select then
      the mysql_delete() tries to use an index like there is no WHERE clause at all.
      
      
      mysql-test/t/delete.test:
        Added a test case for bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and non-restricting
        WHERE is present.
      mysql-test/r/delete.result:
        Added a test case for bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and non-restricting WHERE is present.
      sql/sql_delete.cc:
        Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and non-restricting WHERE is present.
        Now if a DELETE statement with ORDER BY and LIMIT contains such WHERE
        clause conditions that cannot be used to build any quick select then
        the mysql_delete() tries to use an index like there is no WHERE clause at all.
      66179638
    • unknown's avatar
      Merge bk@192.168.21.1:mysql-5.0-opt · ce3a76a4
      unknown authored
      into  mysql.com:/d2/hf/mr10/my50-mr10
      
      
      sql/mysqld.cc:
        Auto merged
      ce3a76a4
  8. 10 Jan, 2007 10 commits
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-4.1-opt · 10698df6
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-4.1-opt
      
      
      10698df6
    • unknown's avatar
      Merge olga.mysql.com:/home/igor/mysql-4.1-opt · 6943153e
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-5.0-opt
      
      
      sql/item.cc:
        Auto merged
      mysql-test/r/order_by.result:
        Manual merge
      mysql-test/t/order_by.test:
        Manual merge
      6943153e
    • unknown's avatar
      Merge bk@192.168.21.1:mysql-5.0 · c11c3b08
      unknown authored
      into  mysql.com:/d2/hf/mr10/my50-mr10
      
      
      c11c3b08
    • unknown's avatar
      configure.in: · 4ffd49d3
      unknown authored
        Removed line accidently inserted when correcting bug#18526
      
      
      configure.in:
        Removed line accidently inserted when correcting bug#18526
      4ffd49d3
    • unknown's avatar
      Merge mysql.com:/d2/hf/common/my50-common · 380ad35c
      unknown authored
      into  mysql.com:/d2/hf/mr10/my50-mr10
      
      
      380ad35c
    • unknown's avatar
      after merge fix · 53c9b0d0
      unknown authored
      53c9b0d0
    • unknown's avatar
      Merge mysql.com:/home/gluh/MySQL/Merge/4.1-opt · f5005095
      unknown authored
      into  mysql.com:/home/gluh/MySQL/Merge/5.0-opt
      
      
      sql/mysqld.cc:
        Auto merged
      sql/sql_base.cc:
        Auto merged
      sql/mysql_priv.h:
        manual merge
      f5005095
    • unknown's avatar
      Fix for bug#20867 InnoDB Bug - create temporary table+crash => mysqld needs to clean up · ac71a8fa
      unknown authored
      2nd version
      During tmp tables cleanup we get the handler for temporary table
      and delete table using handler method.
      
      
      sql/mysql_priv.h:
        added function prototype
      sql/mysqld.cc:
        added call of mysql_rm_tmp_tables() function
      sql/sql_base.cc:
        mysql_rm_tmp_tables()
        -removed from table_cache_init
        -During tmp tables cleanup we get the handler for temporary table
         and delete table using handler method. 
         it allows to remove orphan records from data dictionary(InnoDB)
      ac71a8fa
    • unknown's avatar
      Fixed bug #25427. · 6fc17dab
      unknown authored
      In the method Item_field::fix_fields we try to resolve the name of
      the field against the names of the aliases that occur in the select
      list. This is done by a call of the function find_item_in_list.
      When this function finds several occurrences of the field name
      it sends an error message to the error queue and returns 0.
      Yet the code did not take into account that find_item_in_list
      could return 0 and tried to dereference the returned value.
      
      
      mysql-test/r/order_by.result:
        Added a test case for bug #25427.
      mysql-test/t/order_by.test:
        Added a test case for bug #25427.
      sql/item.cc:
        Fixed bug #25427.
        In the method Item_field::fix_fields we try to resolve the name of
        the field against the names of the aliases that occur in the select
        list. This is done by a call of the function find_item_in_list.
        When this function finds several occurrences of the field name 
        it sends an error message to the error queue and returns 0.
        Yet the code did not take into account that find_item_in_list
        could return 0 and tried to dereference the returned value.
      6fc17dab
    • unknown's avatar
      Merge ibabaev@bk-internal.mysql.com:/home/bk/mysql-5.0-opt · b04652e2
      unknown authored
      into  olga.mysql.com:/home/igor/mysql-5.0-opt
      
      
      b04652e2