~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/item/create.cc

  • Committer: Brian Aker
  • Date: 2010-12-18 07:46:49 UTC
  • mto: (2015.1.1 clean)
  • mto: This revision was merged to the branch mainline in revision 2018.
  • Revision ID: brian@tangent.org-20101218074649-0zz1lf2tbhopfugm
Adding in time type.

Show diffs side-by-side

added added

removed removed

Lines of Context:
83
83
#include <drizzled/function/math/tan.h>
84
84
#include <drizzled/function/units.h>
85
85
 
 
86
#include "drizzled/function/cast/time.h"
 
87
 
86
88
using namespace std;
87
89
 
88
90
namespace drizzled
2083
2085
                 const char *c_len, const char *c_dec,
2084
2086
                 const CHARSET_INFO * const cs)
2085
2087
{
2086
 
  Item *res;
 
2088
  Item *res= NULL;
2087
2089
  uint32_t len;
2088
2090
  uint32_t dec;
2089
2091
 
2091
2093
  case ITEM_CAST_BINARY:
2092
2094
    res= new (session->mem_root) Item_func_binary(a);
2093
2095
    break;
 
2096
 
 
2097
  case ITEM_CAST_TIME:
 
2098
    res= new (session->mem_root) function::cast::Time(a);
 
2099
    break;
 
2100
 
2094
2101
  case ITEM_CAST_DATE:
2095
2102
    res= new (session->mem_root) Item_date_typecast(a);
2096
2103
    break;
 
2104
 
2097
2105
  case ITEM_CAST_DATETIME:
2098
2106
    res= new (session->mem_root) Item_datetime_typecast(a);
2099
2107
    break;
 
2108
 
2100
2109
  case ITEM_CAST_DECIMAL:
2101
 
  {
2102
 
    len= c_len ? atoi(c_len) : 0;
2103
 
    dec= c_dec ? atoi(c_dec) : 0;
2104
 
    my_decimal_trim(&len, &dec);
2105
 
    if (len < dec)
2106
 
    {
2107
 
      my_error(ER_M_BIGGER_THAN_D, MYF(0), "");
2108
 
      return 0;
2109
 
    }
2110
 
    if (len > DECIMAL_MAX_PRECISION)
2111
 
    {
2112
 
      my_error(ER_TOO_BIG_PRECISION, MYF(0), len, a->name,
2113
 
               DECIMAL_MAX_PRECISION);
2114
 
      return 0;
2115
 
    }
2116
 
    if (dec > DECIMAL_MAX_SCALE)
2117
 
    {
2118
 
      my_error(ER_TOO_BIG_SCALE, MYF(0), dec, a->name,
2119
 
               DECIMAL_MAX_SCALE);
2120
 
      return 0;
2121
 
    }
2122
 
    res= new (session->mem_root) Item_decimal_typecast(a, len, dec);
2123
 
    break;
2124
 
  }
 
2110
    {
 
2111
      len= c_len ? atoi(c_len) : 0;
 
2112
      dec= c_dec ? atoi(c_dec) : 0;
 
2113
      my_decimal_trim(&len, &dec);
 
2114
      if (len < dec)
 
2115
      {
 
2116
        my_error(ER_M_BIGGER_THAN_D, MYF(0), "");
 
2117
        return 0;
 
2118
      }
 
2119
      if (len > DECIMAL_MAX_PRECISION)
 
2120
      {
 
2121
        my_error(ER_TOO_BIG_PRECISION, MYF(0), len, a->name,
 
2122
                 DECIMAL_MAX_PRECISION);
 
2123
        return 0;
 
2124
      }
 
2125
      if (dec > DECIMAL_MAX_SCALE)
 
2126
      {
 
2127
        my_error(ER_TOO_BIG_SCALE, MYF(0), dec, a->name,
 
2128
                 DECIMAL_MAX_SCALE);
 
2129
        return 0;
 
2130
      }
 
2131
      res= new (session->mem_root) Item_decimal_typecast(a, len, dec);
 
2132
      break;
 
2133
    }
2125
2134
  case ITEM_CAST_CHAR:
2126
 
  {
2127
 
    len= c_len ? atoi(c_len) : -1;
2128
 
    res= create_func_char_cast(session, a, len, cs);
2129
 
    break;
2130
 
  }
2131
 
  default:
2132
 
  {
2133
 
    assert(0);
2134
 
    res= 0;
2135
 
    break;
2136
 
  }
2137
 
  }
 
2135
    {
 
2136
      len= c_len ? atoi(c_len) : -1;
 
2137
      res= create_func_char_cast(session, a, len, cs);
 
2138
      break;
 
2139
    }
 
2140
  }
 
2141
 
2138
2142
  return res;
2139
2143
}
2140
2144