~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field/datetime.cc

  • Committer: Stewart Smith
  • Date: 2008-09-15 07:13:59 UTC
  • mfrom: (383.1.21 drizzle)
  • mto: This revision was merged to the branch mainline in revision 408.
  • Revision ID: stewart@flamingspork.com-20080915071359-f8bznznyaiqrtqxa
merged

Show diffs side-by-side

added added

removed removed

Lines of Context:
22
22
#pragma implementation                          // gcc: Class implementation
23
23
#endif
24
24
 
 
25
#include <drizzled/server_includes.h>
25
26
#include <drizzled/field/datetime.h>
26
27
 
27
28
/****************************************************************************
33
34
 
34
35
int Field_datetime::store(const char *from,
35
36
                          uint len,
36
 
                          CHARSET_INFO *cs __attribute__((unused)))
 
37
                          const CHARSET_INFO * const cs __attribute__((unused)))
37
38
{
38
39
  DRIZZLE_TIME time_tmp;
39
40
  int error;
44
45
  func_res= str_to_datetime(from, len, &time_tmp,
45
46
                            (TIME_FUZZY_DATE |
46
47
                             (thd->variables.sql_mode &
47
 
                              (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE |
48
 
                               MODE_INVALID_DATES))),
 
48
                              (MODE_NO_ZERO_DATE | MODE_INVALID_DATES))),
49
49
                            &error);
50
50
  if ((int) func_res > (int) DRIZZLE_TIMESTAMP_ERROR)
51
51
    tmp= TIME_to_uint64_t_datetime(&time_tmp);
53
53
    error= 1;                                 // Fix if invalid zero date
54
54
 
55
55
  if (error)
56
 
    set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
 
56
    set_datetime_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN,
57
57
                         ER_WARN_DATA_OUT_OF_RANGE,
58
58
                         from, len, DRIZZLE_TIMESTAMP_DATETIME, 1);
59
59
 
74
74
  int error= 0;
75
75
  if (nr < 0.0 || nr > 99991231235959.0)
76
76
  {
77
 
    set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, 
 
77
    set_datetime_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, 
78
78
                         ER_WARN_DATA_OUT_OF_RANGE,
79
79
                         nr, DRIZZLE_TIMESTAMP_DATETIME);
80
80
    nr= 0.0;
95
95
 
96
96
  nr= number_to_datetime(nr, &not_used, (TIME_FUZZY_DATE |
97
97
                                         (thd->variables.sql_mode &
98
 
                                          (MODE_NO_ZERO_IN_DATE |
99
 
                                           MODE_NO_ZERO_DATE |
 
98
                                          (MODE_NO_ZERO_DATE |
100
99
                                           MODE_INVALID_DATES))), &error);
101
100
 
102
101
  if (nr == -1LL)
106
105
  }
107
106
 
108
107
  if (error)
109
 
    set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
 
108
    set_datetime_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN,
110
109
                         error == 2 ? ER_WARN_DATA_OUT_OF_RANGE :
111
110
                         ER_WARN_DATA_TRUNCATED, initial_nr,
112
111
                         DRIZZLE_TIMESTAMP_DATETIME, 1);
139
138
    if (check_date(ltime, tmp != 0,
140
139
                   (TIME_FUZZY_DATE |
141
140
                    (current_thd->variables.sql_mode &
142
 
                     (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE |
143
 
                      MODE_INVALID_DATES))), &error))
 
141
                     (MODE_NO_ZERO_DATE | MODE_INVALID_DATES))), &error))
144
142
    {
145
143
      char buff[MAX_DATE_STRING_REP_LENGTH];
146
 
      String str(buff, sizeof(buff), &my_charset_latin1);
 
144
      String str(buff, sizeof(buff), &my_charset_utf8_general_ci);
147
145
      make_datetime((DATE_TIME_FORMAT *) 0, ltime, &str);
148
 
      set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED,
 
146
      set_datetime_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED,
149
147
                           str.ptr(), str.length(), DRIZZLE_TIMESTAMP_DATETIME,1);
150
148
    }
151
149
  }
153
151
  {
154
152
    tmp=0;
155
153
    error= 1;
156
 
    set_warning(MYSQL_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
 
154
    set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
157
155
  }
158
156
#ifdef WORDS_BIGENDIAN
159
157
  if (table && table->s->db_low_byte_first)