00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include <config.h>
00021
00022 #include <drizzled/function/str/conv_charset.h>
00023
00024 namespace drizzled
00025 {
00026
00027 String *Item_func_conv_charset::val_str(String *str)
00028 {
00029 assert(fixed == 1);
00030 if (use_cached_value)
00031 return null_value ? 0 : &str_value;
00032 String *arg= args[0]->val_str(str);
00033 size_t dummy_errors;
00034 if (!arg)
00035 {
00036 null_value=1;
00037 return 0;
00038 }
00039 null_value= str_value.copy(arg->ptr(),arg->length(),arg->charset(),
00040 conv_charset, &dummy_errors);
00041 return null_value ? 0 : check_well_formed_result(&str_value);
00042 }
00043
00044 void Item_func_conv_charset::fix_length_and_dec()
00045 {
00046 collation.set(conv_charset, DERIVATION_IMPLICIT);
00047 max_length = args[0]->max_length*conv_charset->mbmaxlen;
00048 }
00049
00050 void Item_func_conv_charset::print(String *str)
00051 {
00052 str->append(STRING_WITH_LEN("convert("));
00053 args[0]->print(str);
00054 str->append(STRING_WITH_LEN(" using "));
00055 str->append(conv_charset->csname);
00056 str->append(')');
00057 }
00058
00059 }