summaryrefslogtreecommitdiff
path: root/libmysql
diff options
context:
space:
mode:
authorunknown <jimw@mysql.com>2005-07-18 16:12:44 -0700
committerunknown <jimw@mysql.com>2005-07-18 16:12:44 -0700
commit8eb6443348ae614e3fe4a1df1dab934390e85d0f (patch)
tree84495874ff2aa17253ec5fef315c2538a1c75871 /libmysql
parenta8f13702793be392a2df02d7121036d3d0c4949f (diff)
downloadmariadb-git-8eb6443348ae614e3fe4a1df1dab934390e85d0f.tar.gz
Fix number to date conversion so it always honors the NO_ZERO_DATE,
NO_ZERO_IN_DATE, and INVALID_DATES bits of SQL_MODE. (Bug #5906) include/my_time.h: Pass flags to number_to_datetime() so it can check things like NO_ZERO_DATE. libmysql/libmysql.c: Enable fuzzy date handling when converting strings and numbers to datetime fields. mysql-test/r/ps_2myisam.result: Update results mysql-test/r/ps_3innodb.result: Update results mysql-test/r/ps_4heap.result: Update results mysql-test/r/ps_5merge.result: Update results mysql-test/r/ps_6bdb.result: Update results mysql-test/r/ps_7ndb.result: Update results mysql-test/r/strict.result: Update results mysql-test/r/timezone2.result: Update results mysql-test/r/type_datetime.result: Update results mysql-test/t/strict.test: Add new regression test mysql-test/t/timezone2.test: Add new test of timestamp values in DST gap sql-common/my_time.c: Expand check_date() to check NO_ZERO_DATE and NO_ZERO_IN_DATE, and use it from number_to_datetime() as well as str_to_datetime(). Also, make number_to_datetime() return -1 on error so we can distinguish between a violation of NO_ZERO_DATE and other errors. sql/field.cc: Update conversion of numbers to date, datetime, and timestamp to use number_to_datetime() and report errors and warnings correctly and consistently.
Diffstat (limited to 'libmysql')
-rw-r--r--libmysql/libmysql.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/libmysql/libmysql.c b/libmysql/libmysql.c
index 2074abd0f85..4127600babc 100644
--- a/libmysql/libmysql.c
+++ b/libmysql/libmysql.c
@@ -3600,7 +3600,7 @@ static void fetch_string_with_conversion(MYSQL_BIND *param, char *value,
case MYSQL_TYPE_TIMESTAMP:
{
MYSQL_TIME *tm= (MYSQL_TIME *)buffer;
- (void) str_to_datetime(value, length, tm, 0, &err);
+ (void) str_to_datetime(value, length, tm, TIME_FUZZY_DATE, &err);
*param->error= test(err) && (param->buffer_type == MYSQL_TYPE_DATE &&
tm->time_type != MYSQL_TIMESTAMP_DATE);
break;
@@ -3718,7 +3718,8 @@ static void fetch_long_with_conversion(MYSQL_BIND *param, MYSQL_FIELD *field,
case MYSQL_TYPE_DATETIME:
{
int error;
- value= number_to_datetime(value, (MYSQL_TIME *) buffer, 1, &error);
+ value= number_to_datetime(value, (MYSQL_TIME *) buffer, TIME_FUZZY_DATE,
+ &error);
*param->error= test(error);
break;
}