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 String *Item_func_conv_charset::val_str(String *str)
00027 {
00028 assert(fixed == 1);
00029 if (use_cached_value)
00030 return null_value ? 0 : &str_value;
00031 String *arg= args[0]->val_str(str);
00032 if (!arg)
00033 {
00034 null_value=1;
00035 return 0;
00036 }
00037 null_value= false;
00038 str_value.copy(arg->ptr(),arg->length(), conv_charset);
00039 return null_value ? 0 : check_well_formed_result(&str_value);
00040 }
00041
00042 void Item_func_conv_charset::fix_length_and_dec()
00043 {
00044 collation.set(conv_charset, DERIVATION_IMPLICIT);
00045 max_length = args[0]->max_length*conv_charset->mbmaxlen;
00046 }
00047
00048 void Item_func_conv_charset::print(String *str)
00049 {
00050 str->append(STRING_WITH_LEN("convert("));
00051 args[0]->print(str);
00052 str->append(STRING_WITH_LEN(" using "));
00053 str->append(conv_charset->csname);
00054 str->append(')');
00055 }
00056
00057 }