• unknown's avatar
    Fixed bug #21698: erroneously a field could be replaced by an · 87166702
    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 its in/out argument to NULL for
      the nodes where substitution of a string field for a constant
      is not valid.
    sql/item_cmpfunc.cc:
      Fixed bug #21698.
      Added an implementation of the compile method for class Item_cond.
      First it processes the Item_cond node with a callback function and if
      the latter returns TRUE it proceeds with a transformation performed by
      another callback function.
    sql/item_cmpfunc.h:
      Fixed bug #21698.
      Added the implementations of 'subst_argument_checker'
      for the Item_func and Item_cond classes.
      This method is supposed to set its in/out argument to NULL for
      the nodes where substitution of a string field for a constant
      is not valid.
      Added the declaration of an implementation of the compile method for 
      class Item_cond.
      First it processes the Item_cond node with a callback function and if
      the latter returns TRUE it proceeds with a transformation performed by
      another callback function.
    sql/item_func.cc:
      Fixed bug #21698.
      Added an implementation of the compile method for class Item_func.
      First it processes the Item_func node with a callback function and if
      the latter returns TRUE it proceeds with a transformation performed by
      another callback function.
    sql/item_func.h:
      Fixed bug #21698.
      Added the declaration of the implementation of the compile method for
      class Item_func.
      First it processes the Item_func node with a callback function and if
      the latter returns TRUE it proceeds with a transformation performed by
      another callback function.
    sql/sql_select.cc:
      Fixed bug #21698.
      Limited the conditions at which a field can be substituted 
      a for an equal constant in a formula. 
      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.
    87166702
item_cmpfunc.cc 97.1 KB