~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/item.cc

  • Committer: Olaf van der Spek
  • Date: 2011-10-19 14:24:27 UTC
  • mto: This revision was merged to the branch mainline in revision 2445.
  • Revision ID: olafvdspek@gmail.com-20111019142427-sun0tnp0u27gqg31
Refactor

Show diffs side-by-side

added added

removed removed

Lines of Context:
399
399
  return false;
400
400
}
401
401
 
402
 
void Item::set_name(const char *str, uint32_t length, const charset_info_st * const cs)
 
402
void Item::set_name(const char *str, uint32_t length, const charset_info_st* cs)
403
403
{
404
 
  if (!length)
 
404
  if (not length)
405
405
  {
 
406
    if (0) // str && *str)
 
407
      std::cerr << "non-empty empty name: " << str << std::endl;
406
408
    /* Empty string, used by AS or internal function like last_insert_id() */
407
 
    name= str;
 
409
    name= str; // should be NULL (or "");
408
410
    name_length= 0;
409
411
    return;
410
412
  }
411
413
  if (cs->ctype)
412
414
  {
413
415
    uint32_t orig_len= length;
414
 
    while (length && ! my_isgraph(cs, *str))
 
416
    while (length && not my_isgraph(cs, *str))
415
417
    {
416
418
      /* Fix problem with yacc */
417
419
      length--;
418
420
      str++;
419
421
    }
420
 
    if (orig_len != length && ! is_autogenerated_name)
 
422
    if (orig_len != length && not is_autogenerated_name)
421
423
    {
422
424
      if (length == 0)
423
425
        push_warning_printf(&getSession(), DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_NAME_BECOMES_EMPTY, ER(ER_NAME_BECOMES_EMPTY), str + length - orig_len);
438
440
  return type() == item->type() && 
439
441
         name && 
440
442
         item->name &&
441
 
         ! my_strcasecmp(system_charset_info, name, item->name);
 
443
         not my_strcasecmp(system_charset_info, name, item->name);
442
444
}
443
445
 
444
 
Item *Item::safe_charset_converter(const charset_info_st * const tocs)
 
446
Item *Item::safe_charset_converter(const charset_info_st* tocs)
445
447
{
446
448
  Item_func_conv_charset *conv= new Item_func_conv_charset(this, tocs, 1);
447
 
  return conv->safe ? conv : NULL;
 
449
  return conv->safe ? conv : NULL; // memory leak? (conv if not conv->safe)
448
450
}
449
451
 
450
452
bool Item::get_date(type::Time &ltime,uint32_t fuzzydate)
458
460
    else if (result_type() == STRING_RESULT)
459
461
    {
460
462
      char buff[type::Time::MAX_STRING_LENGTH];
461
 
      String tmp(buff,sizeof(buff), &my_charset_bin),*res;
462
 
      if (!(res=val_str(&tmp)) ||
463
 
          str_to_datetime_with_warn(&getSession(), res->ptr(), res->length(),
464
 
                                    &ltime, fuzzydate) <= type::DRIZZLE_TIMESTAMP_ERROR)
 
463
      String tmp(buff,sizeof(buff), &my_charset_bin);
 
464
      String *res= val_str(&tmp);
 
465
      if (not res || str_to_datetime_with_warn(&getSession(), res->ptr(), res->length(), &ltime, fuzzydate) <= type::DRIZZLE_TIMESTAMP_ERROR)
465
466
      {
466
467
        break;
467
468
      }
475
476
 
476
477
      if (not type::is_valid(date_value))
477
478
      {
478
 
        char buff[DECIMAL_LONGLONG_DIGITS], *end;
479
 
        end= internal::int64_t10_to_str(value, buff, -10);
480
 
        make_truncated_value_warning(&getSession(), DRIZZLE_ERROR::WARN_LEVEL_WARN,
481
 
                                     buff, (int) (end-buff), type::DRIZZLE_TIMESTAMP_NONE, NULL);
 
479
        char buff[DECIMAL_LONGLONG_DIGITS];
 
480
        char* end= internal::int64_t10_to_str(value, buff, -10);
 
481
        make_truncated_value_warning(&getSession(), DRIZZLE_ERROR::WARN_LEVEL_WARN, buff, (int) (end-buff), type::DRIZZLE_TIMESTAMP_NONE, NULL);
482
482
        break;
483
483
      }
484
484
    }
583
583
  return (this->*processor)(arg);
584
584
}
585
585
 
586
 
Item* Item::compile(Item_analyzer analyzer, 
587
 
                    unsigned char **arg_p,
588
 
                    Item_transformer transformer, 
589
 
                    unsigned char *arg_t)
 
586
Item* Item::compile(Item_analyzer analyzer, unsigned char **arg_p, Item_transformer transformer, unsigned char *arg_t)
590
587
{
591
 
  if ((this->*analyzer) (arg_p))
592
 
    return ((this->*transformer) (arg_t));
593
 
  return NULL;
 
588
  return (this->*analyzer)(arg_p)
 
589
    ? (this->*transformer)(arg_t)
 
590
    : NULL;
594
591
}
595
592
 
596
593
void Item::traverse_cond(Cond_traverser traverser, void *arg, traverse_order)