summaryrefslogtreecommitdiff
path: root/sql/time.cc
diff options
context:
space:
mode:
authorkonstantin@mysql.com <>2004-10-16 00:12:59 +0400
committerkonstantin@mysql.com <>2004-10-16 00:12:59 +0400
commit33fb5ab61bb47439ff4dec5cd1c87eb66fa0193f (patch)
tree49c6d8401938fd8137914328918f5f64de298327 /sql/time.cc
parent1354b1bd5d3aa139cadb121816cc8331452e6651 (diff)
downloadmariadb-git-33fb5ab61bb47439ff4dec5cd1c87eb66fa0193f.tar.gz
A fix and test case for Bug#6049 "Loss of sign when using prepared
statements and negative time/date values". The bug was in wrong sprintf format used in the client library. The fix moves TIME -> string conversion functions to sql-common and utilized them in the client library.
Diffstat (limited to 'sql/time.cc')
-rw-r--r--sql/time.cc59
1 files changed, 3 insertions, 56 deletions
diff --git a/sql/time.cc b/sql/time.cc
index 4421b6aa00f..e76b169b336 100644
--- a/sql/time.cc
+++ b/sql/time.cc
@@ -747,13 +747,7 @@ const char *get_date_time_format_str(KNOWN_DATE_TIME_FORMAT *format,
void make_time(const DATE_TIME_FORMAT *format __attribute__((unused)),
const TIME *l_time, String *str)
{
- long length= my_sprintf((char*) str->ptr(),
- ((char*) str->ptr(),
- "%s%02d:%02d:%02d",
- (l_time->neg ? "-" : ""),
- l_time->hour,
- l_time->minute,
- l_time->second));
+ uint length= (uint) my_time_to_str(l_time, (char*) str->ptr());
str->length(length);
str->set_charset(&my_charset_bin);
}
@@ -762,12 +756,7 @@ void make_time(const DATE_TIME_FORMAT *format __attribute__((unused)),
void make_date(const DATE_TIME_FORMAT *format __attribute__((unused)),
const TIME *l_time, String *str)
{
- long length= my_sprintf((char*) str->ptr(),
- ((char*) str->ptr(),
- "%04d-%02d-%02d",
- l_time->year,
- l_time->month,
- l_time->day));
+ uint length= (uint) my_date_to_str(l_time, (char*) str->ptr());
str->length(length);
str->set_charset(&my_charset_bin);
}
@@ -776,15 +765,7 @@ void make_date(const DATE_TIME_FORMAT *format __attribute__((unused)),
void make_datetime(const DATE_TIME_FORMAT *format __attribute__((unused)),
const TIME *l_time, String *str)
{
- long length= my_sprintf((char*) str->ptr(),
- ((char*) str->ptr(),
- "%04d-%02d-%02d %02d:%02d:%02d",
- l_time->year,
- l_time->month,
- l_time->day,
- l_time->hour,
- l_time->minute,
- l_time->second));
+ uint length= (uint) my_datetime_to_str(l_time, (char*) str->ptr());
str->length(length);
str->set_charset(&my_charset_bin);
}
@@ -894,38 +875,4 @@ ulonglong TIME_to_ulonglong(const TIME *time)
return 0;
}
-
-/*
- Convert struct DATE/TIME/DATETIME value to string using built-in
- MySQL time conversion formats.
-
- SYNOPSIS
- TIME_to_string()
-
- NOTE
- The string must have at least MAX_DATE_REP_LENGTH bytes reserved.
-*/
-
-void TIME_to_string(const TIME *time, String *str)
-{
- switch (time->time_type) {
- case MYSQL_TIMESTAMP_DATETIME:
- make_datetime((DATE_TIME_FORMAT*) 0, time, str);
- break;
- case MYSQL_TIMESTAMP_DATE:
- make_date((DATE_TIME_FORMAT*) 0, time, str);
- break;
- case MYSQL_TIMESTAMP_TIME:
- make_time((DATE_TIME_FORMAT*) 0, time, str);
- break;
- case MYSQL_TIMESTAMP_NONE:
- case MYSQL_TIMESTAMP_ERROR:
- str->length(0);
- str->set_charset(&my_charset_bin);
- break;
- default:
- DBUG_ASSERT(0);
- }
-}
-
#endif