1. 31 Oct, 2006 1 commit
    • unknown's avatar
      BUG#8804: wrong results for NULL IN (SELECT ...) · 9dfc7e78
      unknown authored
      Evaluate "NULL IN (SELECT ...)" in a special way: Disable pushed-down 
      conditions and their "consequences": 
       = Do full table scans instead of unique_[index_subquery] lookups.
       = Change appropriate "ref_or_null" accesses to full table scans in
         subquery's joins.
      Also cache value of NULL IN (SELECT ...) if the SELECT is not correlated 
      wrt any upper select.
      
      
      mysql-test/r/subselect.result:
        BUG#8804: wrong results for NULL IN (SELECT ...): 
         - Updated test results
      sql/item.h:
        BUG#8804: wrong results for NULL IN (SELECT ...): 
         - Added comments
      sql/item_cmpfunc.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...): 
        Made Item_in_optimizer to:
        - cache the value of "NULL IN (uncorrelated select)"
        - Turn off pushed-down predicates when evaluating "NULL IN (SELECT ...)"
      sql/item_cmpfunc.h:
        BUG#8804: wrong results for NULL IN (SELECT ...): 
        - Made Item_in_optimizer cache the value of "NULL IN (uncorrelated select)"
        - Added comments
      sql/item_subselect.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - When needed, wrap the predicates we push into subquery into an 
          Item_func_trig_cond so we're able to turn them off when evaluating 
          NULL IN (SELECT ...).
        - Added code to evaluate NULL IN (SELECT ...) in a special way:
          = In [unique_]index_subquery, do full table scan to see if there 
            are any rows.
          = For other subqueries, change ref[_or_null] to ALL if the
            ref[_or_null] was created from pushed-down predicate.
      sql/item_subselect.h:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added Item_subselect::is_correlated
        - Added comments
      sql/records.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Make rr_sequential() non-static
      sql/sql_lex.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added st_select_lex::is_correlated and Item_subselect::is_correlated.
      sql/sql_lex.h:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added st_select_lex::is_correlated
      sql/sql_select.cc:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added KEY_FIELD::outer_ref to keep track of which ref accesses are 
          created from predicates that were pushed down into the subquery.
      sql/sql_select.h:
        BUG#8804: wrong results for NULL IN (SELECT ...):
        - Added KEYUSE::outer_ref
      mysql-test/r/subselect3.result:
        New BitKeeper file ``mysql-test/r/subselect3.result''
      mysql-test/t/subselect3.test:
        New BitKeeper file ``mysql-test/t/subselect3.test''
      9dfc7e78
  2. 16 Oct, 2006 1 commit
    • unknown's avatar
      Fixed bug #19579: at range analysis optimizer did not take into · 93a82420
      unknown authored
      account predicates that become sargable after reading const tables.
      In some cases this resulted in choosing non-optimal execution plans.
      Now info of such potentially saragable predicates is saved in
      an array and after reading const tables we check whether this
      predicates has become saragable.
      
      
      
      mysql-test/r/select.result:
        Added a test case for bug #19579.
      mysql-test/t/select.test:
        Added a test case for bug #19579.
      sql/item_cmpfunc.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_base.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_lex.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_lex.h:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Added a counter of between predicates.
      sql/sql_select.cc:
        Fixed bug #19579: at range analysis optimizer did not take into 
        account predicates that become sargable after reading const tables.
        Now info of such potentially saragable predicates is saved in
        an array and after reading const tables we check whether this
        predicates has become saragable.
      93a82420
  3. 18 Sep, 2006 1 commit
  4. 14 Sep, 2006 1 commit
    • unknown's avatar
      type_date.result: · 68116728
      unknown authored
        Added the test case for bug#21677: Wrong result when comparing a DATE and a DATETIME in BETWEEN
        Corrected a test case after removal of fix for bug#16377
      query_cache.result, func_time.test, view.result, view.test, func_time.result:
        Corrected a test case after removal of fix for bug#16377
      type_date.test:
        Added the test case for bug#21677: Wrong result when comparing a DATE and a DATETIME in BETWEEN
         Corrected a test case after removal of fix for bug#16377
      item_cmpfunc.cc:
        Removed changes to the Item_func_between::fix_length_and_dec() made in the fix for bug#16377
      
      
      mysql-test/t/view.test:
        Corrected a test case after removal of fix for bug#16377
      mysql-test/t/type_date.test:
        Added the test case for bug#21677: Wrong result when comparing a DATE and a DATETIME in BETWEEN
         Corrected a test case after removal of fix for bug#16377
      mysql-test/t/func_time.test:
        Corrected a test case after removal of fix for bug#16377
      mysql-test/r/view.result:
        Corrected a test case after removal of fix for bug#16377
      mysql-test/r/type_date.result:
        Added the test case for bug#21677: Wrong result when comparing a DATE and a DATETIME in BETWEEN
        Corrected a test case after removal of fix for bug#16377
      mysql-test/r/query_cache.result:
        Corrected a test case after removal of fix for bug#16377
      mysql-test/r/func_time.result:
        Corrected a test case after removal of fix for bug#16377
      sql/item_cmpfunc.cc:
        Removed changes to the Item_func_between::fix_length_and_dec() made in the fix for bug#16377
      68116728
  5. 13 Sep, 2006 1 commit
    • unknown's avatar
      Cset exclude: kaa@polly.local|ChangeSet|20060912122540|09861 · 27fe6590
      unknown authored
      Cset exclude: kaa@polly.local|ChangeSet|20060908100829|09983
      
      
      sql/item_cmpfunc.cc:
        Exclude
      sql/item_cmpfunc.h:
        Exclude
      sql/item_func.cc:
        Exclude
      sql/item_func.h:
        Exclude
      sql/log_event.cc:
        Exclude
      sql/sql_class.h:
        Exclude
      mysql-test/r/case.result:
        Exclude
      mysql-test/r/func_if.result:
        Exclude
      mysql-test/r/func_test.result:
        Exclude
      mysql-test/r/user_var.result:
        Exclude
      mysql-test/t/case.test:
        Exclude
      mysql-test/t/func_if.test:
        Exclude
      mysql-test/t/func_test.test:
        Exclude
      mysql-test/t/user_var.test:
        Exclude
      27fe6590
  6. 12 Sep, 2006 1 commit
    • unknown's avatar
      item_cmpfunc.cc: · a782df39
      unknown authored
        Removed changes to the Item_func_between::fix_length_and_dec() made in the fix for bug#16377
      query_cache.result:
        Corrected a test case after removing a fix for bug#16377
      
      
      mysql-test/r/query_cache.result:
        Corrected a test case after removing a fix for bug#16377
      sql/item_cmpfunc.cc:
        Removed changes to the Item_func_between::fix_length_and_dec() made in the fix for bug#16377
      a782df39
  7. 09 Sep, 2006 1 commit
  8. 08 Sep, 2006 1 commit
    • unknown's avatar
      Bug #20924: CAST(expr as UNSIGNED) returns SIGNED value when used in various functions · 8e14a50a
      unknown authored
      - Honor unsigned_flag in the corresponding functions
      - Use compare_int_signed_unsigned()/compare_int_unsigned_signed() instead of explicit comparison in GREATEST() and LEAST()
      
      
      mysql-test/r/case.result:
        Added test case for bug #20924
      mysql-test/r/func_if.result:
        Added test case for bug #20924
      mysql-test/r/func_test.result:
        Added test case for bug #20924
      mysql-test/r/user_var.result:
        Added test case for bug #20924
      mysql-test/t/case.test:
        Added test case for bug #20924
      mysql-test/t/func_if.test:
        Added test case for bug #20924
      mysql-test/t/func_test.test:
        Added test case for bug #20924
      mysql-test/t/user_var.test:
        Added test case for bug #20924
      sql/item_cmpfunc.cc:
        Bug #20924: CAST(expr as UNSIGNED) returns SIGNED value when used in various functions
        
        - Moved some code out of Arg_comparator to external functions to be reused in Item_func_min_max
        - Fixed IFNULL(), IF(), CASE() and COALESCE()
      sql/item_cmpfunc.h:
        Bug #20924: CAST(expr as UNSIGNED) returns SIGNED value when used in various functions
        
        - Moved some code out of Arg_comparator to external functions to be reused in Item_func_min_max
      sql/item_func.cc:
        Bug #20924: CAST(expr as UNSIGNED) returns SIGNED value when used in various functions
        
        Fixed LEAST(), GREATEST() and "SET @A=..." parts
      sql/item_func.h:
        Bug #20924: CAST(expr as UNSIGNED) returns SIGNED value when used in various functions
        
        Fixed "SET @A=..." part
      sql/sql_class.h:
        Bug #20924: CAST(expr as UNSIGNED) returns SIGNED value when used in various functions
        
        Fixed "SET @A=..." part
      8e14a50a
  9. 07 Sep, 2006 2 commits
    • unknown's avatar
      query_cache.result, func_time.test, type_date.result, func_time.result: · 11b9ced3
      unknown authored
        Corrected test case after removal of fix for bug#16377         
      type_date.test:
        Corrected test case after removal of fix for bug#16377
      item_cmpfunc.cc:
        Removed changes to the agg_cmp_type() made in the for bug#16377
      
      
      mysql-test/t/type_date.test:
        Corrected test case after removal of fix for bug#16377
      mysql-test/t/func_time.test:
        Corrected test case after removal of fix for bug#16377
      mysql-test/r/type_date.result:
        Corrected test case after removal of fix for bug#16377
      mysql-test/r/query_cache.result:
        Corrected test case after removal of fix for bug#16377
      mysql-test/r/func_time.result:
        Corrected test case after removal of fix for bug#16377
      sql/item_cmpfunc.cc:
        Removed changes to the agg_cmp_type() made in the for bug#16377
      11b9ced3
    • unknown's avatar
      Fixed bug #21698: erroneously a field could be replaced by an · f06e3012
      unknown authored
      equal constant under any circumstances.
      In fact this substitution can be allowed if the field is
      not of a type string or if the field reference serves as 
      an argument of a comparison predicate.  
      
      
      mysql-test/r/func_str.result:
        Added test cases for bug #21698.
      mysql-test/r/heap_hash.result:
        Adjusted results after the fix for bug #21198.
      mysql-test/t/func_str.test:
        Added test cases for bug #21698.
      sql/item.cc:
        Fixed bug #21198.
        Added a method to check whether a field reference can be 
        substituted for a constant equal to the field.
        This substitution is allowed if the field is not of a type string
        or if the field reference serves as an argument of a comparison
        predicate.
      sql/item.h:
        Fixed bug #21698.
        Added a new virtual transformation method for a item 'compile'
        with two callback function parameters.
        Added a new virtual method 'subst_argument_checker' to be used
        as an amnalyzer method.
        This method is supposed to set it...
      f06e3012
  10. 24 Aug, 2006 1 commit
    • unknown's avatar
      BUG#21166: Prepared statement causes signal 11 on second execution · f98a9109
      unknown authored
      Changes in an item tree done by optimizer weren't properly
      registered and went unnoticed, which resulted in preliminary freeing
      of used memory.
      
      
      mysql-test/r/ps.result:
        Add result for bug#21166: Prepared statement causes signal 11
        on second execution.
      mysql-test/t/ps.test:
        Add test case for bug#21166: Prepared statement causes signal 11
        on second execution.
      sql/item.cc:
        Move Item::transform() and Item_default_value::transform() from
        item.h here and use THD::change_item_tree() instead of plain
        assignment.
        Change Item_field::set_no_const_sub() to be used with Item::walk()
        instead of Item::transform().
      sql/item.h:
        Move definition of Item::transform() and Item_default_value::transform()
        to item.cc.
        Change Item::set_no_const_sub() to be used with Item::walk()
        instead of Item::transform().
      sql/item_cmpfunc.cc:
        Use Item::walk() to execute Item::set_no_const_sub().
        Use THD::change_item_tree() instead of plain assignment.
      sql/item_func.cc:
        Add assert and comment to Item_func::traverse_cond().
      sql/item_row.cc:
        Use THD::change_item_tree() instead of plain assignment.
      sql/item_strfunc.cc:
        Move Item_func_make_set::transform() from item_strfunc.h here and use
        THD::change_item_tree() instead of plain assignment.
      sql/item_strfunc.h:
        Move definition of Item_func_make_set::transform() to item_strfunc.cc.
      f98a9109
  11. 22 Aug, 2006 1 commit
    • unknown's avatar
      item_cmpfunc.cc, item.cc: · a989cf0b
      unknown authored
        Additional fix for bug #21475
      item_func.h, item_func.cc:
        Additional fix for bug#16861
      
      
      sql/item_func.h:
        Additional fix for bug#16861
      sql/item_func.cc:
        Additional fix for bug#16861
      sql/item_cmpfunc.cc:
        Additional fix for bug #21475
      sql/item.cc:
        Additional fix for bug #21475
      a989cf0b
  12. 20 Aug, 2006 1 commit
    • unknown's avatar
      Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison. · 3a5f9967
      unknown authored
      A date can be represented as an int (like 20060101) and as a string (like
      "2006.01.01"). When a DATE/TIME field is compared in one SELECT against both
      representations the constant propagation mechanism leads to comparison
      of DATE as a string and DATE as an int. In this example it compares 2006 and
      20060101 integers. Obviously it fails comparison although they represents the
      same date.
      
      
      Now the Item_bool_func2::fix_length_and_dec() function sets the comparison
      context for items being compared. I.e. if items compared as strings the
      comparison context is STRING.
      The constant propagation mechanism now doesn't mix items used in different
      comparison contexts. The context check is done in the
      Item_field::equal_fields_propagator() and in the change_cond_ref_to_const() 
      functions.
      
      Also the better fix for bug 21159 is introduced.
      
      
      mysql-test/t/type_datetime.test:
        Added a test case for bug#21475: Wrongly applied constant propagation leads to a false comparison.
      mysql-test/r/type_datetime.result:
        Added a test case for bug#21475: Wrongly applied constant propagation leads to a false comparison.
      sql/sql_select.cc:
        Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison.
        The constant propagation mechanism now doesn't mix items used in different
        comparison contexts. The check is done in the change_cond_ref_to_const() function.
      sql/item_cmpfunc.cc:
        Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison.
        Now the Item_bool_func2::fix_length_and_dec() function sets the comparison
        context for items being compared.
      sql/item.h:
        Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison.
        To the Item class a new field called cmp_context is added.
        It represents the comparison context of an item.
      sql/item.cc:
        Fixed bug#21475: Wrongly applied constant propagation leads to a false comparison.
        The constant propagation mechanism now doesn't mix items used in different
        comparison contexts. The context check is done in the
        Item_field::equal_fields_propagator() function.
      3a5f9967
  13. 15 Aug, 2006 1 commit
    • unknown's avatar
      Fixed bug#15950: NOW() optimized away in VIEWs · 09255a2d
      unknown authored
      This bug is a side-effect of bug fix #16377. NOW() is optimized in
      BETWEEN to integer constants to speed up query execution. When view is being
      created it saves already modified query and thus becomes wrong.
      
      The agg_cmp_type() function now substitutes constant result DATE/TIME functions 
      for their results only if the current query isn't CREATE VIEW or SHOW CREATE
      VIEW.
      
      
      mysql-test/t/view.test:
        Added a test case for bug#15950: NOW() optimized away in VIEWs
      mysql-test/r/view.result:
        Added a test case for bug#15950: NOW() optimized away in VIEWs
      sql/item_cmpfunc.cc:
        Fixed bug#15950: NOW() optimized away in VIEWs
        The agg_cmp_type() function now substitutes constant result DATE/TIME functions 
        for their results only if the current query isn't CREATE VIEW or SHOW CREATE
        VIEW.
      09255a2d
  14. 20 Jul, 2006 1 commit
    • unknown's avatar
      BUG#20975: Incorrect query result for NOT (subquery): · 1b03ac4c
      unknown authored
        Add implementations of Item_func_{nop,not}_all::neg_transformer
      
      
      mysql-test/r/subselect.result:
        BUG#20975: testcase
      mysql-test/t/subselect.test:
        BUG#20975: testcase
      sql/mysql_priv.h:
        Make chooser_compare_func_creator visible in item.h
      1b03ac4c
  15. 03 Jul, 2006 1 commit
    • unknown's avatar
      Bug#20783: Valgrind uninitialised warning in test case ctype_uca · 207f01ae
      unknown authored
        
      Two functions have different ideas of what a string should look like;
      one of them reads memory it assumes the other one may have written.
      And "if you assume ..."
        
      We now use a more defensive variety of the assuming function, this fixes
      a warning thrown by the valgrind tool.
      
      
      sql/item_cmpfunc.cc:
        c_ptr() makes incorrect assumptions about the string we get from
        out of args[0]->val_str(&tmp); c_str_safe() is more defensive.
      207f01ae
  16. 30 Jun, 2006 1 commit
    • unknown's avatar
      BUG#20769: Dangling pointer in ctype_recoding test case. · 17c4a2ea
      unknown authored
      In some functions dealing with strings and character sets, the wrong
      pointers were saved for restoration in THD::rollback_item_tree_changes().
      This could potentially cause random corruption or crashes.
      
      Fixed by passing the original Item ** locations, not local stack copies.
      
      Also remove unnecessary use of default arguments.
      
      
      sql/item.cc:
        Function agg_item_charsets() now handles non-consequtive Item *'s.
      sql/item.h:
        Remove use of default argument.
      sql/item_cmpfunc.cc:
        Remove use of default argument.
      sql/item_func.cc:
        Remove use of default argument.
      sql/item_func.h:
        Function agg_item_charsets() now handles non-consequtive Item *'s.
      sql/item_strfunc.cc:
        Pass original Item **'s to agg_arg_charsets(), not local copies, to ensure
        proper restoration in THD::rollback_item_tree_changes().
      sql/item_sum.cc:
        Remove use of default argument.
      17c4a2ea
  17. 20 Jun, 2006 2 commits
    • unknown's avatar
      select.result: · 503d2023
      unknown authored
        Added test case for bug#18759 Incorrect string to numeric conversion.  
      select.test:
        Added test case for bug#18759 Incorrect string to numeric conversion.
      item_cmpfunc.cc:
        Cleanup after fix for bug#18360 removal
      
      
      sql/item_cmpfunc.cc:
        Cleanup after fix for bug#18360 removal
      mysql-test/t/select.test:
        Added test case for bug#18759 Incorrect string to numeric conversion.
      mysql-test/r/select.result:
        Added test case for bug#18759 Incorrect string to numeric conversion.
      503d2023
    • unknown's avatar
      item_cmpfunc.cc: · 5b286789
      unknown authored
        After merge fix
      
      
      sql/item_cmpfunc.cc:
        After merge fix
      5b286789
  18. 19 Jun, 2006 1 commit
    • unknown's avatar
      item_cmpfunc.cc, func_in.result, func_in.test: · 4d4a181a
      unknown authored
        Reverted fix for bug#18360
      
      
      mysql-test/t/func_in.test:
        Reverted fix for bug#18360
      mysql-test/r/func_in.result:
        Reverted fix for bug#18360
      sql/item_cmpfunc.cc:
        Reverted fix for bug#18360
      4d4a181a
  19. 16 Jun, 2006 1 commit
    • unknown's avatar
      item_strfunc.cc: · 6ca6756b
      unknown authored
        Fix for bug#16716 for --ps-protocol mode.
      item_cmpfunc.cc:
        Fix for a memory allocation/freeing problem in agg_cmp_type() after fix
      for bug#16377. Few language corrections.
      
      
      sql/item_cmpfunc.cc:
        Fix for a memory allocation/freeing problem in agg_cmp_type(). Few language corrections.
      sql/item_strfunc.cc:
        Fix for bug#16716 for --ps-protocol mode.
      6ca6756b
  20. 14 Jun, 2006 1 commit
    • unknown's avatar
      Many files: · 9b3d1553
      unknown authored
        After merge fix
      
      
      mysql-test/r/func_time.result:
        After merge fix
      mysql-test/r/func_concat.result:
        After merge fix
      mysql-test/r/cast.result:
        After merge fix
      sql/item_cmpfunc.h:
        After merge fix
      sql/item_cmpfunc.cc:
        After merge fix
      sql/field.cc:
        After merge fix
      9b3d1553
  21. 13 Jun, 2006 1 commit
    • unknown's avatar
      Fixed bug#16377: result of DATE/TIME functions were compared as strings which · e3df0745
      unknown authored
      can lead to a wrong result.
      
      All date/time functions has the STRING result type thus their results are
      compared as strings. The string date representation allows a user to skip 
      some of leading zeros. This can lead to wrong comparison result if a date/time 
      function result is compared to such a string constant.
      
      The idea behind this bug fix is to compare results of date/time functions
      and data/time constants as ints, because that date/time representation is 
      more exact. To achieve this the agg_cmp_type() is changed to take in the
      account that a date/time field or an date/time item should be compared 
      as ints.
      
      This bug fix is partially back ported from 5.0.
      
      The agg_cmp_type() function now accepts THD as one of parameters. 
      In addition, it now checks if a date/time field/function is present in the
      list. If so, it tries to coerce all constants to INT to make date/time
      comparison return correct result. The field for the constant coercion is
      taken from the Item_field or constructed from the Item_func. In latter case
      the constructed field will be freed after conversion of all constant items.
      Otherwise the result is same as before - aggregated with help of the
      item_cmp_type() function.
      
      From the Item_func_between::fix_length_and_dec() function removed the part
      which was converting date/time constants to int if possible. Now this is 
      done by the agg_cmp_type() function.
      
      The new function result_as_longlong() is added to the Item class. 
      It indicates that the item is a date/time item and result of it can be
      compared as int. Such items are date/time fields/functions.
      
      Correct val_int() methods are implemented for classes Item_date_typecast, 
      Item_func_makedate, Item_time_typecast, Item_datetime_typecast. All these
      classes are derived from Item_str_func and Item_str_func::val_int() converts
      its string value to int without regard to the date/time type of these items.
      
      Arg_comparator::set_compare_func() and Arg_comparator::set_cmp_func()
      functions are changed to substitute result type of an item with the INT_RESULT
      if the item is a date/time item and another item is a constant. This is done
      to get a correct result of comparisons like date_time_function() = string_constant.
      
      
      mysql-test/r/cast.result:
        Fixed wrong test case result after bug fix#16377.
      sql/item_timefunc.h:
        Fixed bug#16377: result of DATE/TIME functions were compared as strings which
        can lead to a wrong result.
        The result_as_longlong() function is set to return TRUE for these classes:
        Item_date, Item_date_func, Item_func_curtime, Item_func_sec_to_time,
        Item_date_typecast, Item_time_typecast, Item_datetime_typecast,
        Item_func_makedate.
      sql/item_timefunc.cc:
        Fixed bug#16377: result of DATE/TIME functions were compared as strings which
        can lead to a wrong result.Correct val_int() methods are implemented for classes Item_date_typecast, 
        Item_func_makedate, Item_time_typecast, Item_datetime_typecast.
      sql/item_cmpfunc.h:
        Fixed bug#16377: result of DATE/TIME functions were compared as strings which
        can lead to a wrong result.
        Arg_comparator::set_compare_func() and Arg_comparator::set_cmp_func()
        functions are changed to substitute result type of an item with the INT_RESULT
        if the item is a date/time item and another item is a constant.
      sql/field.cc:
        Fixed bug#16377: result of DATE/TIME functions were compared as strings which
        can lead to a wrong result.
        Field::set_warning(), Field::set_datetime_warning() now use current_thd to get thd if table isn't set.
      sql/item_cmpfunc.cc:
        Fixed bug#16377: result of DATE/TIME functions were compared as strings which
        can lead to a wrong result.
        The agg_cmp_type() function now accepts THD as one of parameters. 
        In addition, it now checks if a date/time field/function is present in the
        list. If so, it tries to coerce all constants to INT to make date/time
        comparison return correct result. The field for the constant coercion is
        taken from the Item_field or constructed from the Item_func. In latter case
        the constructed field will be freed after conversion of all constant items.
        Otherwise the result is same as before - aggregated with help of the
        item_cmp_type() function.
      sql/item.h:
        The new function result_as_longlong() is added to the Item class. 
        It indicates that the item is a date/time item and result of it can be
        compared as int. Such items are date/time fields/functions.
      mysql-test/t/func_time.test:
        Added test case fot bug#16377: result of DATE/TIME functions were compared as strings which
        can lead to a wrong result.
      mysql-test/r/func_time.result:
        Added test case fot bug#16377: result of DATE/TIME functions were compared as strings which
        can lead to a wrong result.
      e3df0745
  22. 30 May, 2006 1 commit
  23. 29 May, 2006 1 commit
    • unknown's avatar
      Fixed bug#18360: Incorrect type coercion in IN() results in false comparison · a719dc38
      unknown authored
      The IN() function uses agg_cmp_type() to aggregate all types of its arguments
      to find out some common type for comparisons. In this particular case the 
      char() and the int was aggregated to double because char() can contain values
      like '1.5'. But all strings which do not start from a digit are converted to
      0. thus 'a' and 'z' become equal. 
      This behaviour is reasonable when all function arguments are constants. But 
      when there is a field or an expression this can lead to false comparisons. In
      this case it makes more sense to coerce constants to the type of the field
      argument.
      
      The agg_cmp_type() function now aggregates types of constant and non-constant
      items separately. If some non-constant items will be found then their
      aggregated type will be returned. Thus after the aggregation constants will be
      coerced to the aggregated type. 
      
      
      mysql-test/t/func_in.test:
        Added test case for bug#18360: Incorrect type coercion in IN() results in false comparison.
      mysql-test/r/func_in.result:
        Added test case for bug#18360: Incorrect type coercion in IN() results in false comparison.
      sql/item_cmpfunc.cc:
        Fixed bug#18360: Incorrect type coercion in IN() results in false comparison.
        The agg_cmp_type() function now aggregates types of constant and non-constant
        items separately. If some non-constant items will be found then their
        aggregated type will be returned. Thus after the aggregation constants will
        be coerced to the aggregated type.
      a719dc38
  24. 18 May, 2006 1 commit
    • unknown's avatar
      Fixed bug #19816. · eb2f3bad
      unknown authored
      This bug was introduced when the patch resolving the
      performance problem 17164 was applied. As a result
      of that modification the not_null_tables attributes
      were calculated incorrectly for constant OR conditions.
      This triggered invalid conversion of outer joins into
      inner joins.
      
      
      mysql-test/r/join_outer.result:
        Added a test case for bug #19816.
      mysql-test/t/join_outer.test:
        Added a test case for bug #19816.
      eb2f3bad
  25. 17 May, 2006 1 commit
    • unknown's avatar
      Fixed bug#19077: A nested materialized derived table is used before being populated. · 5e38e2ce
      unknown authored
      The convert_constant_item() function converts constant items to ints on
      prepare phase to optimize execution speed. In this case it tries to evaluate
      subselect which contains a derived table and is contained in a derived table. 
      All derived tables are filled only after all derived tables are prepared.
      So evaluation of subselect with derived table at the prepare phase will
      return a wrong result.
      
      A new flag with_subselect is added to the Item class. It indicates that
      expression which this item represents is a subselect or contains a subselect.
      It is set to 0 by default. It is set to 1 in the Item_subselect constructor
      for subselects.
      For Item_func and Item_cond derived classes it is set after fixing any argument
      in Item_func::fix_fields() and Item_cond::fix_fields accordingly.
      The convert_constant_item() function now doesn't convert a constant item
      if the with_subselect flag set in it. 
      
      
      mysql-test/t/view.test:
        Added test case for bug#19077: A nested materialized derived table is used before being populated.
      mysql-test/t/subselect.test:
        Added test case for bug#19077: A nested materialized derived table is used before being populated.
      mysql-test/r/view.result:
        Added test case for bug#19077: A nested materialized derived table is used before being populated.
      mysql-test/r/subselect.result:
        Added test case for bug#19077: A nested materialized derived table is used before being populated.
      sql/item_subselect.cc:
        Fixed bug#19077: A nested materialized derived table is used before being populated.
        The Item_subselect class constructor sets new with_subselect flag to 1.
      sql/item_func.cc:
        Fixed bug#19077: A nested materialized derived table is used before being populated.
        
        The Item_func::fix_fields() sets new with_subselect flag from with_subselect flags of its arguments.
      sql/item_cmpfunc.cc:
        Fixed bug#19077: A nested materialized derived table is used before being populated.
        The convert_constant_item() function now doesn't convert a constant item
        with the with_subselect flag set.
        The Item_cond::fix_fields() sets new with_subselect flag from with_subselect flags of its arguments.
      sql/item.cc:
        Fixed bug#19077: A nested materialized derived table is used before being populated.
        Set new with_subselect flag to default value - 0 in the Item constructor.
      sql/item.h:
        Fixed bug#19077: A nested materialized derived table is used before being populated.
        A new flag with_subselect is added to the Item class. It indicates that
        expression which this item represents is a subselect or contains a subselect.
        It is set to 0 by default.
      5e38e2ce
  26. 21 Apr, 2006 1 commit
  27. 11 Apr, 2006 1 commit
    • unknown's avatar
      Fixed bug #18618. · fc74f6b4
      unknown authored
      If the second or the third argument of a BETWEEN predicate was
      a constant expression, like '2005.09.01' - INTERVAL 6 MONTH,
      while the other two arguments were fields then the predicate 
      was evaluated incorrectly and the query returned a wrong
      result set.
      The bug was introduced in 5.0.17 when in the fix for 12612.
      
      
      mysql-test/r/func_time.result:
        Added a test case for bug #18618.
      mysql-test/t/func_time.test:
        Added a test case for bug #18618.
      fc74f6b4
  28. 08 Apr, 2006 1 commit
    • unknown's avatar
      Fixed bug #16069. · 248317e9
      unknown authored
      The function agg_cmp_type in item_cmpfunc.cc neglected the fact that 
      the first argument in a BETWEEN/IN predicate could be a field of a view.
      As a result in the case when the retrieved table was hidden by a view 
      over it and the arguments in the BETWEEN/IN predicates are of 
      the date/time type the function did not perform conversion of 
      the constant arguments to the same format as the first field argument.
      If formats of the arguments differed it caused wrong a evaluation of
      the predicates.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #16069.
      mysql-test/t/view.test:
        Added a test case for bug #16069.
      248317e9
  29. 04 Apr, 2006 1 commit
  30. 01 Apr, 2006 1 commit
    • unknown's avatar
      Fixed bug #16504. · 62302ad0
      unknown authored
      Multiple equalities were not adjusted after reading constant tables.
      It resulted in neglecting good index based methods that could be
      used to access of other tables.
      
      
      mysql-test/r/having.result:
        Adjusted a test case results after fix for bug #16504.
      mysql-test/r/select.result:
        Added a test case for bug #16504.
      mysql-test/r/subselect.result:
        Adjusted a test case results after fix for bug #16504.
      mysql-test/r/varbinary.result:
        Adjusted a test case results after fix for bug #16504.
      mysql-test/t/select.test:
        Added a test case for bug #16504.
      sql/item.cc:
        Fixed bug #16504.
        An Item_equal object may contain only a constant member.
        It may happen after reading constant tables.
      sql/item_cmpfunc.cc:
        Fixed bug #16504.
        Added method Item_equal::check_const that check appearance of new 
        constant items in a multiple equality.
      sql/item_cmpfunc.h:
        Fixed bug #16504.
        Added method Item_equal::check_const that check appearance of new 
        constant items in a multiple equality.
      sql/sql_select.cc:
        Fixed bug #16504.
        Adjusted multiple equalities after reading constant tables.
        Fixed a few typo in comments.
      62302ad0
  31. 24 Mar, 2006 1 commit
    • unknown's avatar
      Fixed bug #17164. · 2286b3a6
      unknown authored
      If the WHERE condition of a query contained an ORed FALSE term
      then the set of tables whose rows cannot serve for null complements
      in outer joins was determined incorrectly. It resulted in blocking 
      possible conversions of outer joins into joins for such queries.
      
      
      mysql-test/r/join_outer.result:
        Added a test case for bug #17164.
      mysql-test/t/join_outer.test:
        Added a test case for bug #17164.
      2286b3a6
  32. 06 Mar, 2006 1 commit
  33. 03 Mar, 2006 2 commits
    • unknown's avatar
      Fixed bug#17726: Not checked empty list caused endless loop · 24e341a3
      unknown authored
      When the Item_cond::fix_fields() function reduces cond tree, it in loop
      scans it's own list and when it founds Item_cond with same function (AND
      or OR) it does next things: 1) replaces that item with item's list. 2)
      empties item's list. Due to this operation is done twice - for update and
      for view, at the update phase cond's list of lower view is already empty.
      Empty list returns ref to itself, thus making endless loop by replacing
      list with itself, emptying, replacing again and so on. This results in
      server hung up.
      
      To the Item_cond::fix_fields() function added check that ensures that
      list being replaced with isn't empty.
      
      
      mysql-test/t/view.test:
        Added test for bug#17726: Not checked empty list caused endless loop
      mysql-test/r/view.result:
        Added test for bug#17726: Not checked empty list caused endless loop
      sql/item_cmpfunc.cc:
        Fixed bug#17726: Not checked empty list caused endless loop
        To the Item_cond::fix_fields() function added check that ensures that
        list being replaced with isn't empty.
      24e341a3
    • unknown's avatar
      Fix for bug#17826 'type_decimal' fails with ps-protocol · 4bdb560f
      unknown authored
       removed unnecessary calculation of cache value 
       otherwise Join::preapre tries to calculate 
       undefined values(filed values)
      
      
      mysql-test/r/type_decimal.result:
        Fix for bug#17826 'type_decimal' fails with ps-protocol
         test case, this test case reproduce the same bug but without PS protocol
      mysql-test/t/type_decimal.test:
        Fix for bug#17826 'type_decimal' fails with ps-protocol
         test case, this test case reproduce the same bug but without PS protocol
      4bdb560f
  34. 01 Mar, 2006 1 commit
    • unknown's avatar
      bug #9088 (bigint WHERE fails) · f0c667ba
      unknown authored
      mysql-test/r/bigint.result:
        test result
      mysql-test/t/bigint.test:
        testcase
      sql/item.h:
        unsigned_arg is a separate parameter now
      sql/item_cmpfunc.cc:
        we can get unsigned field from the signed Item - from string
        like '1234'
      f0c667ba
  35. 14 Feb, 2006 1 commit
    • unknown's avatar
      Fixed bug#16272: IF function with decimal args can produce wrong result · d77db0d8
      unknown authored
      The Item_func_if::fix_length_and_dec() function when calculating length of 
      result doesn't take into account unsigned_flag. But it is taken when 
      calculating length of temporary field. This result in creating field that 
      shorter than needed. Due to this, in the reported query 40.0 converted to 9.99.
      
      The function Item_func_if::fix_length_and_dec() now adds 1 to the max_length if 
      the unsigned_flag isn't set.
      
      
      sql/item_cmpfunc.cc:
        Fixed bug#16272: IF function with decimal args can produce wrong result
        The function Item_func_if::fix_length_and_dec() now adds 1 to the max_length if 
        the unsigned_flag isn't set.
      mysql-test/r/func_if.result:
        Added test case for bug#16272: IF function with decimal args can produce wrong result
      mysql-test/t/func_if.test:
        Added test case for bug#16272: IF function with decimal args can produce wrong result
      d77db0d8
  36. 14 Jan, 2006 1 commit
    • unknown's avatar
      A fix and a test case for Bug#12734 " prepared statement may · 94b55395
      unknown authored
      return incorrect result set for a select SQL request"
      
      
      mysql-test/r/ps.result:
        Test results fixed (Bug#12734)
      mysql-test/t/ps.test:
        A test case for Bug#12734
      sql/item_cmpfunc.cc:
        Reset canDoTurboBM in Item_func_like::cleanup()
      sql/item_cmpfunc.h:
        Add Item_func_like::cleanup()
      94b55395
  37. 11 Jan, 2006 1 commit
    • unknown's avatar
      Fixed bug #15633: Evaluation of Item_equal for non-const table caused wrong · f107c706
      unknown authored
      select result
      
      Item equal objects are employed only at the optimize phase. Usually they are not
      supposed to be evaluated.  Yet in some cases we call the method val_int() for
      them. Here we have to take care of restricting the predicate such an object
      represents f1=f2= ...=fn to the projection of known fields fi1=...=fik.
      
      Added a check for field's table being const in Item_equal::val_int().
      If the field's table is not const val_int() just skips that field when
      evaluating Item_equal.
      
      
      mysql-test/t/select.test:
        Added test case for bug #15633: Evaluation of Item_equal for non-const table caused wrong select result
      mysql-test/r/select.result:
        Added test case for bug #15633: Evaluation of Item_equal for non-const table caused wrong select result
      mysql-test/r/func_group.result:
        Corrected test result for bug #12882 after fix for bug#15633
      sql/item_cmpfunc.h:
        Fixed bug #15633: Evaluation of Item_equal for non-const table caused wrong select result
        Added comment about fields from non-const tables in class description.
      sql/item_cmpfunc.cc:
        Fixed bug #15633: Evaluation of Item_equal for non-const table caused wrong select result
        Added check for field's table being const in Item_equal::val_int().
      f107c706