#include <item_strfunc.h>
Inheritance diagram for Item_func_substr:


Public Member Functions | |
| Item_func_substr (Item *a, Item *b) | |
| Item_func_substr (Item *a, Item *b, Item *c) | |
| String * | val_str (String *) |
| void | fix_length_and_dec () |
| const char * | func_name () const |
| bool | check_partition_func_processor (byte *bool_arg) |
Private Attributes | |
| String | tmp_value |
Definition at line 207 of file item_strfunc.h.
| void Item_func_substr::fix_length_and_dec | ( | ) | [virtual] |
Implements Item_result_field.
Definition at line 1134 of file item_strfunc.cc.
References Item_func::arg_count, Item_func::args, DTCollation::collation, Item::collation, Item_func::const_item(), Item::max_length, charset_info_st::mbmaxlen, DTCollation::set(), set_if_smaller, start(), and Item_str_func::val_int().
01135 { 01136 max_length=args[0]->max_length; 01137 01138 collation.set(args[0]->collation); 01139 if (args[1]->const_item()) 01140 { 01141 int32 start= (int32) args[1]->val_int(); 01142 start= (int32)((start < 0) ? max_length + start : start - 1); 01143 if (start < 0 || start >= (int32) max_length) 01144 max_length=0; /* purecov: inspected */ 01145 else 01146 max_length-= (uint) start; 01147 } 01148 if (arg_count == 3 && args[2]->const_item()) 01149 { 01150 int32 length= (int32) args[2]->val_int() * collation.collation->mbmaxlen; 01151 if (length <= 0) 01152 max_length=0; /* purecov: inspected */ 01153 else 01154 set_if_smaller(max_length,(uint) length); 01155 } 01156 }
Here is the call graph for this function:

| const char* Item_func_substr::func_name | ( | ) | const [inline, virtual] |
Implements Item.
Definition at line 1107 of file item_strfunc.cc.
References Item_func::arg_count, Item_func::args, String::charpos(), DBUG_ASSERT, Item::fixed, INT_MAX32, String::length(), min, my_empty_string(), Item::null_value, String::numchars(), String::set(), start(), tmp_value, Item_str_func::val_int(), and Item::val_str().
01108 { 01109 DBUG_ASSERT(fixed == 1); 01110 String *res = args[0]->val_str(str); 01111 int32 start = (int32) args[1]->val_int(); 01112 int32 length = arg_count == 3 ? (int32) args[2]->val_int() : INT_MAX32; 01113 int32 tmp_length; 01114 01115 if ((null_value=(args[0]->null_value || args[1]->null_value || 01116 (arg_count == 3 && args[2]->null_value)))) 01117 return 0; /* purecov: inspected */ 01118 start= (int32)((start < 0) ? res->numchars() + start : start -1); 01119 start=res->charpos(start); 01120 length=res->charpos(length,start); 01121 if (start < 0 || (uint) start+1 > res->length() || length <= 0) 01122 return &my_empty_string; 01123 01124 tmp_length=(int32) res->length()-start; 01125 length=min(length,tmp_length); 01126 01127 if (!start && res->length() == (uint) length) 01128 return res; 01129 tmp_value.set(*res,(uint) start,(uint) length); 01130 return &tmp_value; 01131 }
Here is the call graph for this function:

String Item_func_substr::tmp_value [private] |
1.4.7

