| 3247 | } |
| 3248 | |
| 3249 | int select_result_text_buffer::append_row(List<Item> &items, bool send_names) |
| 3250 | { |
| 3251 | List_iterator<Item> it(items); |
| 3252 | Item *item; |
| 3253 | char **row; |
| 3254 | int column= 0; |
| 3255 | |
| 3256 | if (!(row= thd->alloc<char*>(n_columns)) || |
| 3257 | rows.push_back(row, thd->mem_root)) |
| 3258 | return true; |
| 3259 | |
| 3260 | StringBuffer<32> buf; |
| 3261 | |
| 3262 | while ((item= it++)) |
| 3263 | { |
| 3264 | DBUG_ASSERT(column < n_columns); |
| 3265 | const char *data_ptr; |
| 3266 | char *ptr; |
| 3267 | size_t data_len; |
| 3268 | |
| 3269 | buf.set_buffer_if_not_allocated(&my_charset_bin); |
| 3270 | if (send_names) |
| 3271 | { |
| 3272 | DBUG_ASSERT(strlen(item->name.str) == item->name.length); |
| 3273 | data_ptr= item->name.str; |
| 3274 | data_len= item->name.length; |
| 3275 | } |
| 3276 | else |
| 3277 | { |
| 3278 | String *res; |
| 3279 | res= item->val_str(&buf); |
| 3280 | if (item->null_value) |
| 3281 | { |
| 3282 | data_ptr= "NULL"; |
| 3283 | data_len=4; |
| 3284 | } |
| 3285 | else |
| 3286 | { |
| 3287 | data_ptr= res->c_ptr_safe(); |
| 3288 | data_len= res->length(); |
| 3289 | } |
| 3290 | } |
| 3291 | |
| 3292 | if (!(ptr= (char*) thd->memdup(data_ptr, data_len + 1))) |
| 3293 | return true; |
| 3294 | row[column]= ptr; |
| 3295 | |
| 3296 | column++; |
| 3297 | } |
| 3298 | return false; |
| 3299 | } |
| 3300 | |
| 3301 | |
| 3302 | void select_result_text_buffer::save_to(String *res) |
nothing calls this directly
no test coverage detected