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
ea4c3481
Commit
ea4c3481
authored
Dec 15, 2005
by
aivanov@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fixed BUG #12440: "Incorrect processing of time values containing
long fraction and/or large exponent part".
parent
b21e1d41
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
60 additions
and
6 deletions
+60
-6
mysql-test/r/type_time.result
mysql-test/r/type_time.result
+24
-0
mysql-test/t/type_time.test
mysql-test/t/type_time.test
+14
-0
sql-common/my_time.c
sql-common/my_time.c
+22
-6
No files found.
mysql-test/r/type_time.result
View file @
ea4c3481
...
@@ -85,3 +85,27 @@ sec_to_time(time_to_sec(t))
...
@@ -85,3 +85,27 @@ sec_to_time(time_to_sec(t))
13:00:00
13:00:00
09:00:00
09:00:00
drop table t1;
drop table t1;
SELECT CAST(235959.123456 AS TIME);
CAST(235959.123456 AS TIME)
23:59:59.123456
SELECT CAST(0.235959123456e+6 AS TIME);
CAST(0.235959123456e+6 AS TIME)
23:59:59.123456
SELECT CAST(235959123456e-6 AS TIME);
CAST(235959123456e-6 AS TIME)
23:59:59.123456
SELECT CAST(235959.1234567 AS TIME);
CAST(235959.1234567 AS TIME)
23:59:59.123456
Warnings:
Warning 1292 Truncated incorrect time value: '235959.1234567'
SELECT CAST(0.2359591234567e6 AS TIME);
CAST(0.2359591234567e6 AS TIME)
23:59:59.123456
Warnings:
Warning 1292 Truncated incorrect time value: '235959.1234567'
SELECT CAST(0.2359591234567e+30 AS TIME);
CAST(0.2359591234567e+30 AS TIME)
NULL
Warnings:
Warning 1292 Truncated incorrect time value: '2.359591234567e+29'
mysql-test/t/type_time.test
View file @
ea4c3481
...
@@ -21,4 +21,18 @@ select t, time_to_sec(t),sec_to_time(time_to_sec(t)) from t1;
...
@@ -21,4 +21,18 @@ select t, time_to_sec(t),sec_to_time(time_to_sec(t)) from t1;
select
sec_to_time
(
time_to_sec
(
t
))
from
t1
;
select
sec_to_time
(
time_to_sec
(
t
))
from
t1
;
drop
table
t1
;
drop
table
t1
;
#
# BUG #12440: Incorrect processing of time values containing
# long fraction part and/or large exponent part.
#
# These must return normal result:
SELECT
CAST
(
235959.123456
AS
TIME
);
SELECT
CAST
(
0.235959123456e+6
AS
TIME
);
SELECT
CAST
(
235959123456
e
-
6
AS
TIME
);
# These must cut fraction part and produce warning:
SELECT
CAST
(
235959.1234567
AS
TIME
);
SELECT
CAST
(
0.2359591234567e6
AS
TIME
);
# This must return NULL and produce warning:
SELECT
CAST
(
0.2359591234567e+30
AS
TIME
);
# End of 4.1 tests
# End of 4.1 tests
sql-common/my_time.c
View file @
ea4c3481
...
@@ -514,18 +514,34 @@ fractional:
...
@@ -514,18 +514,34 @@ fractional:
/* Get fractional second part */
/* Get fractional second part */
if
((
end
-
str
)
>=
2
&&
*
str
==
'.'
&&
my_isdigit
(
&
my_charset_latin1
,
str
[
1
]))
if
((
end
-
str
)
>=
2
&&
*
str
==
'.'
&&
my_isdigit
(
&
my_charset_latin1
,
str
[
1
]))
{
{
uint
field_length
=
5
;
int
field_length
=
5
;
str
++
;
value
=
(
uint
)
(
uchar
)
(
*
str
-
'0'
);
str
++
;
value
=
(
uint
)
(
uchar
)
(
*
str
-
'0'
);
while
(
++
str
!=
end
&&
while
(
++
str
!=
end
&&
my_isdigit
(
&
my_charset_latin1
,
*
str
))
my_isdigit
(
&
my_charset_latin1
,
str
[
0
])
&&
{
field_length
--
)
if
(
field_length
--
>
0
)
value
=
value
*
10
+
(
uint
)
(
uchar
)
(
*
str
-
'0'
);
value
=
value
*
10
+
(
uint
)
(
uchar
)
(
*
str
-
'0'
);
if
(
field_length
)
}
if
(
field_length
>
0
)
value
*=
(
long
)
log_10_int
[
field_length
];
value
*=
(
long
)
log_10_int
[
field_length
];
else
if
(
field_length
<
0
)
*
was_cut
=
1
;
date
[
4
]
=
value
;
date
[
4
]
=
value
;
}
}
else
else
date
[
4
]
=
0
;
date
[
4
]
=
0
;
/* Check for exponent part: E<gigit> | E<sign><digit> */
/* (may occur as result of %g formatting of time value) */
if
((
end
-
str
)
>
1
&&
(
*
str
==
'e'
||
*
str
==
'E'
)
&&
(
my_isdigit
(
&
my_charset_latin1
,
str
[
1
])
||
((
str
[
1
]
==
'-'
||
str
[
1
]
==
'+'
)
&&
(
end
-
str
)
>
2
&&
my_isdigit
(
&
my_charset_latin1
,
str
[
2
]))))
{
*
was_cut
=
1
;
return
1
;
}
if
(
internal_format_positions
[
7
]
!=
255
)
if
(
internal_format_positions
[
7
]
!=
255
)
{
{
...
...
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