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
1ec91803
Commit
1ec91803
authored
Jul 03, 2016
by
Alexander Barkov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
MDEV-10317 EXCTACT(MINUTE_MICROSECOND) truncates data
parent
3ccf8218
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
472 additions
and
20 deletions
+472
-20
mysql-test/r/func_time.result
mysql-test/r/func_time.result
+329
-0
mysql-test/t/func_time.test
mysql-test/t/func_time.test
+74
-0
sql/item_timefunc.cc
sql/item_timefunc.cc
+20
-20
sql/item_timefunc.h
sql/item_timefunc.h
+49
-0
No files found.
mysql-test/r/func_time.result
View file @
1ec91803
...
...
@@ -2806,3 +2806,332 @@ Warning 1292 Truncated incorrect time value: '-1441:00:00'
#
# End of 10.0 tests
#
#
# Start of 10.1 tests
#
#
# MDEV-10317 EXCTACT(MINUTE_MICROSECOND) truncates data
#
CREATE TABLE t1 (a DATETIME(6));
INSERT INTO t1 VALUES ('1999-12-31 23:59:59.999999');
SELECT
a,
EXTRACT(YEAR FROM a),
EXTRACT(YEAR_MONTH FROM a),
EXTRACT(QUARTER FROM a),
EXTRACT(MONTH FROM a),
EXTRACT(WEEK FROM a),
EXTRACT(DAY FROM a),
EXTRACT(DAY_HOUR FROM a),
EXTRACT(DAY_MINUTE FROM a),
EXTRACT(DAY_SECOND FROM a),
EXTRACT(HOUR FROM a),
EXTRACT(HOUR_MINUTE FROM a),
EXTRACT(HOUR_SECOND FROM a),
EXTRACT(MINUTE FROM a),
EXTRACT(MINUTE_SECOND FROM a),
EXTRACT(SECOND FROM a),
EXTRACT(MICROSECOND FROM a),
EXTRACT(DAY_MICROSECOND FROM a),
EXTRACT(HOUR_MICROSECOND FROM a),
EXTRACT(MINUTE_MICROSECOND FROM a),
EXTRACT(SECOND_MICROSECOND FROM a)
FROM t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def test t1 t1 a a 12 26 26 Y 128 6 63
def EXTRACT(YEAR FROM a) 3 4 4 Y 32896 0 63
def EXTRACT(YEAR_MONTH FROM a) 3 6 6 Y 32896 0 63
def EXTRACT(QUARTER FROM a) 3 2 1 Y 32896 0 63
def EXTRACT(MONTH FROM a) 3 2 2 Y 32896 0 63
def EXTRACT(WEEK FROM a) 3 2 2 Y 32896 0 63
def EXTRACT(DAY FROM a) 3 2 2 Y 32896 0 63
def EXTRACT(DAY_HOUR FROM a) 3 5 4 Y 32896 0 63
def EXTRACT(DAY_MINUTE FROM a) 3 7 6 Y 32896 0 63
def EXTRACT(DAY_SECOND FROM a) 3 9 8 Y 32896 0 63
def EXTRACT(HOUR FROM a) 3 3 2 Y 32896 0 63
def EXTRACT(HOUR_MINUTE FROM a) 3 5 4 Y 32896 0 63
def EXTRACT(HOUR_SECOND FROM a) 3 7 6 Y 32896 0 63
def EXTRACT(MINUTE FROM a) 3 3 2 Y 32896 0 63
def EXTRACT(MINUTE_SECOND FROM a) 3 5 4 Y 32896 0 63
def EXTRACT(SECOND FROM a) 3 3 2 Y 32896 0 63
def EXTRACT(MICROSECOND FROM a) 3 7 6 Y 32896 0 63
def EXTRACT(DAY_MICROSECOND FROM a) 8 15 14 Y 32896 0 63
def EXTRACT(HOUR_MICROSECOND FROM a) 8 13 12 Y 32896 0 63
def EXTRACT(MINUTE_MICROSECOND FROM a) 8 11 10 Y 32896 0 63
def EXTRACT(SECOND_MICROSECOND FROM a) 3 9 8 Y 32896 0 63
a 1999-12-31 23:59:59.999999
EXTRACT(YEAR FROM a) 1999
EXTRACT(YEAR_MONTH FROM a) 199912
EXTRACT(QUARTER FROM a) 4
EXTRACT(MONTH FROM a) 12
EXTRACT(WEEK FROM a) 52
EXTRACT(DAY FROM a) 31
EXTRACT(DAY_HOUR FROM a) 3123
EXTRACT(DAY_MINUTE FROM a) 312359
EXTRACT(DAY_SECOND FROM a) 31235959
EXTRACT(HOUR FROM a) 23
EXTRACT(HOUR_MINUTE FROM a) 2359
EXTRACT(HOUR_SECOND FROM a) 235959
EXTRACT(MINUTE FROM a) 59
EXTRACT(MINUTE_SECOND FROM a) 5959
EXTRACT(SECOND FROM a) 59
EXTRACT(MICROSECOND FROM a) 999999
EXTRACT(DAY_MICROSECOND FROM a) 31235959999999
EXTRACT(HOUR_MICROSECOND FROM a) 235959999999
EXTRACT(MINUTE_MICROSECOND FROM a) 5959999999
EXTRACT(SECOND_MICROSECOND FROM a) 59999999
CREATE TABLE t2 AS SELECT
a,
EXTRACT(YEAR FROM a),
EXTRACT(YEAR_MONTH FROM a),
EXTRACT(QUARTER FROM a),
EXTRACT(MONTH FROM a),
EXTRACT(WEEK FROM a),
EXTRACT(DAY FROM a),
EXTRACT(DAY_HOUR FROM a),
EXTRACT(DAY_MINUTE FROM a),
EXTRACT(DAY_SECOND FROM a),
EXTRACT(HOUR FROM a),
EXTRACT(HOUR_MINUTE FROM a),
EXTRACT(HOUR_SECOND FROM a),
EXTRACT(MINUTE FROM a),
EXTRACT(MINUTE_SECOND FROM a),
EXTRACT(SECOND FROM a),
EXTRACT(MICROSECOND FROM a),
EXTRACT(DAY_MICROSECOND FROM a),
EXTRACT(HOUR_MICROSECOND FROM a),
EXTRACT(MINUTE_MICROSECOND FROM a),
EXTRACT(SECOND_MICROSECOND FROM a)
FROM t1;
SELECT * FROM t2;
a 1999-12-31 23:59:59.999999
EXTRACT(YEAR FROM a) 1999
EXTRACT(YEAR_MONTH FROM a) 199912
EXTRACT(QUARTER FROM a) 4
EXTRACT(MONTH FROM a) 12
EXTRACT(WEEK FROM a) 52
EXTRACT(DAY FROM a) 31
EXTRACT(DAY_HOUR FROM a) 3123
EXTRACT(DAY_MINUTE FROM a) 312359
EXTRACT(DAY_SECOND FROM a) 31235959
EXTRACT(HOUR FROM a) 23
EXTRACT(HOUR_MINUTE FROM a) 2359
EXTRACT(HOUR_SECOND FROM a) 235959
EXTRACT(MINUTE FROM a) 59
EXTRACT(MINUTE_SECOND FROM a) 5959
EXTRACT(SECOND FROM a) 59
EXTRACT(MICROSECOND FROM a) 999999
EXTRACT(DAY_MICROSECOND FROM a) 31235959999999
EXTRACT(HOUR_MICROSECOND FROM a) 235959999999
EXTRACT(MINUTE_MICROSECOND FROM a) 5959999999
EXTRACT(SECOND_MICROSECOND FROM a) 59999999
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` datetime(6) DEFAULT NULL,
`EXTRACT(YEAR FROM a)` int(4) DEFAULT NULL,
`EXTRACT(YEAR_MONTH FROM a)` int(6) DEFAULT NULL,
`EXTRACT(QUARTER FROM a)` int(2) DEFAULT NULL,
`EXTRACT(MONTH FROM a)` int(2) DEFAULT NULL,
`EXTRACT(WEEK FROM a)` int(2) DEFAULT NULL,
`EXTRACT(DAY FROM a)` int(2) DEFAULT NULL,
`EXTRACT(DAY_HOUR FROM a)` int(5) DEFAULT NULL,
`EXTRACT(DAY_MINUTE FROM a)` int(7) DEFAULT NULL,
`EXTRACT(DAY_SECOND FROM a)` int(9) DEFAULT NULL,
`EXTRACT(HOUR FROM a)` int(3) DEFAULT NULL,
`EXTRACT(HOUR_MINUTE FROM a)` int(5) DEFAULT NULL,
`EXTRACT(HOUR_SECOND FROM a)` int(7) DEFAULT NULL,
`EXTRACT(MINUTE FROM a)` int(3) DEFAULT NULL,
`EXTRACT(MINUTE_SECOND FROM a)` int(5) DEFAULT NULL,
`EXTRACT(SECOND FROM a)` int(3) DEFAULT NULL,
`EXTRACT(MICROSECOND FROM a)` int(7) DEFAULT NULL,
`EXTRACT(DAY_MICROSECOND FROM a)` bigint(15) DEFAULT NULL,
`EXTRACT(HOUR_MICROSECOND FROM a)` bigint(13) DEFAULT NULL,
`EXTRACT(MINUTE_MICROSECOND FROM a)` bigint(11) DEFAULT NULL,
`EXTRACT(SECOND_MICROSECOND FROM a)` int(9) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1,t2;
CREATE TABLE t1 (a TIME(6));
INSERT INTO t1 VALUES ('-838:59:59.999999'),('838:59:59.999999');
SELECT
a,
EXTRACT(YEAR FROM a),
EXTRACT(YEAR_MONTH FROM a),
EXTRACT(QUARTER FROM a),
EXTRACT(MONTH FROM a),
EXTRACT(WEEK FROM a),
EXTRACT(DAY FROM a),
EXTRACT(DAY_HOUR FROM a),
EXTRACT(DAY_MINUTE FROM a),
EXTRACT(DAY_SECOND FROM a),
EXTRACT(HOUR FROM a),
EXTRACT(HOUR_MINUTE FROM a),
EXTRACT(HOUR_SECOND FROM a),
EXTRACT(MINUTE FROM a),
EXTRACT(MINUTE_SECOND FROM a),
EXTRACT(SECOND FROM a),
EXTRACT(MICROSECOND FROM a),
EXTRACT(DAY_MICROSECOND FROM a),
EXTRACT(HOUR_MICROSECOND FROM a),
EXTRACT(MINUTE_MICROSECOND FROM a),
EXTRACT(SECOND_MICROSECOND FROM a)
FROM t1;
Catalog Database Table Table_alias Column Column_alias Type Length Max length Is_null Flags Decimals Charsetnr
def test t1 t1 a a 11 17 17 Y 128 6 63
def EXTRACT(YEAR FROM a) 3 4 1 Y 32896 0 63
def EXTRACT(YEAR_MONTH FROM a) 3 6 1 Y 32896 0 63
def EXTRACT(QUARTER FROM a) 3 2 1 Y 32896 0 63
def EXTRACT(MONTH FROM a) 3 2 1 Y 32896 0 63
def EXTRACT(WEEK FROM a) 3 2 9 Y 32896 0 63
def EXTRACT(DAY FROM a) 3 2 2 Y 32896 0 63
def EXTRACT(DAY_HOUR FROM a) 3 5 5 Y 32896 0 63
def EXTRACT(DAY_MINUTE FROM a) 3 7 7 Y 32896 0 63
def EXTRACT(DAY_SECOND FROM a) 3 9 9 Y 32896 0 63
def EXTRACT(HOUR FROM a) 3 3 3 Y 32896 0 63
def EXTRACT(HOUR_MINUTE FROM a) 3 5 5 Y 32896 0 63
def EXTRACT(HOUR_SECOND FROM a) 3 7 7 Y 32896 0 63
def EXTRACT(MINUTE FROM a) 3 3 3 Y 32896 0 63
def EXTRACT(MINUTE_SECOND FROM a) 3 5 5 Y 32896 0 63
def EXTRACT(SECOND FROM a) 3 3 3 Y 32896 0 63
def EXTRACT(MICROSECOND FROM a) 3 7 7 Y 32896 0 63
def EXTRACT(DAY_MICROSECOND FROM a) 8 15 15 Y 32896 0 63
def EXTRACT(HOUR_MICROSECOND FROM a) 8 13 13 Y 32896 0 63
def EXTRACT(MINUTE_MICROSECOND FROM a) 8 11 11 Y 32896 0 63
def EXTRACT(SECOND_MICROSECOND FROM a) 3 9 9 Y 32896 0 63
a -838:59:59.999999
EXTRACT(YEAR FROM a) 0
EXTRACT(YEAR_MONTH FROM a) 0
EXTRACT(QUARTER FROM a) 0
EXTRACT(MONTH FROM a) 0
EXTRACT(WEEK FROM a) 613566757
EXTRACT(DAY FROM a) 34
EXTRACT(DAY_HOUR FROM a) -3422
EXTRACT(DAY_MINUTE FROM a) -342259
EXTRACT(DAY_SECOND FROM a) -34225959
EXTRACT(HOUR FROM a) -22
EXTRACT(HOUR_MINUTE FROM a) -2259
EXTRACT(HOUR_SECOND FROM a) -225959
EXTRACT(MINUTE FROM a) -59
EXTRACT(MINUTE_SECOND FROM a) -5959
EXTRACT(SECOND FROM a) -59
EXTRACT(MICROSECOND FROM a) -999999
EXTRACT(DAY_MICROSECOND FROM a) -34225959999999
EXTRACT(HOUR_MICROSECOND FROM a) -225959999999
EXTRACT(MINUTE_MICROSECOND FROM a) -5959999999
EXTRACT(SECOND_MICROSECOND FROM a) -59999999
a 838:59:59.999999
EXTRACT(YEAR FROM a) 0
EXTRACT(YEAR_MONTH FROM a) 0
EXTRACT(QUARTER FROM a) 0
EXTRACT(MONTH FROM a) 0
EXTRACT(WEEK FROM a) 613566757
EXTRACT(DAY FROM a) 34
EXTRACT(DAY_HOUR FROM a) 3422
EXTRACT(DAY_MINUTE FROM a) 342259
EXTRACT(DAY_SECOND FROM a) 34225959
EXTRACT(HOUR FROM a) 22
EXTRACT(HOUR_MINUTE FROM a) 2259
EXTRACT(HOUR_SECOND FROM a) 225959
EXTRACT(MINUTE FROM a) 59
EXTRACT(MINUTE_SECOND FROM a) 5959
EXTRACT(SECOND FROM a) 59
EXTRACT(MICROSECOND FROM a) 999999
EXTRACT(DAY_MICROSECOND FROM a) 34225959999999
EXTRACT(HOUR_MICROSECOND FROM a) 225959999999
EXTRACT(MINUTE_MICROSECOND FROM a) 5959999999
EXTRACT(SECOND_MICROSECOND FROM a) 59999999
CREATE TABLE t2 AS SELECT
a,
EXTRACT(YEAR FROM a),
EXTRACT(YEAR_MONTH FROM a),
EXTRACT(QUARTER FROM a),
EXTRACT(MONTH FROM a),
EXTRACT(WEEK FROM a),
EXTRACT(DAY FROM a),
EXTRACT(DAY_HOUR FROM a),
EXTRACT(DAY_MINUTE FROM a),
EXTRACT(DAY_SECOND FROM a),
EXTRACT(HOUR FROM a),
EXTRACT(HOUR_MINUTE FROM a),
EXTRACT(HOUR_SECOND FROM a),
EXTRACT(MINUTE FROM a),
EXTRACT(MINUTE_SECOND FROM a),
EXTRACT(SECOND FROM a),
EXTRACT(MICROSECOND FROM a),
EXTRACT(DAY_MICROSECOND FROM a),
EXTRACT(HOUR_MICROSECOND FROM a),
EXTRACT(MINUTE_MICROSECOND FROM a),
EXTRACT(SECOND_MICROSECOND FROM a)
FROM t1;
SELECT * FROM t2;
a -838:59:59.999999
EXTRACT(YEAR FROM a) 0
EXTRACT(YEAR_MONTH FROM a) 0
EXTRACT(QUARTER FROM a) 0
EXTRACT(MONTH FROM a) 0
EXTRACT(WEEK FROM a) 613566757
EXTRACT(DAY FROM a) 34
EXTRACT(DAY_HOUR FROM a) -3422
EXTRACT(DAY_MINUTE FROM a) -342259
EXTRACT(DAY_SECOND FROM a) -34225959
EXTRACT(HOUR FROM a) -22
EXTRACT(HOUR_MINUTE FROM a) -2259
EXTRACT(HOUR_SECOND FROM a) -225959
EXTRACT(MINUTE FROM a) -59
EXTRACT(MINUTE_SECOND FROM a) -5959
EXTRACT(SECOND FROM a) -59
EXTRACT(MICROSECOND FROM a) -999999
EXTRACT(DAY_MICROSECOND FROM a) -34225959999999
EXTRACT(HOUR_MICROSECOND FROM a) -225959999999
EXTRACT(MINUTE_MICROSECOND FROM a) -5959999999
EXTRACT(SECOND_MICROSECOND FROM a) -59999999
a 838:59:59.999999
EXTRACT(YEAR FROM a) 0
EXTRACT(YEAR_MONTH FROM a) 0
EXTRACT(QUARTER FROM a) 0
EXTRACT(MONTH FROM a) 0
EXTRACT(WEEK FROM a) 613566757
EXTRACT(DAY FROM a) 34
EXTRACT(DAY_HOUR FROM a) 3422
EXTRACT(DAY_MINUTE FROM a) 342259
EXTRACT(DAY_SECOND FROM a) 34225959
EXTRACT(HOUR FROM a) 22
EXTRACT(HOUR_MINUTE FROM a) 2259
EXTRACT(HOUR_SECOND FROM a) 225959
EXTRACT(MINUTE FROM a) 59
EXTRACT(MINUTE_SECOND FROM a) 5959
EXTRACT(SECOND FROM a) 59
EXTRACT(MICROSECOND FROM a) 999999
EXTRACT(DAY_MICROSECOND FROM a) 34225959999999
EXTRACT(HOUR_MICROSECOND FROM a) 225959999999
EXTRACT(MINUTE_MICROSECOND FROM a) 5959999999
EXTRACT(SECOND_MICROSECOND FROM a) 59999999
SHOW CREATE TABLE t2;
Table Create Table
t2 CREATE TABLE `t2` (
`a` time(6) DEFAULT NULL,
`EXTRACT(YEAR FROM a)` int(4) DEFAULT NULL,
`EXTRACT(YEAR_MONTH FROM a)` int(6) DEFAULT NULL,
`EXTRACT(QUARTER FROM a)` int(2) DEFAULT NULL,
`EXTRACT(MONTH FROM a)` int(2) DEFAULT NULL,
`EXTRACT(WEEK FROM a)` int(2) DEFAULT NULL,
`EXTRACT(DAY FROM a)` int(2) DEFAULT NULL,
`EXTRACT(DAY_HOUR FROM a)` int(5) DEFAULT NULL,
`EXTRACT(DAY_MINUTE FROM a)` int(7) DEFAULT NULL,
`EXTRACT(DAY_SECOND FROM a)` int(9) DEFAULT NULL,
`EXTRACT(HOUR FROM a)` int(3) DEFAULT NULL,
`EXTRACT(HOUR_MINUTE FROM a)` int(5) DEFAULT NULL,
`EXTRACT(HOUR_SECOND FROM a)` int(7) DEFAULT NULL,
`EXTRACT(MINUTE FROM a)` int(3) DEFAULT NULL,
`EXTRACT(MINUTE_SECOND FROM a)` int(5) DEFAULT NULL,
`EXTRACT(SECOND FROM a)` int(3) DEFAULT NULL,
`EXTRACT(MICROSECOND FROM a)` int(7) DEFAULT NULL,
`EXTRACT(DAY_MICROSECOND FROM a)` bigint(15) DEFAULT NULL,
`EXTRACT(HOUR_MICROSECOND FROM a)` bigint(13) DEFAULT NULL,
`EXTRACT(MINUTE_MICROSECOND FROM a)` bigint(11) DEFAULT NULL,
`EXTRACT(SECOND_MICROSECOND FROM a)` int(9) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
DROP TABLE t1,t2;
#
# End of 10.1 tests
#
mysql-test/t/func_time.test
View file @
1ec91803
...
...
@@ -1712,3 +1712,77 @@ SELECT
--
echo
#
--
echo
# End of 10.0 tests
--
echo
#
--
echo
#
--
echo
# Start of 10.1 tests
--
echo
#
--
echo
#
--
echo
# MDEV-10317 EXCTACT(MINUTE_MICROSECOND) truncates data
--
echo
#
let
$query
=
SELECT
a
,
EXTRACT
(
YEAR
FROM
a
),
EXTRACT
(
YEAR_MONTH
FROM
a
),
EXTRACT
(
QUARTER
FROM
a
),
EXTRACT
(
MONTH
FROM
a
),
EXTRACT
(
WEEK
FROM
a
),
EXTRACT
(
DAY
FROM
a
),
EXTRACT
(
DAY_HOUR
FROM
a
),
EXTRACT
(
DAY_MINUTE
FROM
a
),
EXTRACT
(
DAY_SECOND
FROM
a
),
EXTRACT
(
HOUR
FROM
a
),
EXTRACT
(
HOUR_MINUTE
FROM
a
),
EXTRACT
(
HOUR_SECOND
FROM
a
),
EXTRACT
(
MINUTE
FROM
a
),
EXTRACT
(
MINUTE_SECOND
FROM
a
),
EXTRACT
(
SECOND
FROM
a
),
EXTRACT
(
MICROSECOND
FROM
a
),
EXTRACT
(
DAY_MICROSECOND
FROM
a
),
EXTRACT
(
HOUR_MICROSECOND
FROM
a
),
EXTRACT
(
MINUTE_MICROSECOND
FROM
a
),
EXTRACT
(
SECOND_MICROSECOND
FROM
a
)
FROM
t1
;
CREATE
TABLE
t1
(
a
DATETIME
(
6
));
INSERT
INTO
t1
VALUES
(
'1999-12-31 23:59:59.999999'
);
--
vertical_results
--
enable_metadata
--
disable_ps_protocol
--
eval
$query
--
enable_ps_protocol
--
disable_metadata
--
horizontal_results
--
eval
CREATE
TABLE
t2
AS
$query
--
vertical_results
SELECT
*
FROM
t2
;
--
horizontal_results
SHOW
CREATE
TABLE
t2
;
DROP
TABLE
t1
,
t2
;
CREATE
TABLE
t1
(
a
TIME
(
6
));
INSERT
INTO
t1
VALUES
(
'-838:59:59.999999'
),(
'838:59:59.999999'
);
--
vertical_results
--
enable_metadata
--
disable_ps_protocol
--
eval
$query
--
enable_ps_protocol
--
disable_metadata
--
horizontal_results
--
eval
CREATE
TABLE
t2
AS
$query
--
vertical_results
SELECT
*
FROM
t2
;
--
horizontal_results
SHOW
CREATE
TABLE
t2
;
DROP
TABLE
t1
,
t2
;
--
echo
#
--
echo
# End of 10.1 tests
--
echo
#
sql/item_timefunc.cc
View file @
1ec91803
...
...
@@ -2192,26 +2192,26 @@ void Item_extract::fix_length_and_dec()
{
maybe_null
=
1
;
// If wrong date
switch
(
int_type
)
{
case
INTERVAL_YEAR
:
max_length
=
4
;
date_value
=
1
;
break
;
case
INTERVAL_YEAR_MONTH
:
max_length
=
6
;
date_value
=
1
;
break
;
case
INTERVAL_QUARTER
:
max_length
=
2
;
date_value
=
1
;
break
;
case
INTERVAL_MONTH
:
max_length
=
2
;
date_value
=
1
;
break
;
case
INTERVAL_WEEK
:
max_length
=
2
;
date_value
=
1
;
break
;
case
INTERVAL_DAY
:
max_length
=
2
;
date_value
=
1
;
break
;
case
INTERVAL_DAY_HOUR
:
max_length
=
9
;
date_value
=
0
;
break
;
case
INTERVAL_DAY_MINUTE
:
max_length
=
11
;
date_value
=
0
;
break
;
case
INTERVAL_DAY_SECOND
:
max_length
=
13
;
date_value
=
0
;
break
;
case
INTERVAL_HOUR
:
max_length
=
2
;
date_value
=
0
;
break
;
case
INTERVAL_HOUR_MINUTE
:
max_length
=
4
;
date_value
=
0
;
break
;
case
INTERVAL_HOUR_SECOND
:
max_length
=
6
;
date_value
=
0
;
break
;
case
INTERVAL_MINUTE
:
max_length
=
2
;
date_value
=
0
;
break
;
case
INTERVAL_MINUTE_SECOND
:
max_length
=
4
;
date_value
=
0
;
break
;
case
INTERVAL_SECOND
:
max_length
=
2
;
date_value
=
0
;
break
;
case
INTERVAL_MICROSECOND
:
max_length
=
2
;
date_value
=
0
;
break
;
case
INTERVAL_DAY_MICROSECOND
:
max_length
=
20
;
date_value
=
0
;
break
;
case
INTERVAL_HOUR_MICROSECOND
:
max_length
=
13
;
date_value
=
0
;
break
;
case
INTERVAL_MINUTE_MICROSECOND
:
max_length
=
11
;
date_value
=
0
;
break
;
case
INTERVAL_SECOND_MICROSECOND
:
max_length
=
9
;
date_value
=
0
;
break
;
case
INTERVAL_YEAR
:
set_date_length
(
4
);
break
;
// YYYY
case
INTERVAL_YEAR_MONTH
:
set_date_length
(
6
);
break
;
// YYYYMM
case
INTERVAL_QUARTER
:
set_date_length
(
2
);
break
;
// 1..4
case
INTERVAL_MONTH
:
set_date_length
(
2
);
break
;
// MM
case
INTERVAL_WEEK
:
set_date_length
(
2
);
break
;
// 0..52
case
INTERVAL_DAY
:
set_date_length
(
2
);
break
;
// DD
case
INTERVAL_DAY_HOUR
:
set_time_length
(
4
);
break
;
// DDhh
case
INTERVAL_DAY_MINUTE
:
set_time_length
(
6
);
break
;
// DDhhmm
case
INTERVAL_DAY_SECOND
:
set_time_length
(
8
);
break
;
// DDhhmmss
case
INTERVAL_HOUR
:
set_time_length
(
2
);
break
;
// hh
case
INTERVAL_HOUR_MINUTE
:
set_time_length
(
4
);
break
;
// hhmm
case
INTERVAL_HOUR_SECOND
:
set_time_length
(
6
);
break
;
// hhmmss
case
INTERVAL_MINUTE
:
set_time_length
(
2
);
break
;
// mm
case
INTERVAL_MINUTE_SECOND
:
set_time_length
(
4
);
break
;
// mmss
case
INTERVAL_SECOND
:
set_time_length
(
2
);
break
;
// ss
case
INTERVAL_MICROSECOND
:
set_time_length
(
6
);
break
;
// ffffff
case
INTERVAL_DAY_MICROSECOND
:
set_time_length
(
14
);
break
;
// DDhhmmssffffff
case
INTERVAL_HOUR_MICROSECOND
:
set_time_length
(
12
);
break
;
// hhmmssffffff
case
INTERVAL_MINUTE_MICROSECOND
:
set_time_length
(
10
);
break
;
// mmssffffff
case
INTERVAL_SECOND_MICROSECOND
:
set_time_length
(
8
);
break
;
// ssffffff
case
INTERVAL_LAST
:
DBUG_ASSERT
(
0
);
break
;
/* purecov: deadcode */
}
}
...
...
sql/item_timefunc.h
View file @
1ec91803
...
...
@@ -835,10 +835,57 @@ class Item_date_add_interval :public Item_temporal_hybrid_func
class
Item_extract
:
public
Item_int_func
{
bool
date_value
;
void
set_date_length
(
uint32
length
)
{
/*
Although DATE components (e.g. YEAR, YEAR_MONTH, QUARTER, MONTH, WEEK)
cannot have a sign, we should probably still add +1,
because all around the code we assume that max_length is sign inclusive.
Another options is to set unsigned_flag to "true".
*/
max_length
=
length
;
//QQ: see above
date_value
=
true
;
}
void
set_time_length
(
uint32
length
)
{
max_length
=
length
+
1
/*sign*/
;
date_value
=
false
;
}
public:
const
interval_type
int_type
;
// keep it public
Item_extract
(
THD
*
thd
,
interval_type
type_arg
,
Item
*
a
)
:
Item_int_func
(
thd
,
a
),
int_type
(
type_arg
)
{}
enum_field_types
field_type
()
const
{
switch
(
int_type
)
{
case
INTERVAL_YEAR
:
case
INTERVAL_YEAR_MONTH
:
case
INTERVAL_QUARTER
:
case
INTERVAL_MONTH
:
case
INTERVAL_WEEK
:
case
INTERVAL_DAY
:
case
INTERVAL_DAY_HOUR
:
case
INTERVAL_DAY_MINUTE
:
case
INTERVAL_DAY_SECOND
:
case
INTERVAL_HOUR
:
case
INTERVAL_HOUR_MINUTE
:
case
INTERVAL_HOUR_SECOND
:
case
INTERVAL_MINUTE
:
case
INTERVAL_MINUTE_SECOND
:
case
INTERVAL_SECOND
:
case
INTERVAL_MICROSECOND
:
case
INTERVAL_SECOND_MICROSECOND
:
return
MYSQL_TYPE_LONG
;
case
INTERVAL_DAY_MICROSECOND
:
case
INTERVAL_HOUR_MICROSECOND
:
case
INTERVAL_MINUTE_MICROSECOND
:
return
MYSQL_TYPE_LONGLONG
;
case
INTERVAL_LAST
:
break
;
}
DBUG_ASSERT
(
0
);
return
MYSQL_TYPE_LONGLONG
;
}
longlong
val_int
();
enum
Functype
functype
()
const
{
return
EXTRACT_FUNC
;
}
const
char
*
func_name
()
const
{
return
"extract"
;
}
...
...
@@ -883,6 +930,8 @@ class Item_extract :public Item_int_func
}
return
true
;
}
Field
*
create_field_for_create_select
(
TABLE
*
table
)
{
return
tmp_table_field_from_field_type
(
table
,
false
,
false
);
}
};
...
...
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