~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/function/time/month.cc

  • Committer: Monty Taylor
  • Date: 2009-01-30 04:45:55 UTC
  • mfrom: (779.4.10 devel)
  • mto: (779.7.3 devel)
  • mto: This revision was merged to the branch mainline in revision 823.
  • Revision ID: mordred@inaugust.com-20090130044555-ntb3509c8o6e3sb5
MergedĀ fromĀ me.

Show diffs side-by-side

added added

removed removed

Lines of Context:
17
17
 *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
18
18
 */
19
19
 
20
 
#include <drizzled/server_includes.h>
 
20
#include "drizzled/server_includes.h"
21
21
#include CSTDINT_H
22
 
#include <drizzled/function/time/month.h>
23
 
#include <drizzled/session.h>
 
22
#include "drizzled/temporal.h"
 
23
#include "drizzled/error.h"
 
24
#include "drizzled/session.h"
 
25
#include "drizzled/function/time/month.h"
24
26
 
25
27
int64_t Item_func_month::val_int()
26
28
{
27
 
  assert(fixed == 1);
28
 
  DRIZZLE_TIME ltime;
29
 
  (void) get_arg0_date(&ltime, TIME_FUZZY_DATE);
30
 
  return (int64_t) ltime.month;
 
29
  assert(fixed);
 
30
 
 
31
  if (args[0]->is_null())
 
32
  {
 
33
    /* For NULL argument, we return a NULL result */
 
34
    null_value= true;
 
35
    return 0;
 
36
  }
 
37
 
 
38
  /* Grab the first argument as a DateTime object */
 
39
  drizzled::DateTime temporal;
 
40
  Item_result arg0_result_type= args[0]->result_type();
 
41
  
 
42
  switch (arg0_result_type)
 
43
  {
 
44
    case STRING_RESULT:
 
45
      {
 
46
        char buff[DRIZZLE_MAX_LENGTH_DATETIME_AS_STRING];
 
47
        String tmp(buff,sizeof(buff), &my_charset_utf8_bin);
 
48
        String *res= args[0]->val_str(&tmp);
 
49
        if (! temporal.from_string(res->c_ptr(), res->length()))
 
50
        {
 
51
          /* 
 
52
          * Could not interpret the function argument as a temporal value, 
 
53
          * so throw an error and return 0
 
54
          */
 
55
          my_error(ER_INVALID_DATETIME_VALUE, MYF(0), res->c_ptr());
 
56
          return 0;
 
57
        }
 
58
      }
 
59
      break;
 
60
    case INT_RESULT:
 
61
      if (temporal.from_int64_t(args[0]->val_int()))
 
62
        break;
 
63
      /* Intentionally fall-through on invalid conversion from integer */
 
64
    default:
 
65
      {
 
66
        /* 
 
67
        * Could not interpret the function argument as a temporal value, 
 
68
        * so throw an error and return 0
 
69
        */
 
70
        null_value= true;
 
71
        char buff[DRIZZLE_MAX_LENGTH_DATETIME_AS_STRING];
 
72
        String tmp(buff,sizeof(buff), &my_charset_utf8_bin);
 
73
        String *res;
 
74
 
 
75
        res= args[0]->val_str(&tmp);
 
76
 
 
77
        my_error(ER_INVALID_DATETIME_VALUE, MYF(0), res->c_ptr());
 
78
        return 0;
 
79
      }
 
80
  }
 
81
  return (int64_t) temporal.months();
31
82
}
32
83
 
33
 
 
34
84
String* Item_func_monthname::val_str(String* str)
35
85
{
36
 
  assert(fixed == 1);
 
86
  assert(fixed);
 
87
 
 
88
  if (args[0]->is_null())
 
89
  {
 
90
    /* For NULL argument, we return a NULL result */
 
91
    null_value= true;
 
92
    return (String *) 0;
 
93
  }
37
94
  const char *month_name;
38
95
  uint32_t   month= (uint) val_int();
39
96
  Session *session= current_session;
48
105
  str->set(month_name, strlen(month_name), system_charset_info);
49
106
  return str;
50
107
}
51