Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
23c9e0a7
Commit
23c9e0a7
authored
Jan 12, 2005
by
dlenev@brandersnatch.localdomain
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix for bug #7586 "TIMEDIFF for sec+microsec not working properly".
parent
2f321150
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
16 additions
and
22 deletions
+16
-22
mysql-test/r/func_sapdb.result
mysql-test/r/func_sapdb.result
+5
-2
mysql-test/t/func_sapdb.test
mysql-test/t/func_sapdb.test
+1
-0
sql/item_timefunc.cc
sql/item_timefunc.cc
+10
-20
No files found.
mysql-test/r/func_sapdb.result
View file @
23c9e0a7
...
...
@@ -97,13 +97,16 @@ timediff("1997-12-31 23:59:59.000001","1997-12-30 01:01:01.000002")
46:58:57.999999
select timediff("1997-12-30 23:59:59.000001","1997-12-31 23:59:59.000002");
timediff("1997-12-30 23:59:59.000001","1997-12-31 23:59:59.000002")
-2
3:59:59.999999
-2
4:00:00.000001
select timediff("1997-12-31 23:59:59.000001","23:59:59.000001");
timediff("1997-12-31 23:59:59.000001","23:59:59.000001")
NULL
select timediff("2000:01:01 00:00:00", "2000:01:01 00:00:00.000001");
timediff("2000:01:01 00:00:00", "2000:01:01 00:00:00.000001")
-00:00:00.000001
select timediff("2005-01-11 15:48:49.999999", "2005-01-11 15:48:50");
timediff("2005-01-11 15:48:49.999999", "2005-01-11 15:48:50")
-00:00:00.000001
select maketime(10,11,12);
maketime(10,11,12)
10:11:12
...
...
@@ -175,7 +178,7 @@ f8 date YES NULL
f9 time YES NULL
select * from t1;
f1 f2 f3 f4 f5 f6 f7 f8 f9
1997-01-01 1998-01-02 01:01:00 49:01:01 46:58:57 -2
3:59:59
10:11:12 2001-12-01 01:01:01 1997-12-31 23:59:59
1997-01-01 1998-01-02 01:01:00 49:01:01 46:58:57 -2
4:00:00
10:11:12 2001-12-01 01:01:01 1997-12-31 23:59:59
create table test(t1 datetime, t2 time, t3 time, t4 datetime);
insert into test values
('2001-01-01 01:01:01', '01:01:01', null, '2001-02-01 01:01:01'),
...
...
mysql-test/t/func_sapdb.test
View file @
23c9e0a7
...
...
@@ -54,6 +54,7 @@ select timediff("1997-12-31 23:59:59.000001","1997-12-30 01:01:01.000002");
select
timediff
(
"1997-12-30 23:59:59.000001"
,
"1997-12-31 23:59:59.000002"
);
select
timediff
(
"1997-12-31 23:59:59.000001"
,
"23:59:59.000001"
);
select
timediff
(
"2000:01:01 00:00:00"
,
"2000:01:01 00:00:00.000001"
);
select
timediff
(
"2005-01-11 15:48:49.999999"
,
"2005-01-11 15:48:50"
);
--
enable_ps_protocol
select
maketime
(
10
,
11
,
12
);
...
...
sql/item_timefunc.cc
View file @
23c9e0a7
...
...
@@ -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
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment