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
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
nexedi
MariaDB
Commits
4340fa11
Commit
4340fa11
authored
Aug 02, 2005
by
jimw@mysql.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix parsing of dates with 'T' between date and time, as in ISO-8601
date format. (Bug #7308)
parent
1e2e10af
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
27 additions
and
5 deletions
+27
-5
mysql-test/r/type_datetime.result
mysql-test/r/type_datetime.result
+10
-0
mysql-test/t/type_datetime.test
mysql-test/t/type_datetime.test
+10
-0
sql-common/my_time.c
sql-common/my_time.c
+7
-5
No files found.
mysql-test/r/type_datetime.result
View file @
4340fa11
...
...
@@ -153,3 +153,13 @@ dt
0000-00-00 00:00:00
0000-00-00 00:00:00
drop table t1;
create table t1 (dt datetime);
insert into t1 values ("20010101T010101");
insert into t1 values ("2001-01-01T01:01:01");
insert into t1 values ("2001-1-1T1:01:01");
select * from t1;
dt
2001-01-01 01:01:01
2001-01-01 01:01:01
2001-01-01 01:01:01
drop table t1;
mysql-test/t/type_datetime.test
View file @
4340fa11
...
...
@@ -102,4 +102,14 @@ insert into t1 values ("00-00-00"), ("00-00-00 00:00:00");
select
*
from
t1
;
drop
table
t1
;
#
# Bug #7308: ISO-8601 date format not handled correctly
#
create
table
t1
(
dt
datetime
);
insert
into
t1
values
(
"20010101T010101"
);
insert
into
t1
values
(
"2001-01-01T01:01:01"
);
insert
into
t1
values
(
"2001-1-1T1:01:01"
);
select
*
from
t1
;
drop
table
t1
;
# End of 4.1 tests
sql-common/my_time.c
View file @
4340fa11
...
...
@@ -147,7 +147,7 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
{
/* Found date in internal format (only numbers like YYYYMMDD) */
year_length
=
(
digits
==
4
||
digits
==
8
||
digits
>=
14
)
?
4
:
2
;
field_length
=
year_length
-
1
;
field_length
=
year_length
;
is_internal_format
=
1
;
format_position
=
internal_format_positions
;
}
...
...
@@ -177,6 +177,8 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
start_loop
=
5
;
/* Start with first date part */
}
}
field_length
=
format_position
[
0
]
==
0
?
4
:
2
;
}
/*
...
...
@@ -201,7 +203,7 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
const
char
*
start
=
str
;
ulong
tmp_value
=
(
uint
)
(
uchar
)
(
*
str
++
-
'0'
);
while
(
str
!=
end
&&
my_isdigit
(
&
my_charset_latin1
,
str
[
0
])
&&
(
!
is_internal_format
||
field_length
--
)
)
--
field_length
)
{
tmp_value
=
tmp_value
*
10
+
(
ulong
)
(
uchar
)
(
*
str
-
'0'
);
str
++
;
...
...
@@ -215,8 +217,8 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
date
[
i
]
=
tmp_value
;
not_zero_date
|=
tmp_value
;
/* Length
-1
of next field */
field_length
=
format_position
[
i
+
1
]
==
0
?
3
:
1
;
/* Length of next field */
field_length
=
format_position
[
i
+
1
]
==
0
?
4
:
2
;
if
((
last_field_pos
=
str
)
==
end
)
{
...
...
@@ -234,7 +236,7 @@ str_to_datetime(const char *str, uint length, MYSQL_TIME *l_time,
if
(
*
str
==
'.'
)
/* Followed by part seconds */
{
str
++
;
field_length
=
5
;
/* 5 digits after first (=6)
*/
field_length
=
6
;
/* 6 digits
*/
}
continue
;
...
...
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