summaryrefslogtreecommitdiff
path: root/include/my_time.h
diff options
context:
space:
mode:
authorunknown <kaa@polly.local>2006-10-04 17:13:32 +0400
committerunknown <kaa@polly.local>2006-10-04 17:13:32 +0400
commit634d3ff2c658902fa3ed4eb0f988a79564cfe94e (patch)
tree8b8e52453890c27a4b5e0e288b80cc0ccc883b0a /include/my_time.h
parent7c8931d83627a92b5a4ce12a81cf80b30988d885 (diff)
downloadmariadb-git-634d3ff2c658902fa3ed4eb0f988a79564cfe94e.tar.gz
Fixes a number of problems with time/datetime <-> string conversion functions:
- bug #11655 "Wrong time is returning from nested selects - maximum time exists - input and output TIME values were not validated properly in several conversion functions - bug #20927 "sec_to_time treats big unsigned as signed" - integer overflows were not checked in several functions. As a result, input values like 2^32 or 3600*2^32 were treated as 0 - BIGINT UNSIGNED values were treated as SIGNED in several functions - in cases where both input string truncation and out-of-range TIME value occur, only 'truncated incorrect time value' warning was produced include/my_time.h: Added defines for the TIME limits Added defines for the warning flags set by str_to_time() and check_time_range() Added check_time_range() declaration mysql-test/r/func_sapdb.result: Fixed testcases which relied on incorrect TIMEDIFF() behaviour mysql-test/r/func_time.result: Fixed testcase which relied on incorrect behaviour Added testcases for out-of-range values in SEC_TO_TIME(), TIME_TO_SEC(), ADDTIME(), SUBTIME() and EXTRACT() mysql-test/t/func_time.test: Added testcases for out-of-range values in SEC_TO_TIME(), TIME_TO_SEC(), ADDTIME(), SUBTIME() and EXTRACT() sql-common/my_time.c: Added check_time_range() to be used from str_to_time() and item_timefunc.cc Added new out-of-range flag to str_to_time() warnings Use '%u' instead of '%d' in my_*_to_str() because the arguments are unsigned sql/field.cc: Replaced out-of-range checks with checks for flags returned by str_to_time() sql/item_timefunc.cc: Added wrappers over make_datetime() and make_time() which perform out-of-range checks on input values Moved common code in Item_func_sec_to_time::val_str() and Item_func_sec_to_time::val_int() into a separate function sec_to_time() Replaced calls to make_datetime() with make_datetime_with_warn() in Item_func_add_time and Item_func_timediff Checks for 'unsigned int' overflows in Item_func_maketime Use make_time_with_warn() instead of make_time() in Item_func_maketime Fixed incorrect sizeof() in Item_func_str_to_date::get_time() sql/time.cc: Check for return value of str_to_time() along with warning flags
Diffstat (limited to 'include/my_time.h')
-rw-r--r--include/my_time.h14
1 files changed, 13 insertions, 1 deletions
diff --git a/include/my_time.h b/include/my_time.h
index 94701e159c4..11c653f70d0 100644
--- a/include/my_time.h
+++ b/include/my_time.h
@@ -44,12 +44,24 @@ typedef long my_time_t;
#define TIME_FUZZY_DATE 1
#define TIME_DATETIME_ONLY 2
+#define MYSQL_TIME_WARN_TRUNCATED 1
+#define MYSQL_TIME_WARN_OUT_OF_RANGE 2
+
+/* Limits for the TIME data type */
+#define TIME_MAX_HOUR 838
+#define TIME_MAX_MINUTE 59
+#define TIME_MAX_SECOND 59
+#define TIME_MAX_VALUE (TIME_MAX_HOUR*10000 + TIME_MAX_MINUTE*100 + \
+ TIME_MAX_SECOND)
+
enum enum_mysql_timestamp_type
str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
uint flags, int *was_cut);
bool str_to_time(const char *str,uint length, MYSQL_TIME *l_time,
- int *was_cut);
+ int *warning);
+
+int check_time_range(struct st_mysql_time *time, int *warning);
long calc_daynr(uint year,uint month,uint day);