summaryrefslogtreecommitdiff
path: root/sql/time.cc
diff options
context:
space:
mode:
authorunknown <konstantin@mysql.com>2004-06-24 19:08:36 +0400
committerunknown <konstantin@mysql.com>2004-06-24 19:08:36 +0400
commit9dde418895f2d236234b975c4ada88ad624e8ba4 (patch)
tree51efbaacdacd9dad5c2745e3ccb58a3614f4f608 /sql/time.cc
parent85e9258b05b2490e35aa60adecf48a3f65245eb0 (diff)
downloadmariadb-git-9dde418895f2d236234b975c4ada88ad624e8ba4.tar.gz
Fix for Bug#4030 "Client side conversion string -> date type doesn't
work (prepared statements)" and after-review fixes: - str_to_TIME renamed to str_to_datetime to pair with str_to_time - functions str_to_time and str_to_TIME moved to sql-common - send_data_str now supports MYSQL_TYPE_TIME, MYSQL_TIME_DATE, MYSQL_TIME_DATETIME types of user input buffers. - few more comments in the client library - a test case added. VC++Files/libmysql/libmysql.dsp: new file: my_time.c VC++Files/libmysqld/libmysqld.dsp: new file: my_time.c VC++Files/sql/mysqld.dsp: new file: my_time.c include/Makefile.am: - mysql_time.h added to the list of installed client library headers include/mysql.h: - declarations for MYSQL_TIME and enum_mysql_timestamp_type moved to mysql_time.h, which is in shared use of client library and mysys. libmysql/Makefile.shared: - my_time.lo added to the list of libmysql objects libmysql/libmysql.c: Fix for bug#4030 "Client side conversion string -> date type doesn't work (prepared statements)" and cleanup. - added case labels for TIME/DATE/DATETIME types to send_data_str - comments for read_binary_{date,time,datetime}, fetch_result_*, fetch_results. libmysqld/Makefile.am: - my_time.c added sql-common/Makefile.am: - my_time.c added to the list of files included into source distribution. sql/Makefile.am: my_time.c added to the list of mysqld sources. sql/field.cc: - TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} sql/item.cc: - TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} sql/item_timefunc.cc: - TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} sql/mysql_priv.h: - added typedefs for TIME and timestamp_type - removed declarations for str_to_time and str_to_TIME (now this functions reside in mysys) sql/mysqld.cc: - log_10_int moved to mysys (it's used by str_to_TIME and str_to_time) - enum values TIMESTAMP_{TIME,DATE,DATETIME} were renamed to MYSQL_TIMESTAMP_{TIME,DATE,DATETIME} sql/set_var.cc: - TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} sql/set_var.h: - fixed timestamp_type usage to be compatible with typedef. sql/sql_prepare.cc: - TIMESTAMP_{TIME,DATE,DATETIME} were renamed to MYSQL_TIMESTAMP_{TIME,DATE,DATETIME} - embedded library implementation of set_param_{time,date,datetime} is much simplier now, as MYSQL_TIME is the same as TIME. sql/sql_yacc.yy: - s/\<TIMESTAMP_/MYSQL_TIMESTAMP/gc sql/structs.h: - declarations for TIME and timestamp_type replaced with typedefs - str_to_datetime arguments moved to mysys headers sql/time.cc: - str_to_time and str_to_TIME moved to mysys - TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} as these names are now exported to client. - str_to_TIME renamed to str_to_datetime to pair with str_to_time - str_to_TIME_with_warn renamed accordingly sql/tztime.cc: - TIMESTAMP_{TIME,DATE,DATETIME,...} renamed to MYSQL_TIMESTAMP_{TIME,DATETIME,DATE,...} tests/client_test.c: - a test case for Bug#4030 "Client side conversion string -> date type doesn't work (prepared statements)"
Diffstat (limited to 'sql/time.cc')
-rw-r--r--sql/time.cc585
1 files changed, 28 insertions, 557 deletions
diff --git a/sql/time.cc b/sql/time.cc
index b5550b98e8c..132612e53c5 100644
--- a/sql/time.cc
+++ b/sql/time.cc
@@ -345,364 +345,19 @@ ulong convert_month_to_period(ulong month)
}
-/* Position for YYYY-DD-MM HH-MM-DD.FFFFFF AM in default format */
-
-static uchar internal_format_positions[]=
-{0, 1, 2, 3, 4, 5, 6, (uchar) 255};
-
-static char time_separator=':';
-
-/*
- Convert a timestamp string to a TIME value.
-
- SYNOPSIS
- str_to_TIME()
- str String to parse
- length Length of string
- l_time Date is stored here
- flags Bitmap of following items
- TIME_FUZZY_DATE Set if we should allow partial dates
- TIME_DATETIME_ONLY Set if we only allow full datetimes.
- was_cut Set to 1 if value was cut during conversion or to 0
- otherwise.
-
- DESCRIPTION
- At least the following formats are recogniced (based on number of digits)
- YYMMDD, YYYYMMDD, YYMMDDHHMMSS, YYYYMMDDHHMMSS
- YY-MM-DD, YYYY-MM-DD, YY-MM-DD HH.MM.SS
- YYYYMMDDTHHMMSS where T is a the character T (ISO8601)
- Also dates where all parts are zero are allowed
-
- The second part may have an optional .###### fraction part.
-
- NOTES
- This function should work with a format position vector as long as the
- following things holds:
- - All date are kept together and all time parts are kept together
- - Date and time parts must be separated by blank
- - Second fractions must come after second part and be separated
- by a '.'. (The second fractions are optional)
- - AM/PM must come after second fractions (or after seconds if no fractions)
- - Year must always been specified.
- - If time is before date, then we will use datetime format only if
- the argument consist of two parts, separated by space.
- Otherwise we will assume the argument is a date.
- - The hour part must be specified in hour-minute-second order.
-
- RETURN VALUES
- TIMESTAMP_NONE String wasn't a timestamp, like
- [DD [HH:[MM:[SS]]]].fraction.
- l_time is not changed.
- TIMESTAMP_DATE DATE string (YY MM and DD parts ok)
- TIMESTAMP_DATETIME Full timestamp
- TIMESTAMP_DATETIME_ERROR Timestamp with wrong values.
- All elements in l_time is set to 0
-*/
-
-#define MAX_DATE_PARTS 8
-
-timestamp_type
-str_to_TIME(const char *str, uint length, TIME *l_time, uint flags,
- int *was_cut)
-{
- uint field_length, year_length, digits, i, number_of_fields;
- uint date[MAX_DATE_PARTS], date_len[MAX_DATE_PARTS];
- uint add_hours= 0, start_loop;
- ulong not_zero_date, allow_space;
- bool is_internal_format;
- const char *pos, *last_field_pos;
- const char *end=str+length;
- const uchar *format_position;
- bool found_delimitier= 0, found_space= 0;
- uint frac_pos, frac_len;
- DBUG_ENTER("str_to_TIME");
- DBUG_PRINT("ENTER",("str: %.*s",length,str));
-
- LINT_INIT(field_length);
- LINT_INIT(year_length);
- LINT_INIT(last_field_pos);
-
- *was_cut= 0;
-
- // Skip space at start
- for (; str != end && my_isspace(&my_charset_latin1, *str) ; str++)
- ;
- if (str == end || ! my_isdigit(&my_charset_latin1, *str))
- {
- *was_cut= 1;
- DBUG_RETURN(TIMESTAMP_NONE);
- }
-
- is_internal_format= 0;
- /* This has to be changed if want to activate different timestamp formats */
- format_position= internal_format_positions;
-
- /*
- Calculate number of digits in first part.
- If length= 8 or >= 14 then year is of format YYYY.
- (YYYY-MM-DD, YYYYMMDD, YYYYYMMDDHHMMSS)
- */
- for (pos=str; pos != end && my_isdigit(&my_charset_latin1,*pos) ; pos++)
- ;
-
- digits= (uint) (pos-str);
- start_loop= 0; // Start of scan loop
- date_len[format_position[0]]= 0; // Length of year field
- if (pos == end)
- {
- /* Found date in internal format (only numbers like YYYYMMDD) */
- year_length= (digits == 4 || digits == 8 || digits >= 14) ? 4 : 2;
- field_length=year_length-1;
- is_internal_format= 1;
- format_position= internal_format_positions;
- }
- else
- {
- if (format_position[0] >= 3) // If year is after HHMMDD
- {
- /*
- If year is not in first part then we have to determinate if we got
- a date field or a datetime field.
- We do this by checking if there is two numbers separated by
- space in the input.
- */
- while (pos < end && !my_isspace(&my_charset_latin1, *pos))
- pos++;
- while (pos < end && !my_isdigit(&my_charset_latin1, *pos))
- pos++;
- if (pos == end)
- {
- if (flags & TIME_DATETIME_ONLY)
- {
- *was_cut= 1;
- DBUG_RETURN(TIMESTAMP_NONE); // Can't be a full datetime
- }
- /* Date field. Set hour, minutes and seconds to 0 */
- date[0]= date[1]= date[2]= date[3]= date[4]= 0;
- start_loop= 5; // Start with first date part
- }
- }
- }
-
- /*
- Only allow space in the first "part" of the datetime field and:
- - after days, part seconds
- - before and after AM/PM (handled by code later)
-
- 2003-03-03 20:00:20 AM
- 20:00:20.000000 AM 03-03-2000
- */
- i= max((uint) format_position[0], (uint) format_position[1]);
- set_if_bigger(i, (uint) format_position[2]);
- allow_space= ((1 << i) | (1 << format_position[6]));
- allow_space&= (1 | 2 | 4 | 8);
-
- not_zero_date= 0;
- for (i = start_loop;
- i < MAX_DATE_PARTS-1 && str != end &&
- my_isdigit(&my_charset_latin1,*str);
- i++)
- {
- const char *start= str;
- ulong tmp_value= (uint) (uchar) (*str++ - '0');
- while (str != end && my_isdigit(&my_charset_latin1,str[0]) &&
- (!is_internal_format || field_length--))
- {
- tmp_value=tmp_value*10 + (ulong) (uchar) (*str - '0');
- str++;
- }
- date_len[i]= (uint) (str - start);
- if (tmp_value > 999999) // Impossible date part
- {
- *was_cut= 1;
- DBUG_RETURN(TIMESTAMP_NONE);
- }
- date[i]=tmp_value;
- not_zero_date|= tmp_value;
-
- /* Length-1 of next field */
- field_length= format_position[i+1] == 0 ? 3 : 1;
-
- if ((last_field_pos= str) == end)
- {
- i++; // Register last found part
- break;
- }
- /* Allow a 'T' after day to allow CCYYMMDDT type of fields */
- if (i == format_position[2] && *str == 'T')
- {
- str++; // ISO8601: CCYYMMDDThhmmss
- continue;
- }
- if (i == format_position[5]) // Seconds
- {
- if (*str == '.') // Followed by part seconds
- {
- str++;
- field_length= 5; // 5 digits after first (=6)
- }
- continue;
-
- /* No part seconds */
- date[++i]= 0;
- }
- while (str != end &&
- (my_ispunct(&my_charset_latin1,*str) ||
- my_isspace(&my_charset_latin1,*str)))
- {
- if (my_isspace(&my_charset_latin1,*str))
- {
- if (!(allow_space & (1 << i)))
- {
- *was_cut= 1;
- DBUG_RETURN(TIMESTAMP_NONE);
- }
- found_space= 1;
- }
- str++;
- found_delimitier= 1; // Should be a 'normal' date
- }
- /* Check if next position is AM/PM */
- if (i == format_position[6]) // Seconds, time for AM/PM
- {
- i++; // Skip AM/PM part
- if (format_position[7] != 255) // If using AM/PM
- {
- if (str+2 <= end && (str[1] == 'M' || str[1] == 'm'))
- {
- if (str[0] == 'p' || str[0] == 'P')
- add_hours= 12;
- else if (str[0] != 'a' || str[0] != 'A')
- continue; // Not AM/PM
- str+= 2; // Skip AM/PM
- /* Skip space after AM/PM */
- while (str != end && my_isspace(&my_charset_latin1,*str))
- str++;
- }
- }
- }
- last_field_pos= str;
- }
- if (found_delimitier && !found_space && (flags & TIME_DATETIME_ONLY))
- {
- *was_cut= 1;
- DBUG_RETURN(TIMESTAMP_NONE); // Can't be a datetime
- }
-
- str= last_field_pos;
-
- number_of_fields= i - start_loop;
- while (i < MAX_DATE_PARTS)
- {
- date_len[i]= 0;
- date[i++]= 0;
- }
-
- if (!is_internal_format)
- {
- year_length= date_len[(uint) format_position[0]];
- if (!year_length) // Year must be specified
- {
- *was_cut= 1;
- DBUG_RETURN(TIMESTAMP_NONE);
- }
-
- l_time->year= date[(uint) format_position[0]];
- l_time->month= date[(uint) format_position[1]];
- l_time->day= date[(uint) format_position[2]];
- l_time->hour= date[(uint) format_position[3]];
- l_time->minute= date[(uint) format_position[4]];
- l_time->second= date[(uint) format_position[5]];
-
- frac_pos= (uint) format_position[6];
- frac_len= date_len[frac_pos];
- if (frac_len < 6)
- date[frac_pos]*= (uint) log_10_int[6 - frac_len];
- l_time->second_part= date[frac_pos];
-
- if (format_position[7] != (uchar) 255)
- {
- if (l_time->hour > 12)
- {
- *was_cut= 1;
- goto err;
- }
- l_time->hour= l_time->hour%12 + add_hours;
- }
- }
- else
- {
- l_time->year= date[0];
- l_time->month= date[1];
- l_time->day= date[2];
- l_time->hour= date[3];
- l_time->minute= date[4];
- l_time->second= date[5];
- if (date_len[6] < 6)
- date[6]*= (uint) log_10_int[6 - date_len[6]];
- l_time->second_part=date[6];
- }
- l_time->neg= 0;
-
- if (year_length == 2 && i >= format_position[1] && i >=format_position[2] &&
- (l_time->month || l_time->day))
- l_time->year+= (l_time->year < YY_PART_YEAR ? 2000 : 1900);
-
- if (number_of_fields < 3 || l_time->month > 12 ||
- l_time->day > 31 || l_time->hour > 23 ||
- l_time->minute > 59 || l_time->second > 59 ||
- (!(flags & TIME_FUZZY_DATE) && (l_time->month == 0 || l_time->day == 0)))
- {
- /* Only give warning for a zero date if there is some garbage after */
- if (!not_zero_date) // If zero date
- {
- for (; str != end ; str++)
- {
- if (!my_isspace(&my_charset_latin1, *str))
- {
- not_zero_date= 1; // Give warning
- break;
- }
- }
- }
- if (not_zero_date)
- *was_cut= 1;
- goto err;
- }
-
- l_time->time_type= (number_of_fields <= 3 ?
- TIMESTAMP_DATE : TIMESTAMP_DATETIME);
-
- for (; str != end ; str++)
- {
- if (!my_isspace(&my_charset_latin1,*str))
- {
- *was_cut= 1;
- break;
- }
- }
-
- DBUG_RETURN(l_time->time_type=
- (number_of_fields <= 3 ? TIMESTAMP_DATE : TIMESTAMP_DATETIME));
-
-err:
- bzero((char*) l_time, sizeof(*l_time));
- DBUG_RETURN(TIMESTAMP_DATETIME_ERROR);
-}
-
-
/*
Convert a timestamp string to a TIME value and produce a warning
if string was truncated during conversion.
NOTE
- See description of str_to_TIME() for more information.
+ See description of str_to_datetime() for more information.
*/
timestamp_type
-str_to_TIME_with_warn(const char *str, uint length, TIME *l_time, uint flags)
+str_to_datetime_with_warn(const char *str, uint length, TIME *l_time,
+ uint flags)
{
int was_cut;
- timestamp_type ts_type= str_to_TIME(str, length, l_time, flags, &was_cut);
+ timestamp_type ts_type= str_to_datetime(str, length, l_time, flags, &was_cut);
if (was_cut)
make_truncated_value_warning(current_thd, str, length, ts_type);
return ts_type;
@@ -748,190 +403,6 @@ my_time_t TIME_to_timestamp(THD *thd, const TIME *t, bool *in_dst_time_gap)
/*
- Convert a time string to a TIME struct.
-
- SYNOPSIS
- str_to_time()
- str A string in full TIMESTAMP format or
- [-] DAYS [H]H:MM:SS, [H]H:MM:SS, [M]M:SS, [H]HMMSS,
- [M]MSS or [S]S
- There may be an optional [.second_part] after seconds
- length Length of str
- l_time Store result here
- was_cut Set to 1 if value was cut during conversion or to 0
- otherwise.
-
- NOTES
- Because of the extra days argument, this function can only
- work with times where the time arguments are in the above order.
-
- RETURN
- 0 ok
- 1 error
-*/
-
-bool str_to_time(const char *str, uint length, TIME *l_time, int *was_cut)
-{
- long date[5],value;
- const char *end=str+length, *end_of_days;
- bool found_days,found_hours;
- uint state;
-
- l_time->neg=0;
- *was_cut= 0;
- for (; str != end && my_isspace(&my_charset_latin1,*str) ; str++)
- length--;
- if (str != end && *str == '-')
- {
- l_time->neg=1;
- str++;
- length--;
- }
- if (str == end)
- return 1;
-
- /* Check first if this is a full TIMESTAMP */
- if (length >= 12)
- { // Probably full timestamp
- enum timestamp_type res= str_to_TIME(str,length,l_time,
- (TIME_FUZZY_DATE |
- TIME_DATETIME_ONLY),
- was_cut);
- if ((int) res >= (int) TIMESTAMP_DATETIME_ERROR)
- return res == TIMESTAMP_DATETIME_ERROR;
- /* We need to restore was_cut flag since str_to_TIME can modify it */
- *was_cut= 0;
- }
-
- /* Not a timestamp. Try to get this as a DAYS_TO_SECOND string */
- for (value=0; str != end && my_isdigit(&my_charset_latin1,*str) ; str++)
- value=value*10L + (long) (*str - '0');
-
- /* Skip all space after 'days' */
- end_of_days= str;
- for (; str != end && my_isspace(&my_charset_latin1, str[0]) ; str++)
- ;
-
- LINT_INIT(state);
- found_days=found_hours=0;
- if ((uint) (end-str) > 1 && str != end_of_days &&
- my_isdigit(&my_charset_latin1, *str))
- { // Found days part
- date[0]= value;
- state= 1; // Assume next is hours
- found_days= 1;
- }
- else if ((end-str) > 1 && *str == time_separator &&
- my_isdigit(&my_charset_latin1, str[1]))
- {
- date[0]=0; // Assume we found hours
- date[1]=value;
- state=2;
- found_hours=1;
- str++; // skip ':'
- }
- else
- {
- /* String given as one number; assume HHMMSS format */
- date[0]= 0;
- date[1]= value/10000;
- date[2]= value/100 % 100;
- date[3]= value % 100;
- state=4;
- goto fractional;
- }
-
- /* Read hours, minutes and seconds */
- for (;;)
- {
- for (value=0; str != end && my_isdigit(&my_charset_latin1,*str) ; str++)
- value=value*10L + (long) (*str - '0');
- date[state++]=value;
- if (state == 4 || (end-str) < 2 || *str != time_separator ||
- !my_isdigit(&my_charset_latin1,str[1]))
- break;
- str++; // Skip time_separator (':')
- }
-
- if (state != 4)
- { // Not HH:MM:SS
- /* Fix the date to assume that seconds was given */
- if (!found_hours && !found_days)
- {
- bmove_upp((char*) (date+4), (char*) (date+state),
- sizeof(long)*(state-1));
- bzero((char*) date, sizeof(long)*(4-state));
- }
- else
- bzero((char*) (date+state), sizeof(long)*(4-state));
- }
-
-fractional:
- /* Get fractional second part */
- if ((end-str) >= 2 && *str == '.' && my_isdigit(&my_charset_latin1,str[1]))
- {
- uint field_length=5;
- str++; value=(uint) (uchar) (*str - '0');
- while (++str != end &&
- my_isdigit(&my_charset_latin1,str[0]) &&
- field_length--)
- value=value*10 + (uint) (uchar) (*str - '0');
- if (field_length)
- value*= (long) log_10_int[field_length];
- date[4]=value;
- }
- else
- date[4]=0;
-
- if (internal_format_positions[7] != 255)
- {
- /* Read a possible AM/PM */
- while (str != end && my_isspace(&my_charset_latin1, *str))
- str++;
- if (str+2 <= end && (str[1] == 'M' || str[1] == 'm'))
- {
- if (str[0] == 'p' || str[0] == 'P')
- {
- str+= 2;
- date[1]= date[1]%12 + 12;
- }
- else if (str[0] == 'a' || str[0] == 'A')
- str+=2;
- }
- }
-
- /* Some simple checks */
- if (date[2] >= 60 || date[3] >= 60)
- {
- *was_cut= 1;
- return 1;
- }
- l_time->year= 0; // For protocol::store_time
- l_time->month= 0;
- l_time->day= date[0];
- l_time->hour= date[1];
- l_time->minute= date[2];
- l_time->second= date[3];
- l_time->second_part= date[4];
- l_time->time_type= TIMESTAMP_TIME;
-
- /* Check if there is garbage at end of the TIME specification */
- if (str != end)
- {
- do
- {
- if (!my_isspace(&my_charset_latin1,*str))
- {
- *was_cut= 1;
- break;
- }
- } while (++str != end);
- }
- return 0;
-}
-
-
-/*
Convert a time string to a TIME struct and produce a warning
if string was cut during conversion.
@@ -944,7 +415,7 @@ str_to_time_with_warn(const char *str, uint length, TIME *l_time)
int was_cut;
bool ret_val= str_to_time(str, length, l_time, &was_cut);
if (was_cut)
- make_truncated_value_warning(current_thd, str, length, TIMESTAMP_TIME);
+ make_truncated_value_warning(current_thd, str, length, MYSQL_TIMESTAMP_TIME);
return ret_val;
}
@@ -1210,10 +681,10 @@ bool parse_date_time_format(timestamp_type format_type,
The last test is to ensure that %p is used if and only if
it's needed.
*/
- if ((format_type == TIMESTAMP_DATETIME &&
+ if ((format_type == MYSQL_TIMESTAMP_DATETIME &&
!test_all_bits(part_map, (1 | 2 | 4 | 8 | 16 | 32))) ||
- (format_type == TIMESTAMP_DATE && part_map != (1 | 2 | 4)) ||
- (format_type == TIMESTAMP_TIME &&
+ (format_type == MYSQL_TIMESTAMP_DATE && part_map != (1 | 2 | 4)) ||
+ (format_type == MYSQL_TIMESTAMP_TIME &&
!test_all_bits(part_map, 8 | 16 | 32)) ||
!allow_separator || // %option should be last
(need_p && dt_pos[6] +1 != dt_pos[7]) ||
@@ -1256,10 +727,10 @@ bool parse_date_time_format(timestamp_type format_type,
format_str= 0;
switch (format_type) {
- case TIMESTAMP_DATE:
+ case MYSQL_TIMESTAMP_DATE:
format_str= known_date_time_formats[INTERNAL_FORMAT].date_format;
/* fall through */
- case TIMESTAMP_TIME:
+ case MYSQL_TIMESTAMP_TIME:
if (!format_str)
format_str=known_date_time_formats[INTERNAL_FORMAT].time_format;
@@ -1274,7 +745,7 @@ bool parse_date_time_format(timestamp_type format_type,
return 0;
if (separator_map == (1 | 2))
{
- if (format_type == TIMESTAMP_TIME)
+ if (format_type == MYSQL_TIMESTAMP_TIME)
{
if (*(format+2) != *(format+5))
break; // Error
@@ -1284,7 +755,7 @@ bool parse_date_time_format(timestamp_type format_type,
return 0;
}
break;
- case TIMESTAMP_DATETIME:
+ case MYSQL_TIMESTAMP_DATETIME:
/*
If there is no separators, allow the internal format as we can read
this. If separators are used, they must be between each part.
@@ -1403,11 +874,11 @@ const char *get_date_time_format_str(KNOWN_DATE_TIME_FORMAT *format,
timestamp_type type)
{
switch (type) {
- case TIMESTAMP_DATE:
+ case MYSQL_TIMESTAMP_DATE:
return format->date_format;
- case TIMESTAMP_DATETIME:
+ case MYSQL_TIMESTAMP_DATETIME:
return format->datetime_format;
- case TIMESTAMP_TIME:
+ case MYSQL_TIMESTAMP_TIME:
return format->time_format;
default:
DBUG_ASSERT(0); // Impossible
@@ -1489,13 +960,13 @@ void make_truncated_value_warning(THD *thd, const char *str_val,
str.append('\0');
switch (time_type) {
- case TIMESTAMP_DATE:
+ case MYSQL_TIMESTAMP_DATE:
type_str= "date";
break;
- case TIMESTAMP_TIME:
+ case MYSQL_TIMESTAMP_TIME:
type_str= "time";
break;
- case TIMESTAMP_DATETIME: // FALLTHROUGH
+ case MYSQL_TIMESTAMP_DATETIME: // FALLTHROUGH
default:
type_str= "datetime";
break;
@@ -1565,14 +1036,14 @@ ulonglong TIME_to_ulonglong_time(const TIME *time)
ulonglong TIME_to_ulonglong(const TIME *time)
{
switch (time->time_type) {
- case TIMESTAMP_DATETIME:
+ case MYSQL_TIMESTAMP_DATETIME:
return TIME_to_ulonglong_datetime(time);
- case TIMESTAMP_DATE:
+ case MYSQL_TIMESTAMP_DATE:
return TIME_to_ulonglong_date(time);
- case TIMESTAMP_TIME:
+ case MYSQL_TIMESTAMP_TIME:
return TIME_to_ulonglong_time(time);
- case TIMESTAMP_NONE:
- case TIMESTAMP_DATETIME_ERROR:
+ case MYSQL_TIMESTAMP_NONE:
+ case MYSQL_TIMESTAMP_ERROR:
return ULL(0);
default:
DBUG_ASSERT(0);
@@ -1595,17 +1066,17 @@ ulonglong TIME_to_ulonglong(const TIME *time)
void TIME_to_string(const TIME *time, String *str)
{
switch (time->time_type) {
- case TIMESTAMP_DATETIME:
+ case MYSQL_TIMESTAMP_DATETIME:
make_datetime((DATE_TIME_FORMAT*) 0, time, str);
break;
- case TIMESTAMP_DATE:
+ case MYSQL_TIMESTAMP_DATE:
make_date((DATE_TIME_FORMAT*) 0, time, str);
break;
- case TIMESTAMP_TIME:
+ case MYSQL_TIMESTAMP_TIME:
make_time((DATE_TIME_FORMAT*) 0, time, str);
break;
- case TIMESTAMP_NONE:
- case TIMESTAMP_DATETIME_ERROR:
+ case MYSQL_TIMESTAMP_NONE:
+ case MYSQL_TIMESTAMP_ERROR:
str->length(0);
str->set_charset(&my_charset_bin);
break;