An error occurred fetching the project authors.
  1. 19 Dec, 2006 1 commit
    • unknown's avatar
      Bug #24947: REPEAT function returns NULL when passed a field as the count parameter · 6cbf31ff
      unknown authored
      Handling of large signed/unsigned values was not consistent, so some string functions could return bogus results.
      The current fix is to simply patch up the val_str() methods for those string items.
      It would be good clean this code up in general, to make similar problems much harder to make.  This is left as an exercise for the reader.
      
      
      mysql-test/r/func_str.result:
        Update test results for bug #24947
      mysql-test/t/func_str.test:
        Add test case for bug #24947
      sql/item_strfunc.cc:
        Adjust some string function Items' val_str() methods to handle large signed/unsigned arguments properly
      6cbf31ff
  2. 30 Nov, 2006 2 commits
    • unknown's avatar
      Fixed portability issue in my_thr_init.c (was added in my last push) · 47cca173
      unknown authored
      Fixed compiler warnings (detected by VC++):
      - Removed not used variables
      - Added casts
      - Fixed wrong assignments to bool
      - Fixed wrong calls with bool arguments
      - Added missing argument to store(longlong), which caused wrong store method to be called.
      
      
      
      client/mysqldump.c:
        Removed compiler warning
      heap/hp_clear.c:
        Removed compiler warning
      include/my_global.h:
        Removed compiler warning
      include/my_tree.h:
        Changed memory limits from int to ulong
        (Allowed me to get rid of some compiler warnings)
      myisam/mi_create.c:
        Removed compiler warning
      myisam/myisampack.c:
        Removed compiler warning
      mysys/base64.c:
        Removed compiler warning
      mysys/my_thr_init.c:
        Fixed portability issue (detected on windows)
        Added DBUG_ASSERT to detect if we call my_thread_end() too many times
        Don't wait if THR_thread_count == -1 (error condition)
      mysys/tree.c:
        Removed compiler warning
      sql/field.cc:
        Removed compiler warning
        Fixed wrong parameter to check_date()
        Added missing argument to store(longlong)
      sql/ha_archive.cc:
        Removed compiler warning
      sql/ha_federated.cc:
        Removed compiler warning
      sql/ha_innodb.cc:
        Removed not used variable
      sql/handler.cc:
        Removed not used variable
        Fixed wrong if (we didn't detect if rollback or commit failed). Not critical as value is not yet used
      sql/item.cc:
        Removed compiler warning
      sql/item_func.cc:
        Removed compiler warning
      sql/item_strfunc.cc:
        Removed compiler warning
      sql/item_timefunc.cc:
        Removed compiler warning
      sql/log.cc:
        Removed compiler warning
      sql/mysql_priv.h:
        Removed compiler warning
      sql/opt_range.cc:
        Removed compiler warning
      sql/password.c:
        Removed compiler warning
      sql/set_var.cc:
        Removed compiler warning
      sql/slave.cc:
        Removed compiler warning
      sql/sp.cc:
        Removed compiler warning
      sql/sp_cache.cc:
        Removed compiler warning
      sql/sp_head.cc:
        Removed compiler warning
        Adjusted argument to reserve() to not use up too much memory that we are probably not going to need
      sql/sql_acl.cc:
        Added missing argument to store(longlong)
      sql/sql_base.cc:
        Removed compiler warning
      sql/sql_db.cc:
        Removed compiler warning
      sql/sql_delete.cc:
        Removed compiler warning
      sql/sql_handler.cc:
        Removed not used variable
      sql/sql_lex.h:
        Removed not used variable
      sql/sql_prepare.cc:
        Removed not used variable
      sql/sql_rename.cc:
        Removed not used variable
      sql/sql_select.cc:
        Fixed that select_options are not 'cut'
        Removed some not used variables
        Removed compiler warnings by adding cast
      sql/sql_show.cc:
        Removed not used variables
        Added missing argument to store(longlong)
        Removed compiler warnings
      sql/sql_trigger.cc:
        Removed not used variables
        Added cast to remove compiler warnings
      sql/sql_update.cc:
        Fixed wrong set of bool variable
      sql/sql_view.cc:
        Removed not used variables
        Added cast to get rid of compiler warnings
      sql-common/client.c:
        Fixed compiler warning
      sql-common/my_time.c:
        Fixed wrong argument to check_date()
        Added casts to get rid of compiler warnings
      sql/sql_yacc.yy:
        Removed not used variable
      sql/uniques.cc:
        Changes memory size from uint to ulong
        Added casts to get rid of compiler warnings
      strings/ctype-simple.c:
        Fixed cast to get rid of compiler warnings
      47cca173
    • unknown's avatar
      Fixed compiler warnings (Mostly VC++): · d2e04479
      unknown authored
      - Removed not used variables
      - Changed some ulong parameters/variables to ulonglong (possible serious bug)
      - Added casts to get rid of safe assignment from longlong to long (and similar)
      - Added casts to function parameters
      - Fixed signed/unsigned compares
      - Added some constructores to structures
      - Removed some not portable constructs
      
      Better fix for bug Bug #21428 "skipped 9 bytes from file: socket (3)" on "mysqladmin shutdown"
      (Added new parameter to net_clear() to define when we want the communication buffer to be emptied)
      
      
      client/mysql.cc:
        Removed not used variable
      client/mysqldump.c:
        Fixed compiler warning
      client/mysqlslap.c:
        Fixed compiler warning
      client/mysqltest.c:
        Fixed compiler warning
      extra/replace.c:
        Fixed compiler warning
      include/my_global.h:
        Fixed compiler warning
      include/mysql_com.h:
        Changed prototype for net_clear()
      libmysql/libmysql.c:
        Changed prototype for net_clear()
      mysys/base64.c:
        Fixed compiler warning (function definition and prototype didn't match)
      mysys/my_thr_init.c:
        AFter merge fixes
      mysys/my_vle.c:
        Fixed compiler warning
      sql/event_data_objects.cc:
        Fixed compiler warning
      sql/event_scheduler.cc:
        Removed not used variable
      sql/field.cc:
        Removed not used variables
        Fixed compiler warning
      sql/gen_lex_hash.cc:
        Fixed compiler warning
      sql/ha_partition.h:
        Fixed compiler warning
      sql/handler.cc:
        Fixed compiler warning
      sql/item.cc:
        Fixed compiler warning
      sql/item_create.cc:
        Fixed compiler warning
      sql/item_func.cc:
        Fixed compiler warning
      sql/item_strfunc.cc:
        Fixed compiler warning
      sql/item_timefunc.cc:
        Fixed compiler warning
      sql/item_xmlfunc.cc:
        Fixed compiler warning
      sql/log.cc:
        Fixed compiler warning
      sql/log_event.cc:
        Fixed compiler warning
      sql/log_event.h:
        Fixed compiler warning
      sql/mysql_priv.h:
        Fixed too short 'select_type'
      sql/net_serv.cc:
        Added argument to net_clear() if we should empty the communication buffer.
      sql/opt_range.cc:
        Fixed compiler warning
      sql/partition_info.cc:
        Fixed compiler warning
      sql/rpl_injector.h:
        Fixed compiler warning
      sql/set_var.cc:
        Fixed compiler warning
      sql/slave.cc:
        Fixed compiler warning
      sql/sp_head.cc:
        Fixed compiler warning
      sql/sql_base.cc:
        Fixed compiler warning
      sql/sql_db.cc:
        Fixed compiler warning
      sql/sql_delete.cc:
        Fixed compiler warning
      sql/sql_insert.cc:
        Fixed compiler warning
      sql/sql_lex.h:
        Fixed compiler warning
      sql/sql_parse.cc:
        Fixed compiler warning
      sql/sql_partition.cc:
        Fixed compiler warning
      sql/sql_plugin.cc:
        Fixed compiler warning
      sql/sql_prepare.cc:
        Fixed compiler warning
      sql/sql_rename.cc:
        Fixed compiler warning
      sql/sql_select.cc:
        Fixed compiler warning
      sql/sql_show.cc:
        Fixed compiler warning
      sql/sql_table.cc:
        Fixed compiler warning
      sql/sql_trigger.cc:
        Fixed compiler warning
      sql-common/client.c:
        Better fix for bug Bug #21428 "skipped 9 bytes from file: socket (3)" on "mysqladmin shutdown"
      sql-common/my_time.c:
        Fixed compiler warning
      sql/sql_union.cc:
        Fixed compiler warning
      sql/sql_update.cc:
        Fixed compiler warning
      sql/sql_view.cc:
        Fixed compiler warning
      sql/sql_yacc.yy:
        Fixed compiler warning
      sql/table.cc:
        Fixed compiler warning
      storage/archive/azio.c:
        Fixed compiler warning
      storage/csv/ha_tina.cc:
        Removed not used code
      storage/myisam/mi_unique.c:
        Fixed compiler warning
      storage/ndb/include/util/OutputStream.hpp:
        Fixed compiler warning
      storage/ndb/include/util/SocketAuthenticator.hpp:
        Fixed compiler warning
      storage/ndb/src/kernel/vm/Pool.hpp:
        Fixed compiler warning
      strings/ctype-simple.c:
        Fixed compiler warning
      strings/my_strchr.c:
        Fixed compiler warning
      d2e04479
  3. 27 Nov, 2006 1 commit
    • unknown's avatar
      Removed compiler warnings · 4555818f
      unknown authored
      Ensure that my_size_t is always unsigned (to get predictiable results from system to system)
      Removed some %lld, as these are not portable
      
      
      BUILD/FINISH.sh:
        Remove configure files from storage engines (as some of them may be old versions and may cause conflicts)
      client/mysqldump.c:
        Removed compiler warning
      client/mysqlslap.c:
        Removed compiler warning
      client/mysqltest.c:
        Removed compiler warning
      cmd-line-utils/readline/bind.c:
        Removed compiler warning
      cmd-line-utils/readline/histfile.c:
        Removed compiler warning
      include/my_global.h:
        Ensure that my_size_t is always unsigned (to get predictiable results from system to system)
        Moved my_offset_t here from parse_file.h
      sql/event_data_objects.cc:
        Removed compiler warning
      sql/event_scheduler.cc:
        Removed compiler warning
      sql/field.h:
        Removed compiler warning
      sql/ha_ndbcluster_binlog.cc:
        Removed compiler warning
      sql/ha_partition.cc:
        Removed compiler warning
      sql/item_strfunc.cc:
        Removed compiler warning
      sql/log_event.cc:
        Removed compiler warning
      sql/mysqld.cc:
        Removed compiler warning
      sql/parse_file.h:
        Moved my_offset_t to my_global.h
      sql/rpl_utility.cc:
        Removed compiler warning
      sql/sql_binlog.cc:
        Removed compiler warning
      sql/sql_cache.cc:
        Removed compiler warning
      sql/tztime.cc:
        Removed compiler warning
      storage/archive/ha_archive.cc:
        Removed compiler warning
        Removed %lld as it's not portable
      storage/heap/hp_write.c:
        Removed compiler warning
      storage/innobase/os/os0file.c:
        Removed compiler warning
      storage/myisam/myisampack.c:
        Removed compiler warning
      storage/myisammrg/myrg_rkey.c:
        Removed compiler warning
      storage/ndb/include/kernel/signaldata/DictTabInfo.hpp:
        Use my_offsetof instead of offsetof to get rid of compiler warnings
      storage/ndb/src/kernel/blocks/dbdict/printSchemaFile.cpp:
        Removed compiler warning
      storage/ndb/src/kernel/blocks/dbtup/DbtupRoutines.cpp:
        Removed compiler warning
        Note: Someone from NDB team should check this fix!
      storage/ndb/src/kernel/vm/Rope.cpp:
        Removed compiler warning
      storage/ndb/src/mgmapi/mgmapi.cpp:
        Removed compiler warning
      storage/ndb/src/ndbapi/Ndb.cpp:
        Removed compiler warning
      storage/ndb/src/ndbapi/NdbEventOperationImpl.cpp:
        Removed compiler warning
      storage/ndb/src/ndbapi/NdbScanOperation.cpp:
        Removed compiler warning
      storage/ndb/src/ndbapi/NdbTransaction.cpp:
        Removed compiler warning
      storage/ndb/src/ndbapi/Ndblist.cpp:
        Removed compiler warning
      4555818f
  4. 16 Nov, 2006 2 commits
    • unknown's avatar
      Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions) · 84391f91
      unknown authored
      Before this change, the functions BENCHMARK, ENCODE, DECODE and FORMAT could
      only accept a constant for some parameters.
      
      After this change, this restriction has been removed. An implication is that
      these functions can also be used in prepared statements.
      
      The change consist of changing the following classes:
      - Item_func_benchmark
      - Item_func_encode
      - Item_func_decode
      - Item_func_format
      to:
      - only accept Item* in the constructor,
      - and evaluate arguments during calls to val_xxx()
      which fits the general design of all the other functions.
      
      The 'TODO' items identified in item_create.cc during the work done for
      Bug 21114 are addressed by this fix, as a natural consequence of aligning
      the design.
      
      In the 'func_str' test, a single very long test line involving an explain
      extended select with many functions has been rewritten into multiple
      separate tests, to improve maintainability.
      The result of explain extended select decode(encode(...)) has changed,
      since the encode and decode functions now print all their parameters.
      
      
      mysql-test/r/func_str.result:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      mysql-test/r/parser.result:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      mysql-test/r/ps.result:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      mysql-test/t/func_str.test:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      mysql-test/t/parser.test:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      mysql-test/t/ps.test:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      sql/item_create.cc:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      sql/item_func.cc:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      sql/item_func.h:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      sql/item_strfunc.cc:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      sql/item_strfunc.h:
        Bug#22684 (BENCHMARK, ENCODE, DECODE and FORMAT are not real functions)
      84391f91
    • unknown's avatar
      Add 5.0 part of fix for bug 17047. · dd558e31
      unknown authored
      mysql-test/r/func_str.result:
        Add result for bug#17047: CHAR() and IN() can return NULL without
        signaling NULL result.
      mysql-test/t/func_str.test:
        Add test case for bug#17047: CHAR() and IN() can return NULL without
        signaling NULL result.
      sql/item_strfunc.cc:
        Add Item_str_func::fix_fields() implementation, and set maybe_null to
        TRUE if we are in the SQL mode that requires some functions to return
        null even if they normally do not.
      sql/item_strfunc.h:
        Add declaration of Item_str_func::fix_fields().
        Do not reset maybe_null in Item_func_char::fix_length_and_dec().
      dd558e31
  5. 08 Nov, 2006 1 commit
    • unknown's avatar
      Bug#10963: LEFT/RIGHT/SUBSTR/.. string functions returns wrong result \ · a86a98ba
      unknown authored
        on large length
        
      Problem:  Most (all) of the numeric inputs were being coerced into
      int (32 bit) sized variables.  Works OK for sane inputs; any input
      larger than 2^32 (or 2^31 for signed vars) exihibited predictable
      wrapping behavior (up to about 10^18) and then started having really
      strange behaviour past that point (since the conversion to 64 bit int
      from the DECIMAL type can do weird things on out of range numbers).
      
      Solution: 1)  Add many tests.  2)  Convert input from (u)long type to
      (u)longlong.  3)  Do (sometimes multiple) sanity checks on input,
      keeping in mind that sometimes a negative longlong is not a negative
      longlong (if the unsigned_flag is set).  4) Emulate existing behavior
      w/rt negative and "small" out-of-bounds values.
      
      
      mysql-test/r/func_str.result:
        Additional test results for #10963
      mysql-test/t/func_str.test:
        Additional test results for #10963
      sql/item_func.cc:
        Used larger type for counting, to avoid truncation.
      sql/item_strfunc.cc:
        Fix for #10963, including comments and cleaned up logic
      a86a98ba
  6. 13 Oct, 2006 1 commit
    • unknown's avatar
      Fix for bug #23254: COMPRESS(NULL) makes all futher COMPRESS() calls on same Item return NULL · 1dcb5963
      unknown authored
      We don't set null_value to 0 in the Item_func_compress::val_str() for 
      not-NULL results.
      
      
      mysql-test/r/func_compress.result:
        Fix for bug #23254: COMPRESS(NULL) makes all futher COMPRESS() calls on same Item return NULL
          - test result.
      mysql-test/t/func_compress.test:
        Fix for bug #23254: COMPRESS(NULL) makes all futher COMPRESS() calls on same Item return NULL
          - test case.
      sql/item_strfunc.cc:
        Fix for bug #23254: COMPRESS(NULL) makes all futher COMPRESS() calls on same Item return NULL
          - set null_value.
      1dcb5963
  7. 21 Sep, 2006 1 commit
    • unknown's avatar
      Fix for bug #20204: "order by" changes the results returned · 1ab32306
      unknown authored
      Item_substr's results are improperly stored in a temporary table due to       
      wrongly calculated max_length value for multi-byte charsets if two            
      arguments specified.                                                          
      
      
      mysql-test/r/ctype_utf8.result:
        Fix for bug #20204: "order by" changes the results returned
          - test case.
      mysql-test/t/ctype_utf8.test:
        Fix for bug #20204: "order by" changes the results returned
          - test result.
      sql/item_strfunc.cc:
        Fix for bug #20204: "order by" changes the results returned
          - always take into account current mbmaxlen value calculating max_length.
      1ab32306
  8. 24 Aug, 2006 2 commits
    • 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
    • unknown's avatar
      Bug #21531: EXPORT_SET() doesn't accept args with coercible character sets · 399b9b35
      unknown authored
      - Fix typo in Item_func_export_set::fix_length_and_dec() which caused character set aggregation to fail
      - Remove default argument from last arg of agg_arg_charsets() function, to reduce potential errors
      
      
      mysql-test/r/func_misc.result:
        Test EXPORT_SET() with charset coersion (bug #21531)
      mysql-test/t/func_misc.test:
        Test EXPORT_SET() with charset coersion (bug #21531)
      sql/item_func.h:
        Remove default argument from last arg of agg_arg_charsets() function, to reduce potential errors.
      sql/item_strfunc.cc:
        Fix typo in Item_func_export_set::fix_length_and_dec() which caused character set aggregation to fail.
      399b9b35
  9. 22 Aug, 2006 1 commit
    • unknown's avatar
      Bug#15583: BIN()/OCT()/CONV() do not work with BIT values · 065f5afc
      unknown authored
      Converting BIT to a string (an intermediate step in conversion) does 
      not yield an ASCII numeric string, so we skip that step for BIT and
      get the integer value directly from the item.
      
      This site in sql/item_strfunc.cc may be ripe for refactoring for
      other types as well, where converting to a string is a waste of time.
      
      
      mysql-test/r/type_bit.result:
        Test that conversion functions on BIT types work properly, including 
        NULL.
      mysql-test/t/type_bit.test:
        Test that conversion functions on BIT types work properly.
      sql/item_strfunc.cc:
        BIT is unlike the other numeric types, in that when we convert it
        to a String, it becomes a one-byte string with ordinal numeric value
        of the BIT field, not a several-byte string with the ASCII decimal
        representation.  As a special case for conversion functions, we take
        the integer directly from the bit type instead of representing it
        as a string in an intermediate step.
      065f5afc
  10. 11 Aug, 2006 1 commit
    • unknown's avatar
      Bug #20536: md5() with GROUP BY and UCS2 return different results on myisam/innodb · 202b1f48
      unknown authored
      Make the encryption functions MD5(), SHA1() and ENCRYPT() return binary results.
          
      Make MAKE_SET() and EXPORT_SET() use the correct character set for their default separator strings.
      
      
      mysql-test/r/ctype_ucs.result:
        Add tests for bug #20536.
      mysql-test/t/ctype_ucs.test:
        Add tests for bug #20536.
        
        Tests showing correct behavior for MD5(), SHA1(), MAKE_SET() and EXPORT_SET().
        
        Also, tests showing incorrect behavior, which will remain "Won't fix", for
        PASSWORD(), OLD_PASSWORD(), ENCRYPT() and QUOTE().
      sql/item_strfunc.cc:
        Make the encryption functions MD5(), SHA1() and ENCRYPT() return binary results.
        
        Make MAKE_SET() and EXPORT_SET() use the correct character set for their default separator strings.
      sql/item_strfunc.h:
        Make the encryption functions MD5(), SHA1() and ENCRYPT() return binary results.
      202b1f48
  11. 19 Jul, 2006 2 commits
    • unknown's avatar
      Added a test case with views for bug #17526. · 2fed1348
      unknown authored
      mysql-test/r/func_str.result:
        Adjusted results for the test case of bug 17526.
      sql/item_strfunc.cc:
        Post-merge modification
      2fed1348
    • unknown's avatar
      Fixed bug #17526: incorrect print method · fbf07364
      unknown authored
      for class Item_func_trim. 
      For 4.1 it caused wrong output for EXPLAIN EXTENDED commands
      if expressions with the TRIM function of two arguments were used.
      For 5.0 it caused an error message when trying to select
      from a view with the TRIM function of two arguments.
      This unexpected error message was due to the fact that the
      print method for the class Item_func_trim was inherited from
      the class Item_func. Yet the TRIM function does not take a list
      of its arguments. Rather it takes the arguments in the form:
        [{BOTH | LEADING | TRAILING} [remstr] FROM] str) |
        [remstr FROM] str
      
      
      mysql-test/r/func_str.result:
        Added a test case for bug #17526: uncorrect print method
        for class Item_func_trim.
      mysql-test/t/func_str.test:
        Added a test case for bug #17526: incorrect print method
        for class Item_func_trim.
      sql/item_strfunc.cc:
        Fixed bug #17526: incorrect print method
        for class Item_func_trim.
            
        Added an implementation for the virtual function print
        in the class Item_func_trim.
        The implementation takes into account the fact the TRIM
        function takes the arguments in the following forms:
          [{BOTH | LEADING | TRAILING} [remstr] FROM] str) |
          [remstr FROM] str
      sql/item_strfunc.h:
        Fixed bug #17526: incorrect print method
        for class Item_func_trim.
            
        Added an implementation for the virtual function print
        in the class Item_func_trim.
        Declared a virtual method to return the mode of the TRIM 
        function: LEADING, TRAILING or BOTH.
        Added implementations of this method for Item_func_trim and
        its descendants Item_func_ltrim and Item_func_rtrim.
      fbf07364
  12. 18 Jul, 2006 1 commit
    • unknown's avatar
      Bug#18539 uncompress(d) is null: impossible? · 4377083c
      unknown authored
       - Add a check that length of field to uncompress is longer than 4 bytes.
         This can be dones as the length of uncompressed data is written as 
         first four bytes of field and thus it can't be valid compressed data.
      
      
      mysql-test/r/func_compress.result:
        Update test results
      sql/item_strfunc.cc:
        Is size of field is less than or equal to 4 bytes, indicate data is uncompressable/corrupt.
      4377083c
  13. 07 Jul, 2006 1 commit
    • unknown's avatar
      func_str.result, func_str.test: · 65f63f5c
      unknown authored
        Adding test case.
      item_strfunc.cc:
        bug#11728 string function LEFT, strange undocumented behaviour
        Fixing LEFT and RIGHT return NULL if the second
        argument is NULL.
      
      
      sql/item_strfunc.cc:
        bug#11728 string function LEFT, strange undocumented behaviour
        Fixing LEFT and RIGHT return NULL if the second
        argument is NULL.
      mysql-test/t/func_str.test:
        Adding test case.
      mysql-test/r/func_str.result:
        Adding test case.
      65f63f5c
  14. 06 Jul, 2006 1 commit
    • unknown's avatar
      Fixed bug #18243. · 77e7f2ac
      unknown authored
      The implementation of the method Item_func_reverse::val_str
      for the REVERSE function modified the argument of the function.
      This led to wrong results for expressions that contained
      REVERSE(ref) if ref occurred somewhere else in the expressions.
      
      
      mysql-test/r/func_str.result:
        Added a test case for bug #18243.
      mysql-test/t/func_str.test:
        Added a test case for bug #18243.
      sql/item_strfunc.cc:
        Fixed bug #18243.
        The implementation of the method Item_func_reverse::val_str
        for the REVERSE function modified the argument of the function.
        This led to wrong results for expressions that contained
        REVERSE(ref) if ref occurred somewhere else in the expressions.
        
        The implementation of Item_func_reverse::val_str has been changed
        to make the argument intact.
      sql/item_strfunc.h:
        Fixed bug #18243.
        Added tmp_value to the Item_func_reverse class to store
        the result of the function. It erroneously replaced the 
        argument before this fix.
      77e7f2ac
  15. 02 Jul, 2006 1 commit
    • unknown's avatar
      Bug#20570: CURRENT_USER() in a VIEW with SQL SECURITY DEFINER returns · 539b441f
      unknown authored
                 invoker name
      
      The bug was fixed similar to how context switch is handled in
      Item_func_sp::execute_impl(): we store pointer to current
      Name_resolution_context in Item_func_current_user class, and use
      its Security_context in Item_func_current_user::fix_fields().
      
      
      mysql-test/r/view_grant.result:
        Add result for bug#20570.
      mysql-test/t/view_grant.test:
        Add test case for bug#20570.
      sql/item_create.cc:
        Remove create_func_current_user(), as it is not used for automatic
        function creation.
      sql/item_create.h:
        Remove prototype for create_func_current_user().
      sql/item_strfunc.cc:
        Add implementations for Item_func_user::init(),
        Item_func_user::fix_fields() and
        Item_func_current_user::fix_fields() methods.  The latter uses
        Security_context from current Name_resolution_context, if one is
        defined.
      sql/item_strfunc.h:
        Move implementation of CURRENT_USER() out of Item_func_user to
        to new Item_func_current_user class.  For both classes calculate
        user name in fix_fields() method.
        For Item_func_current_user add context field to store
        Name_resolution_context in effect.
      sql/sql_yacc.yy:
        Pass current Name_resolution_context to Item_func_current_user.
      539b441f
  16. 01 Jul, 2006 1 commit
    • unknown's avatar
      Bug#19006: 4.0 valgrind problems (in test func_str) · ed3fc505
      unknown authored
      On exactly-sized Strings, the String::c_ptr() function peeked beyond the
      end of the buffer, possibly into unititialized space to see whether the 
      buffer was NUL-terminated.
      
      In a place that did peek improperly, we now use a c_ptr_safe() function, 
      which doesn't peek where it shouldn't.
      
      
      client/sql_string.h:
        Back-port String::c_ptr_safe().
      sql/item_func.h:
        Describe side-effect behavior.
      sql/item_strfunc.cc:
        Use the "_safe" version of c_ptr to avoid looking for a terminating 
        NUL character outside the initialized memory area.  Valgrind hates it 
        when one does that, and it theoretically could lead to a SEGV.
      sql/sql_string.h:
        Back-port String::c_ptr_safe().
      ed3fc505
  17. 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
  18. 26 Jun, 2006 1 commit
    • unknown's avatar
      A fix and a test case for · 2783fc82
      unknown authored
       Bug#19022 "Memory bug when switching db during trigger execution"
       Bug#17199 "Problem when view calls function from another database."
       Bug#18444 "Fully qualified stored function names don't work correctly in
                  SELECT statements"
      
       Documentation note: this patch introduces a change in behaviour of prepared
       statements.
      
       This patch adds a few new invariants with regard to how THD::db should
       be used. These invariants should be preserved in future:
      
        - one should never refer to THD::db by pointer and always make a deep copy
          (strmake, strdup)
        - one should never compare two databases by pointer, but use strncmp or
          my_strncasecmp
        - TABLE_LIST object table->db should be always initialized in the parser or
          by creator of the object.
      
          For prepared statements it means that if the current database is changed
          after a statement is prepared, the database that was current at prepare
          remains active. This also means that you can not prepare a statement that
          implicitly refers to the current database if the latter is not set.
          This is not documented, and therefore needs documentation. This is NOT a
          change in behavior for almost all SQL statements except:
           - ALTER TABLE t1 RENAME t2 
           - OPTIMIZE TABLE t1
           - ANALYZE TABLE t1
           - TRUNCATE TABLE t1 --
           until this patch t1 or t2 could be evaluated at the first execution of
           prepared statement. 
      
           CURRENT_DATABASE() still works OK and is evaluated at every execution
           of prepared statement.
      
           Note, that in stored routines this is not an issue as the default
           database is the database of the stored procedure and "use" statement
           is prohibited in stored routines.
      
        This patch makes obsolete the use of check_db_used (it was never used in the
        old code too) and all other places that check for table->db and assign it
        from THD::db if it's NULL, except the parser.
      
       How this patch was created: THD::{db,db_length} were replaced with a
       LEX_STRING, THD::db. All the places that refer to THD::{db,db_length} were
       manually checked and:
        - if the place uses thd->db by pointer, it was fixed to make a deep copy
        - if a place compared two db pointers, it was fixed to compare them by value
          (via strcmp/my_strcasecmp, whatever was approproate)
       Then this intermediate patch was used to write a smaller patch that does the
       same thing but without a rename.
      
       TODO in 5.1:
         - remove check_db_used
         - deploy THD::set_db in mysql_change_db
      
       See also comments to individual files.
      
      
      mysql-test/r/create.result:
        Modify the result file: a database can never be NULL.
      mysql-test/r/ps.result:
        Update test results (Bug#17199 et al)
      mysql-test/r/sp.result:
        Update test results (Bug#17199 et al)
      mysql-test/t/create.test:
        Update the id of the returned error.
      mysql-test/t/ps.test:
        Add test coverage for prepared statements and current database. In scope of
        work on Bug#17199 "Problem when view calls function from another database."
      mysql-test/t/sp.test:
        Add a test case for Bug#17199 "Problem when view calls function from another
        database." and Bug#18444 "Fully qualified stored function names don't work
        correctly in SELECT statements". Test a complementary problem.
      sql/item_strfunc.cc:
        Touch the code that reads thd->db (cleanup).
      sql/log_event.cc:
        While we are at it, replace direct access to thd->db with a method.
        Should simplify future conversion of THD::db to LEX_STRING.
      sql/slave.cc:
        While we are at it, replace direct access to thd->db with a method.
        Should simplify future conversion of THD::db to LEX_STRING.
      sql/slave.h:
        Remove a declaration for a method that is used only in one module.
      sql/sp.cc:
        Rewrite sp_use_new_db: this is a cleanup that I needed in order to understand
        this function and ensure that it has no bugs.
      sql/sp.h:
        Add a new declaration for sp_use_new_db (uses LEX_STRINGs) and a comment.
      sql/sp_head.cc:
        - drop sp_name_current_db_new - a creator of sp_name class that was used
        when sp_name was created for an identifier without an explicitly initialized
        database. Now we pass thd->db to constructor of sp_name right in the 
        parser.
        - rewrite sp_head::init_strings: name->m_db is always set now
        - use the new variant of sp_use_new_db
        - we don't need to update thd->db with SP MEM_ROOT pointer anymore when
        parsing a stored procedure, as noone will refer to it (yes!)
      sql/sp_head.h:
        - remove unneded methods and members
      sql/sql_class.h:
        - introduce 3 THD  methods to work with THD::db:
          .set_db to assign the current database
          .reset_db to reset the current database (temporarily) or set it to NULL
          .opt_copy_db_to - to deep-copy thd->db to a pointer if it's not NULL
      sql/sql_db.cc:
        While we are at it, replace direct access to thd->db with a method.
        Should simplify future conversion of THD::db to LEX_STRING.
      sql/sql_insert.cc:
        - replace checks with asserts: table_list->db must be always set in the parser.
      sql/sql_lex.h:
        - add a comment
      sql/sql_parse.cc:
        - implement the invariant described in the changeset comment.
        - remove juggling with lex->sphead in SQLCOM_CREATE_PROCEDURE:
          now db_load_routine uses its own LEX object and doesn't damage the main
          LEX.
        - add DBUG_ASSERT(0) to unused "check_db_used"
      sql/sql_table.cc:
        - replace a check with an assert (table_ident->db)
      sql/sql_trigger.cc:
        While we are at it, replace direct access to thd->db with a method.
        Should simplify future conversion of THD::db to LEX_STRING.
      sql/sql_udf.cc:
        - use thd->set_db instead of direct modification of to thd->db
      sql/sql_view.cc:
        - replace a check with an assert (view->db)
      sql/sql_yacc.yy:
        - make sure that we always copy table->db or name->db or ident->db or
          select_lex->db from thd->db if the former is not set. If thd->db
          is not set but is accessed, return an error.
      sql/tztime.cc:
        - be nice, never copy thd->db by pointer.
      2783fc82
  19. 19 Jun, 2006 1 commit
    • unknown's avatar
      unsigned char -> uchar · 9e00ceb2
      unknown authored
      Added missing copyright
      Indentation and prototype fixes
      Fixed compiler warning
      
      
      include/my_sys.h:
        Fix prototype for my_print_open_files.
        Indentation fixes
      mysys/mf_keycache.c:
        Fix that key cache can be compiled without #define THREAD
      mysys/my_error.c:
        Indentation cleanups
      mysys/my_memmem.c:
        Added missing copyright.
        Fix include files
      sql/event.cc:
        unsigned char -> uchar
      sql/field.cc:
        unsigned char -> uchar
      sql/filesort.cc:
        Indentation fix
      sql/ha_ndbcluster.cc:
        unsigned char -> uchar
      sql/ha_ndbcluster_binlog.cc:
        unsigned char -> uchar
      sql/item_strfunc.cc:
        unsigned char -> uchar
      sql/log_event.cc:
        unsigned char -> uchar
      sql/opt_range.cc:
        Indentation fixes
      sql/sql_crypt.cc:
        unsigned char -> uchar
      sql/sql_string.cc:
        unsigned char -> uchar
      sql/tztime.cc:
        unsigned char -> uchar
      storage/heap/hp_extra.c:
        Clear also next_block (See heap_scan_init)
      storage/heap/hp_test2.c:
        Set required struct memeber max_table_size
        (Fixes that hp_test2 works again)
      storage/myisam/mi_rsamepos.c:
        Fixed bug in mi_rsame_with_pos
      strings/decimal.c:
        Fixed compiler warning
      9e00ceb2
  20. 16 Jun, 2006 2 commits
    • 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
    • unknown's avatar
      String::set(double) and set(longlong) -> set_real() and set_int() · a2210902
      unknown authored
      fix Field::store(double) being used instead of store(longlong)
      
      NB: overloading functions is evil
      
      a2210902
  21. 13 Jun, 2006 1 commit
    • unknown's avatar
      Fix for bug #12728: Very strange behaviour of ELT · b5550d55
      unknown authored
      mysql-test/r/func_str.result:
        Fix for bug #12728: Very strange behaviour of ELT
          - test case
      mysql-test/t/func_str.test:
        Fix for bug #12728: Very strange behaviour of ELT
          - test result
      sql/item_strfunc.cc:
        Fix for bug #12728: Very strange behaviour of ELT
          - Item_func_elt::eq() introduced: check 'item' member as well
            (to distinguish for instance elt(1, 'a', 'b') and elt(2, 'a', 'b')
      sql/item_strfunc.h:
        Fix for bug #12728: Very strange behaviour of ELT
          - Item_func_elt::eq() introduced: check 'item' member as well
            (to distinguish for instance elt(1, 'a', 'b') and elt(2, 'a', 'b')
      b5550d55
  22. 06 Jun, 2006 1 commit
    • unknown's avatar
      Fixed bug#15962: CONCAT() in UNION may lead to a data trucation. · e1a3f7f4
      unknown authored
      To calculate its max_length the CONCAT() function is simply sums max_lengths
      of its arguments but when the collation of an argument differs from the 
      collation of the CONCAT() max_length will be wrong. This may lead to a data
      truncation when a tmp table is used, in UNIONS for example.
      
      The Item_func_concat::fix_length_and_dec() function now recalculates the 
      max_length of an argument when the mbmaxlen of the argument differs from the
      mbmaxlen of the CONCAT().
      
      
      mysql-test/t/func_concat.test:
        Added test case for bug#15962:CONCAT() in UNION may lead to a data trucation.
      mysql-test/r/func_concat.result:
        Added test case for bug#15962:CONCAT() in UNION may lead to a data trucation.
      sql/item_strfunc.cc:
        Fixed bug#15962: CONCAT() in UNION may lead to a data trucation.
        The Item_func_concat::fix_length_and_dec() function now recalculates the 
        max_length of an argument when the mbmaxlen of the argument differs from the
        mbmaxlen of the CONCAT().
      e1a3f7f4
  23. 28 May, 2006 1 commit
    • unknown's avatar
      Fixed bug#15351: Wrong collation used for comparison of md5() and sha() · 43a94ac2
      unknown authored
      argument can lead to a wrong result.
      
      md5() and sha() functions treat their arguments as case sensitive strings.
      But when they are compared their arguments were compared as a case
      insensitive strings which leads to two functions with different arguments
      and thus different results to being identical. This can lead to a wrong
      decision made in the range optimizer and thus lead to a wrong result set.
      
      Item_func_md5::fix_length_and_dec() and Item_func_sha::fix_length_and_dec()
      functions now set binary collation on their arguments.
      
      
      sql/item_strfunc.cc:
        Fixed bug#15351: Wrong collation used for comparison of md5() and sha()
        argument can lead to a wrong result.
        Item_func_md5::fix_length_and_dec() and Item_func_sha::fix_length_and_dec()
        functions now set binary collation on their arguments.
      mysql-test/r/func_str.result:
         Added test case for the bug#15351: Wrong collation used for comparison of md5() and sha()
        argument can lead to a wrong result.
      mysql-test/t/func_str.test:
        Added test case for the bug#15351: Wrong collation used for comparison of md5() and sha()
        argument can lead to a wrong result.
      43a94ac2
  24. 25 May, 2006 1 commit
    • unknown's avatar
      Fixed bug#16716: subselect in concat() may lead to a wrong result. · 7f1494d5
      unknown authored
      The Item_func_concat::val_str() function tries to make as less re-allocations
      as possible. This results in appending strings returned by 2nd and next
      arguments to the string returned by 1st argument if the buffer for the first
      argument has enough free space. A constant subselect is evaluated only once 
      and its result is stored in an Item_cache_str. In the case when the first
      argument of the concat() function is such a subselect Item_cache_str returns
      the stored value and Item_func_concat::val_str() append values of other
      arguments to it. But for the next row the value in the Item_cache_str isn't
      restored because the subselect is a constant one and it isn't evaluated second
      time. This results in appending string values of 2nd and next arguments to the 
      result of the previous Item_func_concat::val_str() call.
      
      The Item_func_concat::val_str() function now checks whether the first argument 
      is a constant one and if so it doesn't append values of 2nd and next arguments
      to the string value returned by it.
      
      
      mysql-test/t/func_concat.test:
        Added test case for bug#16716: subselect in concat() may lead to a wrong result.
      mysql-test/r/func_concat.result:
        Added test case for bug#16716: subselect in concat() may lead to a wrong result.
      sql/item_strfunc.cc:
        Fixed bug#16716: subselect in concat() may lead to a wrong result.
        The Item_func_concat::val_str() function now checks whether the first argument 
        is a constant one and if so it doesn't append values of 2nd and next arguments
        to the string value returned by it.
      7f1494d5
  25. 08 May, 2006 1 commit
    • unknown's avatar
      Bug#10418: LOAD_FILE does not behave like in manual if file does not exist · 2e93e5d3
      unknown authored
      load_file() string-function should return NULL rather than throw an error if
      the file doesn't exist, as per the manual.
      
      
      mysql-test/t/outfile.test:
        expect NULL rather than error if file given to load_file() doesn't exist
      mysql-test/t/func_str.test:
        show that load_file() will return NULL rather than throw an error
        if file doesn't exist
      mysql-test/r/outfile.result:
        expect NULL rather than error if file given to load_file() doesn't exist
      mysql-test/r/func_str.result:
        expect NULL rather than error if file given to load_file() doesn't exist
      sql/item_strfunc.cc:
        load_file() should return NULL as per the docs if file not found,
        rather than throw an error
      2e93e5d3
  26. 13 Apr, 2006 1 commit
    • unknown's avatar
      Fix for bug #18643: crazy UNCOMPRESS(). · 4c8c47c2
      unknown authored
      mysql-test/r/func_compress.result:
        Fix for bug #18643: crazy UNCOMPRESS().
          - test-case
      mysql-test/t/func_compress.test:
        Fix for bug #18643: crazy UNCOMPRESS().
          - test-case
      sql/item_strfunc.cc:
        Fix for bug #18643: crazy UNCOMPRESS().
          - set null_value.
      4c8c47c2
  27. 29 Mar, 2006 1 commit
    • unknown's avatar
      Remove compiler warnings · 2aab3517
      unknown authored
      Add missing DBUG_RETURN
      Fixed stack overflow in NdbBlob (found by ndb_gis.test)
      Fixed access to freed memory in ndb_cluster_real_free_share()
      
      
      mysys/mf_keycache.c:
        Add missing DBUG_RETURN
      sql/ha_ndbcluster.cc:
        Move free_root to after share handling, as otherwise we will free things needed by free_table_share()
      sql/item_func.cc:
        Add missing DBUG_RETURN
      sql/item_strfunc.cc:
        Add missing DBUG_RETURN
      sql/sp_head.cc:
        Add missing DBUG_RETURN
      sql/sql_base.cc:
        Add missing DBUG_RETURN
      storage/csv/ha_tina.cc:
        Add missing DBUG_RETURN
      storage/myisam/mi_key.c:
        Add missing DBUG_RETURN
      storage/myisam/mi_keycache.c:
        Add missing DBUG_RETURN
      storage/ndb/include/kernel/signaldata/ArbitSignalData.hpp:
        Remove compiler warning
      storage/ndb/include/kernel/signaldata/DictTabInfo.hpp:
        Remove compiler warning
      storage/ndb/include/transporter/TransporterDefinitions.hpp:
        Remove compiler warning
      storage/ndb/include/util/SimpleProperties.hpp:
        Remove compiler warning
      storage/ndb/include/util/SocketServer.hpp:
        Remove compiler warning
      storage/ndb/src/ndbapi/ClusterMgr.hpp:
        Remove compiler warning
      storage/ndb/src/ndbapi/NdbBlob.cpp:
        Fix stack overflow
      storage/ndb/src/ndbapi/NdbEventOperationImpl.hpp:
        Remove compiler warning
      storage/ndb/src/ndbapi/NdbScanOperation.cpp:
        Remove compiler warning
      2aab3517
  28. 14 Mar, 2006 1 commit
    • unknown's avatar
      Bug #17043: Casting trimmed string to decimal loses precision · 09f2861b
      unknown authored
        Results of string functions were being converted to decimals by first
        being converted to integers, resulting in a loss of precision.
      
      
      mysql-test/r/func_str.result:
        Add new results
      mysql-test/t/func_str.test:
        Add new regression test
      sql/item_strfunc.cc:
        Convert string function results to decimal using string-to-decimal conversion
      sql/item_strfunc.h:
        Add Item_str_func::val_decimal()
      09f2861b
  29. 13 Mar, 2006 1 commit
    • unknown's avatar
      Fixes to the replication mixed mode (patch approved by Monty): · 06132a24
      unknown authored
      - detect the need for row-based binlogging not at execution stage but earlier at parsing stage; needed for example for CREATE TABLE SELECT UUID().
      - more tests of this mixed mode.
      
      
      mysql-test/r/rpl_switch_stm_row_mixed.result:
        result update
      mysql-test/t/rpl_switch_stm_row_mixed.test:
        testing more scenarios for the mixed replication mode.
        Added support for manual testing of UDFs vs the mixed mode (behind a variable in the test).
        Changing old file names to better ones.
      sql/item_create.cc:
        at parse time, when we see a UUID(), put up a flag in LEX to say this binlogs properly only with row-based binlogging.
      sql/item_func.cc:
        it's not perfect to put up the flag at this execution stage, better do it at parse stage.
      sql/item_strfunc.cc:
        it's not perfect to put up the flag at this execution stage, better do it at parse stage
      sql/set_var.cc:
        this assertion is wrong, this piece of code can happen in RBR mode too.
      sql/sql_lex.cc:
        when we reinitialize the LEX members before every query, we have to reinitialize the new flag
      sql/sql_lex.h:
        A new flag, set at parsing stage, which tells if some items seen during parsing stage require row-based replication to binlog/replicate correctly
        when this statement is later executed.
        It has to be in LEX and not directly in THD, for this to work in prepared statements.
      sql/sql_parse.cc:
        Parsing stage happened at some time in the past and set up the flag in LEX, now that we execute the statement we actually turn on row-based binlogging
        if the thread's binlog format is "mixed". We then turn it off when leaving mysql_execute_command().
        Some cleanup code was not executed if leaving mysql_execute_command() at the "error" label, fixing this. A better fix than the "goto end" would be
        to modify each "goto error" to "res=1; goto end" but it required changing many lines which I don't want to do now ("make smallest possible patch").
      sql/sql_yacc.yy:
        When at parsing stage we see a UDF we put up a flag to say that row-based binlogging is preferred.
      06132a24
  30. 25 Feb, 2006 1 commit
    • unknown's avatar
      WL#2977 and WL#2712 global and session-level variable to set the binlog format (row/statement), · 55d8e31e
      unknown authored
      and new binlog format called "mixed" (which is statement-based except if only row-based is correct,
      in this cset it means if UDF or UUID is used; more cases could be added in later 5.1 release):
      SET GLOBAL|SESSION BINLOG_FORMAT=row|statement|mixed|default;
      the global default is statement unless cluster is enabled (then it's row) as in 5.1-alpha.
      It's not possible to use SET on this variable if a session is currently in row-based mode and has open temporary tables (because CREATE
      TEMPORARY TABLE was not binlogged so temp table is not known on slave),  or if NDB is enabled (because
      NDB does not support such change on-the-fly, though it will later), of if in a stored function (see below).
      The added tests test the possibility or impossibility to SET, their effects, and the mixed mode,
      including in prepared statements and in stored procedures and functions.
      Caveats:
      a) The mixed mode will not work for stored functions: in mixed mode, a stored function will
      always be binlogged as one call and in a statement-based way (e.g. INSERT VALUES(myfunc()) or SELECT myfunc()).
      b) for the same reason, changing the thread's binlog format inside a stored function is
      refused with an error message.
      c) the same problems apply to triggers; implementing b) for triggers will be done later (will ask
      Dmitri).
      Additionally, as the binlog format is now changeable by each user for his session, I remove the implication
      which was done at startup, where row-based automatically set log-bin-trust-routine-creators to 1
      (not possible anymore as a user can now switch to stmt-based and do nasty things again), and automatically
      set --innodb-locks-unsafe-for-binlog to 1 (was anyway theoretically incorrect as it disabled
      phantom protection).
      Plus fixes for compiler warnings.
      
      
      mysql-test/r/rpl_row_4_bytes.result:
        update
      mysql-test/t/rpl_row_4_bytes.test:
        don't influence next tests
      sql/ha_archive.cc:
        please pay attention to this structure when you change it...
      sql/ha_berkeley.cc:
        please pay attention to this structure when you change it...
      sql/ha_blackhole.cc:
        please pay attention to this structure when you change it...
      sql/ha_federated.cc:
        please pay attention to this structure when you change it...
      sql/ha_heap.cc:
        please pay attention to this structure when you change it...
      sql/ha_innodb.cc:
        please pay attention to this structure when you change it...
      sql/ha_myisam.cc:
        please pay attention to this structure when you change it...
      sql/ha_myisammrg.cc:
        please pay attention to this structure when you change it...
      sql/ha_ndbcluster_binlog.cc:
        no more global 'binlog_row_based'
      sql/ha_partition.cc:
        please pay attention to this structure when you change it...
      sql/handler.cc:
        please pay attention to this structure when you change it...
      sql/handler.h:
        it's good to initialize statically (to get no compiler warning) even if to a null value.
      sql/item_func.cc:
        UDFs require row-based if this is the "mixed" binlog format.
      sql/item_strfunc.cc:
        UUID() requires row-based binlogging if this is the "mixed" binlog format
      sql/log.cc:
        binlog_row_based -> thd->current_stmt_binlog_row_based
      sql/log.h:
        the enum enum_binlog_format moves to log.h from mysqld.cc as we need it in several places.
      sql/log_event.cc:
        binlog_row_based -> thd->current_stmt_binlog_row_based
      sql/log_event.h:
        this global variable not used anymore
      sql/mysql_priv.h:
        these global variables not used anymore
      sql/mysqld.cc:
        simplification in the handling of --binlog-format (but with no user-visible change), thanks to
        the new global system variable.
        RBR does not anymore turn on --log-bin-trust-function-creators and --innodb-locks-unsafe-for-binlog
        as these are global options and RBR is now settable per session.
      sql/partition_info.cc:
        compiler warnings
      sql/set_var.cc:
        new class of thread's variable, to handle the binlog_format (like sys_var_thd_enum except
        that is_readonly() is overriden for more checks before update).
        compiler warnings (ok'd by Serg)
      sql/set_var.h:
        new class for the thread's binlog_format (see set_var.cc)
      sql/share/errmsg.txt:
        some messages for when one can't toggle from one binlog format to another
      sql/sp_head.cc:
        binlog_row_based -> thd->current_stmt_binlog_row_based
      sql/sql_base.cc:
        binlog_row_based -> thd->current_stmt_binlog_row_based
      sql/sql_class.cc:
        When a THD is initialized, we set its current_stmt_binlog_row_based
      sql/sql_class.h:
        new THD::variables.binlog_format (the value of the session variable set by SET
        or inherited from the global value), and THD::current_stmt_binlog_row_based which tells if the
        current statement does row-based or statement-based binlogging. Both members are needed
        as the 2nd one cannot be derived only from the first one (the statement's type plays a role too),
        and the 1st one is needed to reset the 2nd one.
      sql/sql_delete.cc:
        binlog_row_based -> thd->current_stmt_binlog_row_based
      sql/sql_insert.cc:
        binlog_row_based -> thd->current_stmt_binlog_row_based
      sql/sql_load.cc:
        binlog_row_based -> thd->current_stmt_binlog_row_based.
      sql/sql_parse.cc:
        when we are done with a statement, we reset the current_stmt_binlog_row_based to the value
        derived from THD::variables.binlog_format.
      sql/sql_partition.cc:
        compiler warning
      sql/sql_show.cc:
        compiler warning
      sql/sql_table.cc:
        binlog_row_based -> thd->current_stmt_binlog_row_based
      tests/mysql_client_test.c:
        compiler warning
      mysql-test/r/ndb_binlog_basic2.result:
        new result
      mysql-test/r/rpl_switch_stm_row_mixed.result:
        new result
      mysql-test/t/ndb_binlog_basic2.test:
        new test to verify that if cluster is enabled, can't change binlog format on the fly.
      mysql-test/t/rpl_switch_stm_row_mixed.test:
        test to see if one can switch between SBR, RBR, and "mixed" mode, and when one cannot,
        and test to see if the switching, and the mixed mode, work properly (using UUID() to test,
        as using UDFs is not possible in the testsuite for portability reasons).
      55d8e31e
  31. 11 Jan, 2006 1 commit
  32. 24 Nov, 2005 1 commit
    • unknown's avatar
      Fix possible corruption of results from SUBSTRING_INDEX(). (Bug #14676) · 257b5c17
      unknown authored
      mysql-test/r/func_str.result:
        Add new results
      mysql-test/t/func_str.test:
        Add new test
      sql/item_strfunc.cc:
        Mark tmp_value in Item_func_substr_index as const so that we don't
        overwrite the contents of another String when getting the delimiter.
        Fix typo in variable names (delimeter -> delimiter).
      257b5c17
  33. 21 Nov, 2005 1 commit
    • unknown's avatar
      Bug#10446 Illegal mix of collations: · 652b3730
      unknown authored
      item_strfunc.h, item_strfunc.cc, item.cc:
        Try to convert a const item into destination 
        character set. If conversion happens without
        data loss, then cache the converted value
        and return it during val_str().
        Otherwise, if conversion loses data, return
        Illeral mix of collations error, as it happened
        previously.
      ctype_recoding.result, ctype_recoding.test:
        Fixing tests accordingly.
      
      
      sql/item.cc:
        Bug#10446 Illegal mix of collations
        Try to convert a const item into destination 
        character set. If conversion happens without
        data loss, then cache the converted value
        and return it during val_str().
        Otherwise, if conversion loses data, return
        Illeral mix of collations error, as it happened
        previously.
      sql/item_strfunc.cc:
        Return cached value when it's possible.
      mysql-test/t/ctype_recoding.test:
        Fixing tests accordingly.
      mysql-test/r/ctype_recoding.result:
        Fixing tests accordingly.
      652b3730
  34. 20 Nov, 2005 1 commit
    • unknown's avatar
      Inefficient usage of String::append() fixed. · 5e047f6b
      unknown authored
      Bad examples of usage of a string with its length fixed.
      The incorrect length in the trigger file configuration descriptor
        fixed (BUG#14090).
      A hook for unknown keys added to the parser to support old .TRG files.
      
      
      sql/field.cc:
        Inefficient usage of String::append() fixed.
        Bad examples of usage of a string with its length fixed.
      sql/ha_berkeley.cc:
        A bad example of usage of a string with its length fixed.
      sql/ha_federated.cc:
        Inefficient usage of String::append() fixed.
      sql/ha_myisammrg.cc:
        Bad examples of usage of a string with its length fixed.
      sql/handler.cc:
        Inefficient usage of String::append() fixed.
      sql/item.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item.h:
        A bad example of usage of a string with its length fixed.
      sql/item_cmpfunc.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item_func.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item_strfunc.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item_subselect.cc:
        Bad examples of usage of a string with its length fixed.
      sql/item_sum.cc:
        Bad examples of usage of a string with its length fixed.
        Inefficient usage of String::append() fixed.
      sql/item_timefunc.cc:
        Inefficient using of String::append() fixed.
        Bad examples of usage of a string with its length fixed.
      sql/item_uniq.h:
        Bad examples of usage of a string with its length fixed.
      sql/key.cc:
        Bad examples of usage of a string with its length fixed.
      sql/log.cc:
        Bad examples of usage of a string with its length fixed.
      sql/log_event.cc:
        Bad examples of usage of a string with its length fixed.
      sql/mysqld.cc:
        The dummy parser hook allocated.
      sql/opt_range.cc:
        Inefficient usage of String::append() fixed.
      sql/parse_file.cc:
        Bad examples of usage of a string with its length fixed.
        A hook for unknown keys added to the parser.
      sql/parse_file.h:
        A hook for unknown keys added to the parser.
      sql/protocol.cc:
        A bad example of usage of a string with its length fixed.
      sql/repl_failsafe.cc:
        Bad examples of usage of a string with its length fixed.
      sql/share/errmsg.txt:
        A warning for old format config file.
      sql/slave.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sp.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sp_head.cc:
        Bad examples of usage of a string with its length fixed.
      sql/spatial.cc:
        A bad example of usage of a string with its length fixed.
      sql/sql_acl.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_analyse.cc:
        Bad examples of usage of a string with its length fixed.
        Inefficient usage of String::append() fixed.
      sql/sql_lex.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_load.cc:
        A bad example of usage of a string with its length fixed.
      sql/sql_parse.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_prepare.cc:
        A bad example of usage of a string with its length fixed.
      sql/sql_select.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_show.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_string.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_string.h:
        The macro definition moved to sql_string.h to
          be accessible in all parts of server.
      sql/sql_table.cc:
        Bad examples of usage of a string with its length fixed.
      sql/sql_trigger.cc:
        Bad examples of usage of a string with its length fixed.
        The incorrect length in the trigger file configuration descriptor
          fixed (BUG#14090).
        The hook for processing incorrect sql_mode record added.
      sql/sql_view.cc:
        A dummy  hook used for parsing views.
      sql/structs.h:
        The macro definition moved to sql_string.h to be
          accessible in all parts of server.
      sql/table.cc:
        A bad example of usage of a string with its length fixed.
      sql/tztime.cc:
        A bad example of usage of a string with its length fixed.
      5e047f6b
  35. 07 Nov, 2005 1 commit
    • unknown's avatar
      Bug#14146 CHAR(...USING ...) and CONVERT(CHAR(...) USING...) produce different results · 72a3f376
      unknown authored
      ctype_utf8.result, ctype_utf8.test:
        Adding test case.
      item_strfunc.cc:
      item_strfunc.h:
        Moving the well formed checking code into a method,
        to reuse in several Item_func_xxx. Reusing the new
        method in Item_func_char and Item_func_charset_conv.
      
      
      
      sql/item_strfunc.h:
        Bug#14146 CHAR(...USING ...) and CONVERT(CHAR(...) USING...) produce different results
        Moving the well formed checking code into a method,
        to reuse in several Item_func_xxx.
      sql/item_strfunc.cc:
        Moving the well formed checking code into a method,
        to reuse in several Item_func_xxx.
      mysql-test/t/ctype_utf8.test:
        Adding test case.
      mysql-test/r/ctype_utf8.result:
        Adding test case.
      72a3f376