summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorunknown <dlenev@mysql.com>2005-01-13 14:46:41 +0300
committerunknown <dlenev@mysql.com>2005-01-13 14:46:41 +0300
commit763d552689099ccbf91c4af76d98fc561e8b18b6 (patch)
treeba3a69996e439f283f19e363f7f4f0ea409c308a /sql
parent9edcc56cc8af12b5140fcb2ef973b44cb03d8f4c (diff)
parentd853e732b9f598671283064fef6d11ea9db1d8ca (diff)
downloadmariadb-git-763d552689099ccbf91c4af76d98fc561e8b18b6.tar.gz
Merge bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/dlenev/src/mysql-4.1-dtbug
Diffstat (limited to 'sql')
-rw-r--r--sql/item_timefunc.cc30
-rw-r--r--sql/sql_yacc.yy9
2 files changed, 11 insertions, 28 deletions
diff --git a/sql/item_timefunc.cc b/sql/item_timefunc.cc
index 0d652a431cb..f9c9d1f013d 100644
--- a/sql/item_timefunc.cc
+++ b/sql/item_timefunc.cc
@@ -2432,8 +2432,7 @@ void Item_func_add_time::print(String *str)
String *Item_func_timediff::val_str(String *str)
{
DBUG_ASSERT(fixed == 1);
- longlong seconds;
- long microseconds;
+ longlong microseconds;
long days;
int l_sign= 1;
TIME l_time1 ,l_time2, l_time3;
@@ -2457,32 +2456,23 @@ String *Item_func_timediff::val_str(String *str)
(uint) l_time2.month,
(uint) l_time2.day));
- microseconds= l_time1.second_part - l_sign*l_time2.second_part;
- seconds= ((longlong) days*86400L + l_time1.hour*3600L +
- l_time1.minute*60L + l_time1.second + microseconds/1000000L -
- (longlong)l_sign*(l_time2.hour*3600L+l_time2.minute*60L+
- l_time2.second));
+ microseconds= ((longlong)days*86400L +
+ l_time1.hour*3600L + l_time1.minute*60L + l_time1.second -
+ (longlong)l_sign*(l_time2.hour*3600L + l_time2.minute*60L +
+ l_time2.second))*1000000 +
+ l_time1.second_part - l_sign*l_time2.second_part;
l_time3.neg= 0;
- if (seconds < 0)
- {
- seconds= -seconds;
- l_time3.neg= 1;
- }
- else if (seconds == 0 && microseconds < 0)
+ if (microseconds < 0)
{
microseconds= -microseconds;
l_time3.neg= 1;
}
- if (microseconds < 0)
- {
- microseconds+= 1000000L;
- seconds--;
- }
- if ((l_time2.neg == l_time1.neg) && l_time1.neg)
+ if ((l_time2.neg == l_time1.neg) && l_time1.neg && microseconds)
l_time3.neg= l_time3.neg ? 0 : 1;
- calc_time_from_sec(&l_time3, (long) seconds, microseconds);
+ calc_time_from_sec(&l_time3, (long)(microseconds/1000000),
+ (long)(microseconds%1000000));
if (!make_datetime(l_time1.second_part || l_time2.second_part ?
TIME_MICROSECOND : TIME_ONLY,
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index a09694ee1e6..66f7882c4e7 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -1415,7 +1415,7 @@ type:
| YEAR_SYM opt_len field_options { $$=FIELD_TYPE_YEAR; }
| DATE_SYM { $$=FIELD_TYPE_DATE; }
| TIME_SYM { $$=FIELD_TYPE_TIME; }
- | TIMESTAMP
+ | TIMESTAMP opt_len
{
if (YYTHD->variables.sql_mode & MODE_MAXDB)
$$=FIELD_TYPE_DATETIME;
@@ -1428,13 +1428,6 @@ type:
$$=FIELD_TYPE_TIMESTAMP;
}
}
- | TIMESTAMP '(' NUM ')'
- {
- LEX *lex= Lex;
- lex->length= $3.str;
- lex->type|= NOT_NULL_FLAG;
- $$= FIELD_TYPE_TIMESTAMP;
- }
| DATETIME { $$=FIELD_TYPE_DATETIME; }
| TINYBLOB { Lex->charset=&my_charset_bin;
$$=FIELD_TYPE_TINY_BLOB; }