An error occurred fetching the project authors.
  1. 30 Jul, 2008 1 commit
    • Georgi Kodinov's avatar
      Bug#37662 nested if() inside sum() is parsed in exponential time · ae4a35fd
      Georgi Kodinov authored
            
      min() and max() functions are implemented in MySQL as macros.
      This means that max(a,b) is expanded to: ((a) > (b) ? (a) : (b))
      Note how 'a' is quoted two times.
      Now imagine 'a' is a recursive function call that's several 10s of levels deep.
      And the recursive function does max() with a function arg as well to dive into
      recursion.
      This means that simple function call can take most of the clock time.
      Identified and fixed several such calls to max()/min() : including the IF() 
      sql function implementation.
      
      mysql-test/r/func_if.result:
        Bug#37662 test case
      mysql-test/t/func_if.test:
        Bug#37662 test case
      sql/item.cc:
        Bug#37662 don't call expensive functions as arguments to min/max
      sql/item_cmpfunc.cc:
        Bug#37662 don't call expensive functions as arguments to min/max
      sql/item_func.cc:
        Bug#37662 don't call expensive functions as arguments to min/max
      ae4a35fd
  2. 27 Jun, 2008 1 commit
    • Gleb Shchepa's avatar
      backport from 6.0 · b83b4697
      Gleb Shchepa authored
            
      Bug#35658 (An empty binary value leads to mysqld crash)
              
      Before this fix, the following token
        b''
      caused the parser to crash when reading the binary value from the empty string.
      The crash was caused by:
        ptr+= max_length - 1;
      because max_length is unsigned and was 0, causing an overflow.
              
      With this fix, an empty binary literal b'' is parsed as a binary value 0,
      in Item_bin_string.
      
      mysql-test/r/varbinary.result:
        Bug#35658 (An empty binary value leads to mysqld crash)
      mysql-test/t/varbinary.test:
        Bug#35658 (An empty binary value leads to mysqld crash)
      sql/item.cc:
        Bug#35658 (An empty binary value leads to mysqld crash)
      b83b4697
  3. 21 Apr, 2008 1 commit
    • unknown's avatar
      BUG#36139 "float, zerofill, crash with subquery" · 1c1f0a62
      unknown authored
      - Make convert_zerofill_number_to_string() take into account that the 
        constant it is converting may evaluate to NULL.
      
      
      mysql-test/r/subselect.result:
        BUG#36139 "float, zerofill, crash with subquery"
        - Testcase
      mysql-test/t/subselect.test:
        BUG#36139 "float, zerofill, crash with subquery"
        - Testcase
      1c1f0a62
  4. 27 Mar, 2008 1 commit
    • unknown's avatar
      Bug#27219: Aggregate functions in ORDER BY. · 9d661efd
      unknown authored
      Mixing aggregate functions and non-grouping columns is not allowed in the
      ONLY_FULL_GROUP_BY mode. However in some cases the error wasn't thrown because
      of insufficient check.
      
      In order to check more thoroughly the new algorithm employs a list of outer
      fields used in a sum function and a SELECT_LEX::full_group_by_flag.
      Each non-outer field checked to find out whether it's aggregated or not and
      the current select is marked accordingly.
      All outer fields that are used under an aggregate function are added to the
      Item_sum::outer_fields list and later checked by the Item_sum::check_sum_func
      function.
      
      
      mysql-test/t/group_by.test:
        Added a test case for the bug#27219: Aggregate functions in ORDER BY.
      mysql-test/r/group_by.result:
        Added a test case for the bug#27219: Aggregate functions in ORDER BY.
      sql/sql_select.cc:
        Bug#27219: Aggregate functions in ORDER BY.
        Implementation of new check for mixing non aggregated fields and aggregation
        function in the ONLY_FULL_GROUP_BY mode.
      sql/sql_lex.cc:
        Bug#27219: Aggregate functions in ORDER BY.
        Initialization of the full_group_by_flag bitmap.
        SELECT_LEX::test_limit function doesn't reset ORDER BY
        clause anymore.
      sql/sql_lex.h:
        Bug#27219: Aggregate functions in ORDER BY.
        The full_group_by_flag is added to the SELECT_LEX class.
      sql/item_sum.h:
        Bug#27219: Aggregate functions in ORDER BY.
        The outer_fields list is added to the Item_sum class.
      sql/mysql_priv.h:
        Bug#27219: Aggregate functions in ORDER BY.
        Defined a set of constants used in the new check for mixing non aggregated
        fields and sum functions in the ONLY_FULL_GROUP_BY_MODE.
      sql/item_subselect.cc:
        Bug#27219: Aggregate functions in ORDER BY.
        The Item_in_subselect::select_in_like_transformer function now drops
        ORDER BY clause in all selects in a subquery.
      sql/item_sum.cc:
        Bug#27219: Aggregate functions in ORDER BY.
        Now the Item_sum::check_sum_func function now checks whether fields in the
        outer_fields list are aggregated or not and marks selects accordingly.
      sql/item.cc:
        Bug#27219: Aggregate functions in ORDER BY.
        Now the Item_field::fix_fields function checks whether the field is aggregated
        or not and marks its select_lex accordingly.
      9d661efd
  5. 14 Mar, 2008 1 commit
    • unknown's avatar
      Fixed bug #34763. · 9699767c
      unknown authored
      Queries like:
      
        SELECT ROW(1, 2) IN (SELECT t1.a, 2)
          FROM t1 GROUP BY t1.a
      
      or 
      
        SELECT ROW(1, 2) IN (SELECT t1.a, 2 FROM t2)
          FROM t1 GROUP BY t1.a
      
      lead to assertion failure in the
      Item_in_subselect::row_value_transformer method in debugging
      build, or to unexpected error message in release build:
      
        ERROR 1247 (42S22): Reference '<list ref>' not supported (forward
                            reference in item list)
      
      Unexpected error message and assertion failure have been
      eliminated.
      
      
      mysql-test/r/subselect3.result:
        Added test case for bug #34763.
      mysql-test/t/subselect3.test:
        Added test case for bug #34763.
      sql/item.cc:
        Fixed bug #34763.
        The Item_ref::fix_fields method has been modified to silently
        ignore not fixed outer references: by the definition, those
        references should be fixed later by the call to the
        fix_inner_refs function.
      sql/item_subselect.cc:
        Fixed bug #34763.
        The Item_in_subselect::row_value_transformer method has been
        modified to eliminate assertion failure on not fixed outer
        references: by the definition those references are allowed in
        this context and should be fixed later by the call to the
        fix_inner_refs function.
      9699767c
  6. 28 Feb, 2008 3 commits
    • unknown's avatar
      Post-merge fix for Bug 33851. The initialization order of members · 8b779456
      unknown authored
      must match the order which they were declared in the class definition. 
      
      
      sql/item.cc:
        Fix initialization order, parameter was the last one declared.
      8b779456
    • unknown's avatar
      Bug#33851 Passing UNSIGNED param to EXECUTE returns ERROR 1210 · 1164e2bc
      unknown authored
      The problem is that passing anything other than a integer to a limit
      clause in a prepared statement would fail. This limitation was introduced
      to avoid replication problems (e.g: replicating the statement with a
      string argument would cause a parse failure in the slave).
      
      The solution is to convert arguments to the limit clause to a integer
      value and use this converted value when persisting the query to the log.
      
      
      mysql-test/r/limit.result:
        Update test case result.
      mysql-test/r/ps.result:
        Add test case result for Bug#33851
      mysql-test/r/rpl_user_variables.result:
        Test case result for replication of prepared statement with
        limit clause.
      mysql-test/t/limit.test:
        Test parameters to limit clause.
      mysql-test/t/ps.test:
        Add test case for Bug#33851
      mysql-test/t/rpl_user_variables.test:
        Test replication of a parameter which value is converted.
      sql/item.cc:
        Convert value to integer if it's a parameter to a limit clause.
      sql/item.h:
        Flag signal that item is a parameter to a limit clause.
      sql/item_func.cc:
        Const member functions, object is not mutated.
      sql/sql_class.h:
        Const member functions, object is not mutated.
      sql/sql_yacc.yy:
        Flag that item is a parameter to a limit clause.
      1164e2bc
    • unknown's avatar
      Bug#34749: Server crash when using NAME_CONST() with an aggregate function · a0eec8ab
      unknown authored
      NAME_CONST('whatever', -1) * MAX(whatever) bombed since -1 was
      not seen as constant, but as FUNCTION_UNARY_MINUS(constant)
      while we are at the same time pretending it was a basic const
      item. This confused the aggregate handlers in exciting ways.
      We now make NAME_CONST() behave more consistently.
      
      
      mysql-test/r/func_misc.result:
        show that a combination of NAME_CONST('x', -y) and an aggregate
        no longer crashes the server.
      mysql-test/t/func_misc.test:
        show that a combination of NAME_CONST('x', -y) and an aggregate
        no longer crashes the server.
      sql/ha_ndbcluster_cond.cc:
        tell cluster about "new" function type NEG_FUNC.
        (this was previous identified as UNKNOWN_FUNC,
        so we just handle it the same way, that's all.)
      sql/ha_ndbcluster_cond.h:
        tell cluster about "new" function type NEG_FUNC.
        (this was previous identified as UNKNOWN_FUNC,
        so we just handle it the same way, that's all.)
      sql/item.cc:
        make NAME_CONST() transparent in that type() of
        -constant is that of constant, not that of unary
        minus (id est, FUNC_ITEM).
      sql/item.h:
        Move constructor to item.cc
      sql/item_func.h:
        Revert Bug#30832; we can apply the magic more narrowly
        (just for NAME_CONST() rather than all Item_func_neg).
        
        Introduce new function type "NEG_FUNC."
      a0eec8ab
  7. 19 Feb, 2008 1 commit
    • unknown's avatar
      BUG#34289 - Incorrect NAME_CONST substitution in stored procedures · f802cd51
      unknown authored
                  breaks replication
      
      NAME_CONST() didn't replicate constant character set and collation
      correctly.
      
      With this fix NAME_CONST() inherits collation from the value argument.
      
      
      mysql-test/r/func_misc.result:
        A test case for BUG#34289.
      mysql-test/t/func_misc.test:
        A test case for BUG#34289.
      sql/item.cc:
        Inherit collation from value argument.
      f802cd51
  8. 15 Feb, 2008 1 commit
    • unknown's avatar
      Bug #31887: DML Select statement not returning same results · cc2e929a
      unknown authored
      when executed in version 5
      
      Zero fill is a field attribute only. So we can't always 
      propagate  constants for zerofill fields : the values and 
      expression results don't have that flag.
      
      Fixed by converting the const value to a string and 
      using that in const propagation when the context allows it. 
      Disable const propagation for fields with ZEROFILL flag in
      all the other cases.
      
      
      mysql-test/r/compare.result:
        Bug #31887: test case
      mysql-test/t/compare.test:
        Bug #31887: test case
      sql/item.cc:
        Bug #31887: If the context allows conversion
        of an int constant to a zero-filled string constant
        put the string constant instead of the int constant
        when doing const propagation
      sql/mysql_priv.h:
        Bug #31887: a macro to get all the Field_num
        descendant fields.
      cc2e929a
  9. 12 Feb, 2008 1 commit
    • unknown's avatar
      Fix for bug #33389: Selecting from a view into a table from within SP · d5092fa9
      unknown authored
                          or trigger crashes server
      
      Under some circumstances a combination of VIEWs, subselects with outer
      references and PS/SP/triggers could lead to use of uninitialized memory
      and server crash as a result.
      
      Fixed by changing the code in Item_field::fix_fields() so that in cases
      when the field is a VIEW reference, we first check whether the field
      is also an outer reference, and mark it appropriately before returning.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #33389.
      mysql-test/t/view.test:
        Added a test case for bug #33389.
      sql/item.cc:
        In cases when in Item_field::fix_fields() from_field is a view reference,
        do not return too early, i.e. before marking the reference as an outer
        one when needed.
      d5092fa9
  10. 08 Feb, 2008 1 commit
    • unknown's avatar
      Bug#33798 prepared statements improperly handle large unsigned ints · 7d98c21c
      unknown authored
      The unsignedness of large integer user variables was not being
      properly preserved when feeded to prepared statements. This was
      happening because the unsigned flags wasn't being updated when
      converting the user variable is converted to a parameter.
      
      The solution is to copy the unsigned flag when converting the
      user variable to a parameter and take the unsigned flag into
      account when converting the integer to a string.
      
      
      mysql-test/r/binlog.result:
        Add test case result for Bug#33798
      mysql-test/r/ps.result:
        Add test case result for Bug#33798
      mysql-test/t/binlog.test:
        Add test case for Bug#33798
      mysql-test/t/ps.test:
        Add test case for Bug#33798
      sql/item.cc:
        Take the unsigned flag into account when converting the
        user variable.
      7d98c21c
  11. 27 Jan, 2008 1 commit
    • unknown's avatar
      Fixed bug #33833. · e30a0dda
      unknown authored
      Two disjuncts containing equalities of the form key=const1 and key=const2 can
      be merged into one if const1 is equal to const2. To check it the common 
      collation of the constants were used rather than the collation of the field key.
      For example when the default collation of the constants was cases insensitive
      while the collation of the field was case sensitive, then two or-ed equality 
      predicates key='b' and key='B' incorrectly were merged into one f='b'. As a 
      result ref access was used instead of range access and wrong result sets were 
      returned in many cases. 
      Fixed the problem by comparing constant in the or-ed predicate with collation of
      the key field.
      
      
      mysql-test/r/range.result:
        Added a test case for bug #33833.
      mysql-test/t/range.test:
        Added a test case for bug #33833.
      sql/item.cc:
        Fixed bug #33833.
        Added the method eq_by_collation that compares two items almost as 
        the method Item::eq, but it rather enforces a given collation for
        the comparison.
      sql/item.h:
        Fixed bug #33833.
        Added the method eq_by_collation that compares two items almost as 
        the method Item::eq, but it rather enforces a given collation for
        the comparison.
      e30a0dda
  12. 11 Jan, 2008 1 commit
    • unknown's avatar
      Bug#31797: error while parsing subqueries -- WHERE is parsed as HAVING · df8e9fc2
      unknown authored
      The name resolution for correlated subqueries and HAVING clauses
      failed to distinguish which of two was being performed when there 
      was a reference to an outer aliased field.
      Fixed by adding the condition that HAVING clause name resulotion
      is being performed.
      
      
      mysql-test/r/group_by.result:
        Bug#31797: Test result
      mysql-test/t/group_by.test:
        Bug#31797: Test case
      sql/item.cc:
        Bug#31797: 
        Corrected function comment.
        The fix, raising the error is restricted to HAVING name resolution.
      df8e9fc2
  13. 21 Dec, 2007 1 commit
    • unknown's avatar
      Bug #33256: CREATE ... SELECT creates obsolete table · 2ae4b047
      unknown authored
       w/ Field_date instead of Field_newdate
        
      Field_date was still used in temp table creation.
      Fixed by using Field_newdate consistently throughout the server
      except when reading tables defined with older MySQL version.
      No test suite is possible because both Field_date and Field_newdate
      return the same values in all the metadata calls. 
      
      
      mysql-test/r/type_decimal.result:
        Bug #33256: removed redundant warnings
      sql/field.h:
        Bug #33256: Add a constructor similar to Field_date::Field_date()
      sql/item.cc:
        Bug #33256: Use Field_newdate instead of Field_date 
        for all temp tables and CREATE .. SELECT
      sql/item_sum.cc:
        Bug #33256: Use Field_newdate instead of Field_date 
        for all temp tables and CREATE .. SELECT
      sql/item_timefunc.cc:
        Bug #33256: Use Field_newdate instead of Field_date 
        for all temp tables and CREATE .. SELECT
      sql/item_timefunc.h:
        Bug #33256: Use Field_newdate instead of Field_date 
        for all temp tables and CREATE .. SELECT
      2ae4b047
  14. 11 Dec, 2007 1 commit
    • unknown's avatar
      Bug#32848: Data type conversion bug in union subselects in MySQL 5.0.38 · 94f75ffc
      unknown authored
      There were two problems when inferring the correct field types resulting from
      UNION queries.
      - If the type is NULL for all corresponding fields in the UNION, the resulting 
        type would be NULL, while the type is BINARY(0) if there is just a single 
        SELECT NULL.
      - If one SELECT in the UNION uses a subselect, a temporary table is created
        to represent the subselect, and the result type defaults to a STRING type,
        hiding the fact that the type was unknown(just a NULL value).
      Fixed by remembering whenever a field was created from a NULL value and pass
      type NULL to the type coercion if that is the case, and creating a string field
      as result of UNION only if the type would otherwise be NULL.
      
      
      mysql-test/r/union.result:
        Bug#32848: Test result
      mysql-test/t/union.test:
        Bug#32848: Test case
      sql/field.cc:
        Bug#32848: Initialization of new field
      sql/field.h:
        Bug#32848: New member to record when a field was created from a NULL value.
      sql/item.cc:
        Bug#32848: 
        A field created from a NULL value will submit NULL as type to the 
        type coercion procedure.
        If Item_type_holder has not inferred the correct type after processing all
        SELECTs in a UNION, a string field is created.
      sql/sql_select.cc:
        Bug#32848: Recording when a field is created from a NULL value.
      94f75ffc
  15. 08 Dec, 2007 1 commit
    • unknown's avatar
      Fixed bug #27545. · b1b2e0d0
      unknown authored
      Both arguments of the function NAME_CONST must be constant expressions.
      This constraint is checked in the Item_name_const::fix_fields method. 
      Yet if the argument of the function was not a constant expression no
      error message was reported. As a result the client hanged waiting for a
      response.
      Now the function Item_name_const::fix_fields reports an error message
      when any of the additional context conditions imposed on the function
      NAME_CONST is not satisfied. 
      
      
      mysql-test/r/func_misc.result:
        Added a test case for bug #26545.
      mysql-test/t/func_misc.test:
        Added a test case for bug #26545.
      b1b2e0d0
  16. 27 Nov, 2007 1 commit
    • unknown's avatar
      Fix for bug #32559: connection hangs on query with name_const · ba974f83
      unknown authored
      Problem: passing a non-constant name to the NAME_CONST function results in a crash.
      
      Fix: check the NAME_CONST name argument; return fake item type if we got
      non-constant argument(s).
      
      
      mysql-test/r/func_misc.result:
        Fix for bug #32559: connection hangs on query with name_const
          - test result.
      mysql-test/t/func_misc.test:
        Fix for bug #32559: connection hangs on query with name_const
          - test case.
      sql/item.cc:
        Fix for bug #32559: connection hangs on query with name_const
          - Item_name_const::type() now returns NULL_ITEM if non-constant arguments 
            were used to create the item to avoid wrong type casting.
      sql/item.h:
        Fix for bug #32559: connection hangs on query with name_const
          - NAME_CONST name argument checked for invariability.
      ba974f83
  17. 20 Nov, 2007 1 commit
    • unknown's avatar
      Bug #32400: Complex SELECT query returns correct result · 870d4681
      unknown authored
       only on some occasions
      
      Referencing an element from the SELECT list in a WHERE 
      clause is not permitted. The namespace of the WHERE
      clause is the table columns only. This was not enforced
      correctly when resolving outer references in sub-queries.
      
      Fixed by not allowing references to aliases in a 
      sub-query in WHERE.
      
      
      mysql-test/include/ps_query.inc:
        Bug #32400: fixed old test queries
      mysql-test/r/ps_2myisam.result:
        Bug #32400: fixed old test queries
      mysql-test/r/ps_3innodb.result:
        Bug #32400: fixed old test queries
      mysql-test/r/ps_4heap.result:
        Bug #32400: fixed old test queries
      mysql-test/r/ps_5merge.result:
        Bug #32400: fixed old test queries
      mysql-test/r/ps_6bdb.result:
        Bug #32400: fixed old test queries
      mysql-test/r/ps_7ndb.result:
        Bug #32400: fixed old test queries
      mysql-test/r/subselect.result:
        Bug #32400: test case
      mysql-test/t/subselect.test:
        Bug #32400: test case
      sql/item.cc:
        Bug #32400: don't allow references to aliases in WHERE
      tests/mysql_client_test.c:
        Bug #32400: fixed old test queries
      870d4681
  18. 13 Nov, 2007 1 commit
    • unknown's avatar
      Bug #31562: HAVING and lower case · 170ae2d2
      unknown authored
      The columns in HAVING can reference the GROUP BY and 
      SELECT columns. There can be "table" prefixes when
      referencing these columns. And these "table" prefixes
      in HAVING use the table alias if available.
      This means that table aliases are subject to the same
      storage rules as table names and are dependent on 
      lower_case_table_names in the same way as the table 
      names are.
      Fixed by :
      1. Treating table aliases as table names
      and make them lowercase when printing out the SQL
      statement for view persistence.
      2. Using case insensitive comparison for table 
      aliases when requested by lower_case_table_names
      
      
      mysql-test/r/lowercase_view.result:
        Bug #31562: test case
      mysql-test/t/lowercase_view.test:
        Bug #31562: test case
      sql/item.cc:
        Bug #31562: lower_case_table_name contious comparison
        when searching in GROUP BY
      sql/sql_base.cc:
        Bug #31562: lower_case_table_name contious comparison
        when searching in SELECT
      sql/sql_select.cc:
        Bug #31562: treat table aliases as table names
        and make them lowercase when printing
      170ae2d2
  19. 10 Nov, 2007 1 commit
    • unknown's avatar
      Fixed bug #28076: inconsistent binary/varbinary comparison. · e7c6a81f
      unknown authored
      After adding an index the <VARBINARY> IN (SELECT <BINARY> ...)
      clause returned a wrong result: the VARBINARY value was illegally padded
      with zero bytes to the length of the BINARY column for the index search.
      (<VARBINARY>, ...) IN (SELECT <BINARY>, ... ) clauses are affected too.
      
      
      sql/item.cc:
        Fixed bug #28076.
        The Item_cache_str::save_in_field method has been overloaded
        to check cached values for an illegal padding before the saving
        into a field.
      sql/item.h:
        Fixed bug #28076.
        The Item_cache_str::is_varbinary flag has been added and the
        Item_cache_str::save_in_field method has been overloaded to prevent
        cached values from an illegal padding when saving in fields.
        The signature of the Item_cache::get_cache method has been
        changed to accept pointers to Item instead of Item_result
        values.
      sql/item_cmpfunc.cc:
        Fixed bug #28076.
        The Item_in_optimizer::fix_left method has been modified to
        to call Item_cache::get_cache in a new manner.
      sql/item_subselect.cc:
        Fixed bug #28076.
        The subselect_indexsubquery_engine::exec method has been
        modified to take into account field conversion errors
        (copy&paste from subselect_uniquesubquery_engine::exec).
      sql/sp_rcontext.cc:
        Fixed bug #28076.
        The sp_rcontext::create_case_expr_holder method has been
        modified to call Item_cache::get_cache in a new manner.
      sql/sp_rcontext.h:
        Fixed bug #28076.
        The sp_rcontext::create_case_expr_holder method signature
        has been modified to pass Item pointers to the
        Item_cache::get_cache method.
      sql/sql_class.cc:
        Fixed bug #28076.
        The select_max_min_finder_subselect::send_data method has been
        modified to call Item_cache::get_cache in a new manner.
      mysql-test/t/subselect.test:
        Added test case for bug #28076.
      mysql-test/r/subselect.result:
        Added test case for bug #28076.
      e7c6a81f
  20. 23 Oct, 2007 1 commit
    • unknown's avatar
      BUG#31450: Query causes error 1048 · 53dac1ee
      unknown authored
      - Let Item::save_in_field() call set_field_to_null_with_conversions() 
        for decimal type, like this is done for the other item result types.
      
      
      mysql-test/r/type_decimal.result:
        BUG#31450: Query causes error 1048: testcase
      mysql-test/t/type_decimal.test:
        BUG#31450: Query causes error 1048: testcase
      53dac1ee
  21. 22 Oct, 2007 1 commit
    • unknown's avatar
      Bug #28687: Search fails on '0000-00-00' date after sql_mode change · 849bcf94
      unknown authored
      When doing indexed search the server constructs a key image for 
      faster comparison to the stored keys. While doing that it must not
      perform (and stop if they fail) the additional date checks that can 
      be turned on by the SQL mode because there already may be values in 
      the table that don't comply with the error checks.
      Fixed by ignoring these SQL mode bits while making the key image.
      
      
      mysql-test/r/type_date.result:
        Bug #28687: test case
      mysql-test/t/type_date.test:
        Bug #28687: test case
      sql/item.cc:
        Bug #28687: no invalid date warnings
      849bcf94
  22. 21 Oct, 2007 1 commit
    • unknown's avatar
      Bug #28550 "Potential bugs related to the return type of the CHAR function". · 04311fab
      unknown authored
        
      Since, as of MySQL 5.0.15, CHAR() arguments larger than 255 are converted into multiple result bytes, a single CHAR() argument can now take up to 4 bytes. This patch fixes Item_func_char::fix_length_and_dec() to take this into account.
        
      This patch also fixes a regression introduced by the patch for bug21513. As now we do not always have the 'name' member of Item set for Item_hex_string and Item_bin_string, an own print() method has been added to Item_hex_string so that it could correctly be printed by Item_func::print_args().
      
      
      mysql-test/r/func_str.result:
        Import patch bug288550.patch
      mysql-test/t/func_str.test:
        Import patch bug288550.patch
      sql/item.cc:
        Import patch bug288550.patch
      sql/item.h:
        Import patch bug288550.patch
      sql/item_strfunc.h:
        Import patch bug288550.patch
      04311fab
  23. 15 Oct, 2007 1 commit
    • unknown's avatar
      Bug#30986 Character set introducer followed by a HEX string can return bad result(addon) · 048006e2
      unknown authored
      issue an error if string has illegal characters
      
      
      mysql-test/r/ctype_utf8.result:
        issue an error if string has illegal characters
      mysql-test/t/ctype_utf8.test:
        issue an error if string has illegal characters
      sql/item.cc:
        issue an error if string has illegal characters
      sql/item.h:
        issue an error if string has illegal characters
      sql/sql_yacc.yy:
        issue an error if string has illegal characters
      048006e2
  24. 11 Oct, 2007 1 commit
    • unknown's avatar
      Bug#30981 CHAR(0x41 USING ucs2) doesn't add leading zero · f30eacb2
      unknown authored
      Bug#30982 CHAR(..USING..) can return a not-well-formed string
      Bug#30986 Character set introducer followed by a HEX string can return bad result
      check_well_formed_result moved to Item from Item_str_func
      fixed Item_func_char::val_str for proper ucs symbols converting
      added check for well formed strings for correct conversion of constants with underscore
      charset
      
      
      mysql-test/r/ctype_ucs.result:
        test result
      mysql-test/r/ctype_utf8.result:
        test result
      mysql-test/t/ctype_ucs.test:
        test case
      mysql-test/t/ctype_utf8.test:
        test case
      sql/item.cc:
        check_well_formed_result() moved from Item_str_func
      sql/item.h:
        check_well_formed_result() moved from Item_str_func
      sql/item_strfunc.cc:
        check_well_formed_result moved to Item
        fixed Item_func_char::val_str for proper ucs symbols converting
      sql/item_strfunc.h:
        check_well_formed_result moved to Item
      sql/sql_yacc.yy:
        added check for well formed string
      f30eacb2
  25. 05 Oct, 2007 1 commit
    • unknown's avatar
      Bug #31253: crash comparing datetime to double · 2e8ca84e
      unknown authored
      convert(<invalid time>, datetime) in WHERE caused crash as function
      returned (void*)NULL, but did not flag SQL NULL. It does now.
      
      
      mysql-test/r/type_datetime.result:
        show that convert() to datetime in a WHERE-clause will no longer crash
        the server on invalid input.
      mysql-test/t/type_datetime.test:
        show that convert() to datetime in a WHERE-clause will no longer crash
        the server on invalid input.
      sql/item.cc:
        When failing to process time values, do not just return (void*)NULL,
        but flag SQL NULL as well so no caller will try to process the 0x0L.
        This makes behaviour for Item::Item::val_decimal_from_date() and
        Item::Item::val_decimal_from_time() identical.
      2e8ca84e
  26. 04 Oct, 2007 1 commit
    • unknown's avatar
      Bug #31155 gis types in union'd select cause crash. · 813e6bcb
      unknown authored
      We use get_geometry_type() call to decide the exact type
      of a geometry field to be created (POINT, POLYGON etc)
      Though this function was only implemented for few items.
      In the bug's case we need to call this function for the
      Item_sum instance, where it was not implemented, what is
      the reason of the crash.
      Fixed by implementing virtual Item::get_geometry_type(),
      so it can be called for any Item.
      
      
      sql/item.h:
        Bug #31155 gis types in union'd select cause crash.
        virtual Item::geometry_type() added instead of
        various geometry_type() fucntions.
      sql/item.cc:
        Bug #31155 gis types in union'd select cause crash.
        
        Unified virtual ::get_geometry_type() function used
      sql/item_geofunc.cc:
        Bug #31155 gis types in union'd select cause crash.
        
        virtual Item::geometry_type() implemented for geo-Items.
        Mostly previous ::get_geometry_type() implementation changed
      sql/item_geofunc.h:
        Bug #31155 gis types in union'd select cause crash.
        
        get_geometry_type() declarations unified
      813e6bcb
  27. 28 Sep, 2007 1 commit
  28. 13 Sep, 2007 1 commit
    • unknown's avatar
      Fixed bug #27695. · 037a0f76
      unknown authored
      Declaring an all space column name in the SELECT FROM DUAL or in a view
      leads to misleading warning message:
      "Leading spaces are removed from name ' '".
      
      The Item::set_name method has been modified to raise warnings like
      "Name ' ' has become ''" in case of the truncation of an all
      space identifier to an empty string identifier instead of the
      "Leading spaces are removed from name ' '" warning message.
      
      
      sql/item.cc:
        Fixed bug #27695.
        The Item::set_name method has been modified to raise warnings like
        "Name ' ' has become ''" in case of the truncation of an all
        space identifier to an empty string identifier instead of the
        "Leading spaces are removed from name ' '" warning message.
      sql/share/errmsg.txt:
        Fixed bug #27695.
      mysql-test/t/select.test:
        Added test case for bug #27695.
      mysql-test/r/select.result:
        Added test case for bug #27695.
      037a0f76
  29. 20 Aug, 2007 1 commit
    • unknown's avatar
      Fixed bug #30287. · 7c3d5bc5
      unknown authored
      The server created temporary tables for filesort in the working directory
      instead of the specified tmpdir directory.
      
      
      sql/item.cc:
        Fixed bug #30287.
        The Item_field::set_field method has been modified to reset the any_privileges
        flag to false in case of system temporary table. This modification prevents the
        server from unnecessary checking of user privileges to access system temporary
        tables.
      sql/sql_select.cc:
        Fixed bug #30287.
        Bugfix for #29015 has been removed: TABLE_SHARE::table_name of system
        temporary tables contains full path to table file basename again.
      sql/sql_view.cc:
        Fixed bug #30287.
        Commentary has been added.
      7c3d5bc5
  30. 06 Aug, 2007 1 commit
    • unknown's avatar
      A fix and a test case for Bug#29306 "Truncated data in MS Access with decimal (3,1) columns in a · c7f2a5e7
      unknown authored
      VIEW".
      
      mysql_list_fields() C API function would incorrectly set MYSQL_FIELD::decimals
      member for some view columns.
      
      The problem was in an incomplete implementation of 
      Item_ident_for_show::make_field(), which is responsible for view
      columns metadata.
      
      
      sql/item.cc:
        A fix for Bug#29306 -- properly initialize decimals in 
        Item_ident_for_show::make_field
      tests/mysql_client_test.c:
        Add a test case forBug#29306. Fix warnings.
      c7f2a5e7
  31. 03 Aug, 2007 1 commit
    • unknown's avatar
      Bug#28875 Conversion between ASCII and LATIN1 charsets does not function · 53df09a9
      unknown authored
      (Regression, caused by a patch for the bug 22646).
      Problem: when result type of date_format() was changed from
      binary string to character string, mixing date_format()
      with a ascii column in CONCAT() stopped to work.
      Fix:
      - adding "repertoire" flag into DTCollation class,
      to mark items which can return only pure ASCII strings.
      - allow character set conversion from pure ASCII to other character sets.
      
      
      include/m_ctype.h:
        Defining new flags.
        Adding new function prototypes.
      mysql-test/r/ctype_ucs.result:
        Adding tests.
      mysql-test/r/ctype_utf8.result:
        Adding tests.
      mysql-test/r/func_time.result:
        Adding tests.
      mysql-test/t/ctype_ucs.test:
        Adding tests.
      mysql-test/t/ctype_utf8.test:
        Adding tests.
      mysql-test/t/func_time.test:
        Adding test.
      mysys/charset.c:
        Adding pure ASCII detection when loading a dynamic character set.
      sql/item.cc:
        - Moving detection of a Unicode superset into function.
        - Adding detection of a ASCII subset.
        - Adding creation of to-ASCII character set convertor when
          safe_charset_converter() failed and when the argument.
          repertoire is know to be pure ASCII.
      sql/item.h:
        - Adding "repertoire" member into DTCollation class.
        - Adding "repertoire" argument to constructors.
        - Adding new methods:
          set_repertoire_from_charset()
          set_repertoire_from_value()
      sql/item_func.cc:
        Adding "repertoire" argument.
      sql/item_strfunc.cc:
        Adding "repertoire" argument.
      sql/item_timefunc.cc:
        Initializing the result repertoire taking into account the "is_ascii"
        flag of the current locale.
      sql/sql_lex.cc:
        Detect 7bit strings, return in Lex->text_string_is_7bit.
      sql/sql_lex.h:
        Adding new member into LEX structure.
        Adding new member into Lex_input_stream
      sql/sql_string.cc:
        Allow simple copy from pure ASCII to a ASCII-based character set.
      sql/sql_yacc.yy:
        Depening on Lex->text_string_is_7bit and character set features,
        create Item_string with MY_REPERTOIRE_ASCII when it is possible.
      strings/conf_to_src.c:
        - Adding printing of the "MY_CS_PUREASCII" flag
        - Adding printing of copyright
      strings/ctype-extra.c:
        Recreating ctype-extra.c: ascii_general_ci and ascii_bin
        are now marked with MY_CS_PUREASCII flag.
      strings/ctype.c:
        Adding new functions.
      53df09a9
  32. 29 Jul, 2007 1 commit
    • unknown's avatar
      Fixed bug #30120. · 33fc4ad4
      unknown authored
      SP with local variables with non-ASCII names crashed the server.
      
      The server replaces SP local variable names with NAME_CONST calls
      when putting statements into the binary log. It used UTF8-encoded
      item names as variable names for the replacement inside NAME_CONST
      calls. However, statement string may be encoded by any
      known character set by the SET NAMES statement.
      The server used byte length of UTF8-encoded names to increment
      the position in the query string that led to array index overrun.
      
      
      sql/item.cc:
        Fixed bug #30120.
        The Item_splocal class constructor has been modified to
        accept new parameter `len_in_q': the byte length of
        variable name in the query string.
      sql/item.h:
        Fixed bug #30120.
        The Item_splocal class has been modified to keep new
        field `len_in_query': the byte length of variable name in
        the query string.
      sql/sp_head.cc:
        Fixed bug #30120.
        The subst_spvars function has been modified to increment
        position in the query string by the lengths of not
        encoded variable names instead of byte length of names
        encoded to UTF-8.
      sql/sql_yacc.yy:
        Fixed bug #30120.
        The simple_ident rule action has been modified to
        pass the byte length of the local variable name token
        to the Item_splocal object constructor.
      mysql-test/t/sp.test:
        Updated test case for bug #30120.
      mysql-test/r/sp.result:
        Updated test case for bug #30120.
      33fc4ad4
  33. 27 Jul, 2007 1 commit
    • unknown's avatar
      Bug #29878 Garbage data generation when executing SESSION_USER() on a slave. · d27bf14e
      unknown authored
      Item_func_user doesn't calculate anything in it's val_str() method,
      just returns saved str_value.
      Though Item::save_in_field method can destroy str_value, relying on
      val_str() return. As a result we get the garbage stored in field.
      
      We cannot use Item::save_in_field implementation for Item_func_user,
      reimplement it in simpler way.
      
      
      mysql-test/r/rpl_session_var.result:
        Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
        
        test result
      mysql-test/t/rpl_session_var.test:
        Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
        
        test case
      sql/item.cc:
        Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
        
        duplicating code moved to Item::save_str_in_field
      sql/item.h:
        Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
        
        duplicating code moved to Item::save_str_in_field
      sql/item_strfunc.h:
        Bug #29878 Garbage data generation when executing SESSION_USER() on a slave.
        
        Item_func_user::save_in_field implemented as simple storing str_value
      d27bf14e
  34. 06 Jul, 2007 1 commit
    • unknown's avatar
      Remove typedef st_table_list TABLE_LIST and always use name 'TABLE_LIST'. · 360a5ebc
      unknown authored
      The need arose when working on Bug 26141, where it became
      necessary to replace TABLE_LIST with its forward declaration in a few
      headers, and this involved a lot of s/TABLE_LIST/st_table_list/.
      Although other workarounds exist, this patch is in line
      with our general strategy of moving away from typedef-ed names.
      Sometime in future we might also rename TABLE_LIST to follow the
      coding style, but this is a huge change.
      
      
      sql/item.cc:
        st_table_list -> TABLE_LIST
      sql/item.h:
        st_table_list -> TABLE_LIST
      sql/mysql_priv.h:
        st_table_list -> TABLE_LIST
      sql/sql_base.cc:
        st_table_list -> TABLE_LIST
      sql/sql_lex.cc:
        st_table_list -> TABLE_LIST
      sql/sql_lex.h:
        st_table_list -> TABLE_LIST
      sql/sql_select.cc:
        st_table_list -> TABLE_LIST
      sql/sql_show.cc:
        st_table_list -> TABLE_LIST
      sql/sql_udf.h:
        Was not needed.
      sql/table.cc:
        st_table_list -> TABLE_LIST
      sql/table.h:
        st_table_list -> TABLE_LIST
      360a5ebc
  35. 29 Jun, 2007 1 commit
    • unknown's avatar
      Fixed bug #29205. · db397d16
      unknown authored
      When a UNION statement forced conversion of an UTF8
      charset value to a binary charset value, the byte
      length of the result values was truncated to the
      CHAR_LENGTH of the original UTF8 value.
      
      
      sql/item.cc:
        Fixed bug #29205.
        The calculation of data length was modified in
        the Item_type_holder::join_types method to take into
        account possible conversion of a multibyte charset
        value to a binary charset value, when each
        multibyte character is converted into a sequence
        of bytes (not to a single byte of binary charset).
      mysql-test/t/ctype_utf8.test:
        Updated test case for bug #29205.
      mysql-test/r/ctype_utf8.result:
        Updated test case for bug #29205.
      db397d16
  36. 20 Jun, 2007 2 commits
    • unknown's avatar
      Fixed bug #29104: assertion abort for grouping queries using views. · 39bf2b96
      unknown authored
      The abort happened when a query contained a conjunctive predicate
      of the form 'view column = constant' in the WHERE condition and 
      the grouping list also contained a reference to a view column yet
      a different one.
      
      Removed the failing assertion as invalid in a general case.
      
      Also fixed a bug that prevented applying some optimization for grouping
      queries using views. If the WHERE condition of such a query contains
      a conjunctive condition of the form 'view column = constant' and
      this view column is used in the grouping list then grouping by this
      column can be eliminated. The bug blocked performing this elimination.
      
      
      mysql-test/r/view.result:
        Added a test case for bug #29104.
      mysql-test/t/view.test:
        Added a test case for bug #29104.
      sql/item.cc:
        Fixed bug #29104: assertion abort for grouping queries using views.
        The abort happened when a query contained a conjunctive predicate
        of the form 'view column = constant' in the WHERE condition and 
        the grouping list also contained a reference to a view column yet
        a different one.
        
        Removed the failing assertion as invalid in a general case.
        
        Also fixed a bug that prevented applying some optimization for grouping
        queries using views. If the WHERE condition of such a query contains
        a conjunctive condition of the form 'view column = constant' and
        this view column is used in the grouping list then grouping by this
        column can be eliminated. The bug blocked performing this elimination.
        This bug was in the function Item_field::eq while the failing
        assertion was in the function Item_direct_view_ref::eq.
      39bf2b96
    • unknown's avatar
      Fixed bug #28898. · e855bf33
      unknown authored
      For a join query with GROUP BY and/or ORDER BY and a view reference
      in the FROM list the metadata erroneously showed empty table aliases
      and database names for the view columns.
      
      
      
      sql/item.h:
        Fixed bug #28898.
        Body of Item_ref::get_tmp_table_item method has been moved
        to item.cc file.
      mysql-test/t/metadata.test:
        Updated test case for bug #28898.
      sql/item.cc:
        Fixed bug #28898.
        The Item_ref::get_tmp_table_item method has been modified
        to copy pointers to the table alias and database name to the new
        Item_field object created for a field stored in the temporary
        table.
      mysql-test/r/metadata.result:
        Updated test case for bug #28898.
      sql/sql_select.cc:
        Fixed bug #28898.
        The change_to_use_tmp_fields function has been modified to
        to copy pointers to the table alias and database name from
        the Item_ref objects to the new Item_field objects created
        for fields stored in the temporary table.
      e855bf33
  37. 07 Jun, 2007 1 commit
    • unknown's avatar
      Bug#28763: Selecting geometry fields in UNION caused server crash. · 18310fab
      unknown authored
      This bug was introduced by the fix for the bug#27300. In this fix a section
      of code was added to the Item::tmp_table_field_from_field_type method.
      This section intended to create Field_geom fields for the Item_geometry_func
      class and its descendants. In order to get the geometry type of the current
      item it casted "this" to the Item_geometry_func* type. But the
      Item::tmp_table_field_from_field_type method is also used for creation of
      fields for UNION and in this case this method is called for an object of the
      Item_type_holder class and the cast to the Item_geometry_func* type causes 
      a server crash.
      
      Now the Item::tmp_table_field_from_field_type method correctly works when it's
      called for both the Item_type_holder and the Item_geometry_func classes.
      The new geometry_type variable is added to the Item_type_holder class.
      The new method called get_geometry_type is added to the Item_field
      and the Field classes. It returns geometry type from the field for the
      Item_field and the Field_geom classes and fails an assert for other Field
      descendants.
      
      
      sql/field.h:
        Bug#28763: Selecting geometry fields in UNION caused server crash.
        The new method called get_geometry_type is added to the Field class.
        It returns geometry type of the field for the Field_geom class
        and fails an assert for other Field descendants.
      sql/item.cc:
        Bug#28763: Selecting geometry fields in UNION caused server crash.
        Now the Item::tmp_table_field_from_field_type method correctly works when it's
        called for both the Item_type_holder and the Item_geometry_func classes.
      mysql-test/r/gis.result:
        Added a test case for the bug#28763: Selecting geometry fields in UNION caused server crash.
      mysql-test/t/gis.test:
        Added a test case for the bug#28763: Selecting geometry fields in UNION caused server crash.
      sql/item.h:
        Bug#28763: Selecting geometry fields in UNION caused server crash.
        The new method called get_geometry_type is added to the Item_field class.
        It returns geometry type from the field.
        The new geometry_type variable is added to the Item_type_holder class.
      18310fab