~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/function/time/dayofmonth.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/dayofmonth.h>
 
22
#include "drizzled/temporal.h"
 
23
#include "drizzled/error.h"
 
24
#include "drizzled/function/time/dayofmonth.h"
23
25
 
24
26
int64_t Item_func_dayofmonth::val_int()
25
27
{
26
 
  assert(fixed == 1);
27
 
  DRIZZLE_TIME ltime;
28
 
  (void) get_arg0_date(&ltime, TIME_FUZZY_DATE);
29
 
  return (int64_t) ltime.day;
 
28
  assert(fixed);
 
29
 
 
30
  if (args[0]->is_null())
 
31
  {
 
32
    /* For NULL argument, we return a NULL result */
 
33
    null_value= true;
 
34
    return 0;
 
35
  }
 
36
 
 
37
  /* Grab the first argument as a DateTime object */
 
38
  drizzled::DateTime temporal;
 
39
  Item_result arg0_result_type= args[0]->result_type();
 
40
  
 
41
  switch (arg0_result_type)
 
42
  {
 
43
    case STRING_RESULT:
 
44
      {
 
45
        char buff[DRIZZLE_MAX_LENGTH_DATETIME_AS_STRING];
 
46
        String tmp(buff,sizeof(buff), &my_charset_utf8_bin);
 
47
        String *res= args[0]->val_str(&tmp);
 
48
        if (! temporal.from_string(res->c_ptr(), res->length()))
 
49
        {
 
50
          /* 
 
51
          * Could not interpret the function argument as a temporal value, 
 
52
          * so throw an error and return 0
 
53
          */
 
54
          my_error(ER_INVALID_DATETIME_VALUE, MYF(0), res->c_ptr());
 
55
          return 0;
 
56
        }
 
57
      }
 
58
      break;
 
59
    case INT_RESULT:
 
60
      if (temporal.from_int64_t(args[0]->val_int()))
 
61
        break;
 
62
      /* Intentionally fall-through on invalid conversion from integer */
 
63
    default:
 
64
      {
 
65
        /* 
 
66
        * Could not interpret the function argument as a temporal value, 
 
67
        * so throw an error and return 0
 
68
        */
 
69
        null_value= true;
 
70
        char buff[DRIZZLE_MAX_LENGTH_DATETIME_AS_STRING];
 
71
        String tmp(buff,sizeof(buff), &my_charset_utf8_bin);
 
72
        String *res;
 
73
 
 
74
        res= args[0]->val_str(&tmp);
 
75
 
 
76
        my_error(ER_INVALID_DATETIME_VALUE, MYF(0), res->c_ptr());
 
77
        return 0;
 
78
      }
 
79
  }
 
80
  return (int64_t) temporal.days();
30
81
}
31