summaryrefslogtreecommitdiff
path: root/sql/item_strfunc.cc
diff options
context:
space:
mode:
authorunknown <monty@mysql.com>2004-02-09 12:31:03 +0100
committerunknown <monty@mysql.com>2004-02-09 12:31:03 +0100
commit35b1f5445056951dda823b6ec4ee6f06ca612714 (patch)
tree4cdb6965fba280ace2fc30421a0f25332597e43e /sql/item_strfunc.cc
parent44289ba6587b7a2151b4bd3aa7bd5f3b282454d5 (diff)
downloadmariadb-git-35b1f5445056951dda823b6ec4ee6f06ca612714.tar.gz
Added --compact to mysqlbinlog
Fixed output from mysqlbinlog when using --skip-comments Fixed warnings from valgrind Fixed ref_length when used with HEAP tables More efficent need_conversion() Fixed error handling in UPDATE with not updateable tables Fixed bug in null handling in CAST to signed/unsigned client/client_priv.h: cleanup & added OPT_COMPACT client/mysqldump.c: Added option --compact to get a compact readable dump. Ensure that SET CHARACTER_SET_CLIENT is not done if we have not remembered the old character set Print optimization comments even if --skip-comments are given as these are not true comments. (Before these where only printed at end, which was a bug) mysql-test/r/cast.result: More cast tests mysql-test/r/derived.result: Removed warnings mysql-test/r/mysqldump.result: Update results after fixing mysqlbinlog mysql-test/r/query_cache.result: Make test usable with --extern more tests mysql-test/r/rpl_until.result: Make test repeatable under valgrind mysql-test/r/sql_mode.result: Fix test result mysql-test/r/subselect.result: Make test smaller. Update wrong results mysql-test/t/cast.test: More cast tests mysql-test/t/derived.test: Removed warnings mysql-test/t/query_cache.test: Make test usable with --extern more tests mysql-test/t/rpl_until.test: fix for valgrind. Becasue of unknown reason one got 'Slave_SQL_Running=yes' in this setup mysql-test/t/subselect.test: Make test case smaller sql/field.cc: Updated need_conversion() to use new arguments sql/ha_heap.cc: Moved initialization of ref_length to right place. This fixed problem that we had a ref_length of 8 for heap tables, which was not efficent. sql/item_func.cc: Cleanup sql/item_func.h: Fixed bug in null_handling for cast to signed/unsigned sql/item_strfunc.cc: Optimized/cleaned up Item_func_conv_charset3 sql/item_sum.cc: Cleanup. Ensure that some flag variables are cleared in cleanup() sql/item_sum.h: Fixed references to uninitialized memory sql/opt_range.cc: Fixed spelling error sql/sql_class.cc: Fixed wrong return code, which could case protocol problems sql/sql_class.h: After merge fix sql/sql_prepare.cc: Added comments sql/sql_show.cc: Cleanup sql/sql_string.cc: Optimzed usage of need_conversion(). - Removed not used argument - Save diff lenght in 'offset' to not have to recalculate length several times. Cleaned up comment Optimized copy_aligned() based on the knowledge that it's only called when you have wrong data sql/sql_string.h: Updated need_conversion() and copy_aligned() to use new arguments sql/sql_update.cc: Fixed error handling with non-updateable tables sql/sql_yacc.yy: Ensure that lex->lock_options are set correctly (to get rid of warnings from valgrind) Ensure that cast_type sets lex->charset and lex->length. Without these CONVERT() didn't work properly
Diffstat (limited to 'sql/item_strfunc.cc')
-rw-r--r--sql/item_strfunc.cc60
1 files changed, 12 insertions, 48 deletions
diff --git a/sql/item_strfunc.cc b/sql/item_strfunc.cc
index f5922d03868..fd1222d5f1a 100644
--- a/sql/item_strfunc.cc
+++ b/sql/item_strfunc.cc
@@ -2126,14 +2126,12 @@ void Item_func_conv_charset::print(String *str)
String *Item_func_conv_charset3::val_str(String *str)
{
- my_wc_t wc;
- int cnvres;
- const uchar *s, *se;
- uchar *d, *d0, *de;
- uint32 dmaxlen;
+ char cs1[30], cs2[30];
+ String to_cs_buff(cs1, sizeof(cs1), default_charset_info);
+ String from_cs_buff(cs2, sizeof(cs2), default_charset_info);
String *arg= args[0]->val_str(str);
- String *to_cs= args[1]->val_str(str);
- String *from_cs= args[2]->val_str(str);
+ String *to_cs= args[1]->val_str(&to_cs_buff);
+ String *from_cs= args[2]->val_str(&from_cs_buff);
CHARSET_INFO *from_charset;
CHARSET_INFO *to_charset;
@@ -2143,51 +2141,17 @@ String *Item_func_conv_charset3::val_str(String *str)
!(from_charset=get_charset_by_name(from_cs->ptr(), MYF(MY_WME))) ||
!(to_charset=get_charset_by_name(to_cs->ptr(), MYF(MY_WME))))
{
- null_value=1;
+ null_value= 1;
return 0;
}
- s=(const uchar*)arg->ptr();
- se=s+arg->length();
-
- dmaxlen=arg->length()*to_charset->mbmaxlen+1;
- str->alloc(dmaxlen);
- d0=d=(unsigned char*)str->ptr();
- de=d+dmaxlen;
-
- while (1)
+ if (str_value.copy(arg->ptr(), arg->length(), from_charset, to_charset))
{
- cnvres=from_charset->cset->mb_wc(from_charset,&wc,s,se);
- if (cnvres>0)
- {
- s+=cnvres;
- }
- else if (cnvres==MY_CS_ILSEQ)
- {
- s++;
- wc='?';
- }
- else
- break;
-
-outp:
- cnvres=to_charset->cset->wc_mb(to_charset,wc,d,de);
- if (cnvres>0)
- {
- d+=cnvres;
- }
- else if (cnvres==MY_CS_ILUNI && wc!='?')
- {
- wc='?';
- goto outp;
- }
- else
- break;
- };
-
- str->length((uint32) (d-d0));
- str->set_charset(to_charset);
- return str;
+ null_value= 1;
+ return 0;
+ }
+ null_value= 0;
+ return &str_value;
}