~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to drizzled/field/date.cc

  • Committer: Brian Aker
  • Date: 2011-01-24 21:11:46 UTC
  • mto: This revision was merged to the branch mainline in revision 2113.
  • Revision ID: brian@tangent.org-20110124211146-ptzxfdnypgj14box
Fixed case where parser error message might be null.

Show diffs side-by-side

added added

removed removed

Lines of Context:
124
124
}
125
125
 
126
126
int Field_date::store_time(type::Time *ltime,
127
 
                              enum enum_drizzle_timestamp_type time_type)
 
127
                           type::timestamp_t time_type)
128
128
{
129
129
  long tmp;
130
130
  int error= 0;
131
 
  if (time_type == DRIZZLE_TIMESTAMP_DATE ||
132
 
      time_type == DRIZZLE_TIMESTAMP_DATETIME)
 
131
  if (time_type == type::DRIZZLE_TIMESTAMP_DATE || time_type == type::DRIZZLE_TIMESTAMP_DATETIME)
133
132
  {
134
133
    tmp= ltime->year*10000 + ltime->month*100 + ltime->day;
135
 
    if (check_date(ltime, tmp != 0,
136
 
                   (TIME_FUZZY_DATE |
137
 
                    (current_session->variables.sql_mode &
138
 
                     (MODE_NO_ZERO_DATE | MODE_INVALID_DATES))), &error))
 
134
 
 
135
    if (ltime->check(tmp != 0,
 
136
                     (TIME_FUZZY_DATE |
 
137
                      (current_session->variables.sql_mode &
 
138
                       (MODE_NO_ZERO_DATE | MODE_INVALID_DATES))), &error))
139
139
    {
140
 
      char buff[MAX_DATE_STRING_REP_LENGTH];
 
140
      char buff[type::Time::MAX_STRING_LENGTH];
141
141
      String str(buff, sizeof(buff), &my_charset_utf8_general_ci);
142
 
      make_date(ltime, &str);
 
142
      ltime->convert(str, type::DRIZZLE_TIMESTAMP_DATE);
143
143
      set_datetime_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED,
144
 
                           str.ptr(), str.length(), DRIZZLE_TIMESTAMP_DATE, 1);
 
144
                           str.ptr(), str.length(), type::DRIZZLE_TIMESTAMP_DATE, 1);
145
145
    }
146
 
    if (!error && ltime->time_type != DRIZZLE_TIMESTAMP_DATE &&
 
146
 
 
147
    if (not error && ltime->time_type != type::DRIZZLE_TIMESTAMP_DATE &&
147
148
        (ltime->hour || ltime->minute || ltime->second || ltime->second_part))
148
149
    {
149
 
      char buff[MAX_DATE_STRING_REP_LENGTH];
 
150
      char buff[type::Time::MAX_STRING_LENGTH];
150
151
      String str(buff, sizeof(buff), &my_charset_utf8_general_ci);
151
 
      make_datetime(ltime, &str);
 
152
      ltime->convert(str);
152
153
      set_datetime_warning(DRIZZLE_ERROR::WARN_LEVEL_NOTE,
153
154
                           ER_WARN_DATA_TRUNCATED,
154
 
                           str.ptr(), str.length(), DRIZZLE_TIMESTAMP_DATE, 1);
 
155
                           str.ptr(), str.length(), type::DRIZZLE_TIMESTAMP_DATE, 1);
155
156
      error= 3;
156
157
    }
157
158
  }
161
162
    error= 1;
162
163
    set_warning(DRIZZLE_ERROR::WARN_LEVEL_WARN, ER_WARN_DATA_TRUNCATED, 1);
163
164
  }
 
165
 
164
166
  int4store(ptr,tmp);
 
167
 
165
168
  return error;
166
169
}
167
170
 
215
218
  ltime->day=           (int) (tmp%100);
216
219
  ltime->month=         (int) (tmp/100%100);
217
220
  ltime->year=          (int) (tmp/10000);
218
 
  ltime->time_type= DRIZZLE_TIMESTAMP_DATE;
 
221
  ltime->time_type= type::DRIZZLE_TIMESTAMP_DATE;
219
222
  ltime->hour= ltime->minute= ltime->second= ltime->second_part= ltime->neg= 0;
220
223
  return ((!(fuzzydate & TIME_FUZZY_DATE) && (!ltime->month || !ltime->day)) ?
221
224
          1 : 0);