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/char.h>
00023
00024 namespace drizzled
00025 {
00026
00027 String *Item_func_char::val_str(String *str)
00028 {
00029 assert(fixed == 1);
00030 str->length(0);
00031 str->set_charset(collation.collation);
00032 for (uint32_t i=0 ; i < arg_count ; i++)
00033 {
00034 int32_t num=(int32_t) args[i]->val_int();
00035 if (!args[i]->null_value)
00036 {
00037 char char_num= (char) num;
00038 if (num&0xFF000000L) {
00039 str->append((char)(num>>24));
00040 goto b2;
00041 } else if (num&0xFF0000L) {
00042 b2: str->append((char)(num>>16));
00043 goto b1;
00044 } else if (num&0xFF00L) {
00045 b1: str->append((char)(num>>8));
00046 }
00047 str->append(&char_num, 1);
00048 }
00049 }
00050 str->realloc(str->length());
00051 return check_well_formed_result(str);
00052 }
00053
00054 }