post-review changes 1
include/my_time.h: remove duplicate defines. cast to ulonglong to avoid overflow sql/field.cc: perform sign extension when reading packed TIME values sql/item_cmpfunc.cc: when converting a string to a date for the purpose of comparing it with another date, we should ignore strict sql mode. sql/item_timefunc.cc: better error message sql/item_timefunc.h: limit decimals appropriately sql/share/errmsg.txt: don't refer to an object as a "column" in error messages that are used not only for columns.
This commit is contained in:
parent
5346cb8d27
commit
8ddcd0cda8
@ -894,6 +894,7 @@ extern ulong crc32(ulong crc, const uchar *buf, uint len);
|
|||||||
extern uint my_set_max_open_files(uint files);
|
extern uint my_set_max_open_files(uint files);
|
||||||
void my_free_open_file_info(void);
|
void my_free_open_file_info(void);
|
||||||
|
|
||||||
|
#define HRTIME_RESOLUTION 1000000
|
||||||
typedef struct {ulonglong val;} my_hrtime_t;
|
typedef struct {ulonglong val;} my_hrtime_t;
|
||||||
typedef struct {ulonglong val;} my_timediff_t;
|
typedef struct {ulonglong val;} my_timediff_t;
|
||||||
void my_time_init();
|
void my_time_init();
|
||||||
@ -904,7 +905,7 @@ extern ulonglong my_getsystime(void);
|
|||||||
#define my_micro_time() (my_getsystime()/10)
|
#define my_micro_time() (my_getsystime()/10)
|
||||||
#define hrtime_to_time(X) ((X).val/1000000)
|
#define hrtime_to_time(X) ((X).val/1000000)
|
||||||
#define hrtime_from_time(X) ((ulonglong)((X)*1000000ULL))
|
#define hrtime_from_time(X) ((ulonglong)((X)*1000000ULL))
|
||||||
#define hrtime_to_double(X) ((X).val/1e6)
|
#define hrtime_to_double(X) ((X).val/(double)HRTIME_RESOLUTION)
|
||||||
#define hrtime_sec_part(X) ((ulong)((X).val%1000000))
|
#define hrtime_sec_part(X) ((ulong)((X).val%1000000))
|
||||||
#define my_time(X) hrtime_to_time(my_hrtime())
|
#define my_time(X) hrtime_to_time(my_hrtime())
|
||||||
#define my_micro_and_hrtime(X,Y) my_diff_and_hrtime(X,Y)
|
#define my_micro_and_hrtime(X,Y) my_diff_and_hrtime(X,Y)
|
||||||
|
@ -70,8 +70,10 @@ typedef long my_time_t;
|
|||||||
#define TIME_MAX_MINUTE 59
|
#define TIME_MAX_MINUTE 59
|
||||||
#define TIME_MAX_SECOND 59
|
#define TIME_MAX_SECOND 59
|
||||||
#define TIME_MAX_SECOND_PART 999999
|
#define TIME_MAX_SECOND_PART 999999
|
||||||
|
#define TIME_SECOND_PART_FACTOR (TIME_MAX_SECOND_PART+1)
|
||||||
|
#define TIME_SECOND_PART_DIGITS 6
|
||||||
#define TIME_MAX_VALUE (TIME_MAX_HOUR*10000 + TIME_MAX_MINUTE*100 + \
|
#define TIME_MAX_VALUE (TIME_MAX_HOUR*10000 + TIME_MAX_MINUTE*100 + \
|
||||||
TIME_MAX_SECOND + TIME_MAX_SECOND_PART/1e6)
|
TIME_MAX_SECOND + TIME_MAX_SECOND_PART/(double)TIME_SECOND_PART_FACTOR)
|
||||||
#define TIME_MAX_VALUE_SECONDS (TIME_MAX_HOUR * 3600L + \
|
#define TIME_MAX_VALUE_SECONDS (TIME_MAX_HOUR * 3600L + \
|
||||||
TIME_MAX_MINUTE * 60L + TIME_MAX_SECOND)
|
TIME_MAX_MINUTE * 60L + TIME_MAX_SECOND)
|
||||||
|
|
||||||
@ -139,8 +141,6 @@ void set_zero_time(MYSQL_TIME *tm, enum enum_mysql_timestamp_type time_type);
|
|||||||
sent using binary protocol fit in this buffer.
|
sent using binary protocol fit in this buffer.
|
||||||
*/
|
*/
|
||||||
#define MAX_DATE_STRING_REP_LENGTH 30
|
#define MAX_DATE_STRING_REP_LENGTH 30
|
||||||
#define MAX_SEC_PART_VALUE 999999
|
|
||||||
#define MAX_SEC_PART_DIGITS 6
|
|
||||||
#define AUTO_SEC_PART_DIGITS 31 /* same as NOT_FIXED_DEC */
|
#define AUTO_SEC_PART_DIGITS 31 /* same as NOT_FIXED_DEC */
|
||||||
|
|
||||||
int my_time_to_str(const MYSQL_TIME *l_time, char *to, int digits);
|
int my_time_to_str(const MYSQL_TIME *l_time, char *to, int digits);
|
||||||
@ -150,16 +150,16 @@ int my_TIME_to_str(const MYSQL_TIME *l_time, char *to, int digits);
|
|||||||
|
|
||||||
static inline longlong sec_part_shift(longlong second_part, int digits)
|
static inline longlong sec_part_shift(longlong second_part, int digits)
|
||||||
{
|
{
|
||||||
return second_part / log_10_int[MAX_SEC_PART_DIGITS - digits];
|
return second_part / (longlong)log_10_int[TIME_SECOND_PART_DIGITS - digits];
|
||||||
}
|
}
|
||||||
static inline longlong sec_part_unshift(longlong second_part, int digits)
|
static inline longlong sec_part_unshift(longlong second_part, int digits)
|
||||||
{
|
{
|
||||||
return second_part * log_10_int[MAX_SEC_PART_DIGITS - digits];
|
return second_part * (longlong)log_10_int[TIME_SECOND_PART_DIGITS - digits];
|
||||||
}
|
}
|
||||||
static inline ulong sec_part_truncate(ulong second_part, int digits)
|
static inline ulong sec_part_truncate(ulong second_part, int digits)
|
||||||
{
|
{
|
||||||
/* the cast here should be unnecessary! */
|
/* the cast here should be unnecessary! */
|
||||||
return second_part - second_part % (ulong)log_10_int[MAX_SEC_PART_DIGITS - digits];
|
return second_part - second_part % (ulong)log_10_int[TIME_SECOND_PART_DIGITS - digits];
|
||||||
}
|
}
|
||||||
|
|
||||||
#define hrtime_to_my_time(X) ((my_time_t)hrtime_to_time(X))
|
#define hrtime_to_my_time(X) ((my_time_t)hrtime_to_time(X))
|
||||||
|
@ -4420,7 +4420,7 @@ static my_bool setup_one_fetch_function(MYSQL_BIND *param, MYSQL_FIELD *field)
|
|||||||
field->max_length= MAX_DOUBLE_STRING_REP_LENGTH;
|
field->max_length= MAX_DOUBLE_STRING_REP_LENGTH;
|
||||||
break;
|
break;
|
||||||
case MYSQL_TYPE_TIME:
|
case MYSQL_TYPE_TIME:
|
||||||
field->max_length= 15; /* 19:23:48.123456 */
|
field->max_length= 17; /* -123:23:48.123456 */
|
||||||
param->skip_result= skip_result_with_length;
|
param->skip_result= skip_result_with_length;
|
||||||
break;
|
break;
|
||||||
case MYSQL_TYPE_DATE:
|
case MYSQL_TYPE_DATE:
|
||||||
|
@ -89,6 +89,7 @@ select * from v1;
|
|||||||
show columns from v1;
|
show columns from v1;
|
||||||
create table t2 select * from v1;
|
create table t2 select * from v1;
|
||||||
show create table t2;
|
show create table t2;
|
||||||
|
select * from t2;
|
||||||
|
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
@ -205,7 +205,7 @@ f8 date YES NULL
|
|||||||
f9 time(6) YES NULL
|
f9 time(6) YES NULL
|
||||||
select * from t1;
|
select * from t1;
|
||||||
f1 f2 f3 f4 f5 f6 f7 f8 f9
|
f1 f2 f3 f4 f5 f6 f7 f8 f9
|
||||||
1997-01-01 1998-01-02 01:01:00.000003 49:01:01.000001 46:58:57.999999 8275:29:36.710655 10:11:12 2001-12-01 01:01:01.000000 1997-12-31 23:59:59.000001
|
1997-01-01 1998-01-02 01:01:00.000003 49:01:01.000001 46:58:57.999999 -24:00:00.000001 10:11:12 2001-12-01 01:01:01.000000 1997-12-31 23:59:59.000001
|
||||||
create table test(t1 datetime, t2 time, t3 time, t4 datetime);
|
create table test(t1 datetime, t2 time, t3 time, t4 datetime);
|
||||||
insert into test values
|
insert into test values
|
||||||
('2001-01-01 01:01:01', '01:01:01', null, '2001-02-01 01:01:01'),
|
('2001-01-01 01:01:01', '01:01:01', null, '2001-02-01 01:01:01'),
|
||||||
|
@ -16,6 +16,11 @@ select sec_to_time(9001),sec_to_time(9001)+0,time_to_sec("15:12:22"),
|
|||||||
sec_to_time(time_to_sec("0:30:47")/6.21);
|
sec_to_time(time_to_sec("0:30:47")/6.21);
|
||||||
sec_to_time(9001) sec_to_time(9001)+0 time_to_sec("15:12:22") sec_to_time(time_to_sec("0:30:47")/6.21)
|
sec_to_time(9001) sec_to_time(9001)+0 time_to_sec("15:12:22") sec_to_time(time_to_sec("0:30:47")/6.21)
|
||||||
02:30:01 23001 54742 00:04:57.423510
|
02:30:01 23001 54742 00:04:57.423510
|
||||||
|
select sec_to_time(9001.1), time_to_sec('15:12:22.123456'), time_to_sec(15.5566778899);
|
||||||
|
sec_to_time(9001.1) time_to_sec('15:12:22.123456') time_to_sec(15.5566778899)
|
||||||
|
02:30:01.1 54742.123456 15.556677
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect time value: '15.5566778899'
|
||||||
select sec_to_time(time_to_sec('-838:59:59'));
|
select sec_to_time(time_to_sec('-838:59:59'));
|
||||||
sec_to_time(time_to_sec('-838:59:59'))
|
sec_to_time(time_to_sec('-838:59:59'))
|
||||||
-838:59:59
|
-838:59:59
|
||||||
@ -1487,7 +1492,7 @@ select convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as
|
|||||||
convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)), 'UTC', 'Europe/Moscow')
|
convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as datetime)), 'UTC', 'Europe/Moscow')
|
||||||
NULL
|
NULL
|
||||||
create table t1 (f1 integer, f2 date);
|
create table t1 (f1 integer, f2 date);
|
||||||
insert into t1 values (1,'2011-05-05'),(2,'2011-05-05'),(3,'2011-05-05'),(4,'2011-05-05'),(5,'2011-05-05');
|
insert into t1 values (1,'2011-05-05'),(2,'2011-05-05'),(3,'2011-05-05'),(4,'2011-05-05'),(5,'2011-05-05'),(6, '2011-05-06');
|
||||||
select * from t1 where 1 and concat(f2)=MAKEDATE(2011, 125);
|
select * from t1 where 1 and concat(f2)=MAKEDATE(2011, 125);
|
||||||
f1 f2
|
f1 f2
|
||||||
1 2011-05-05
|
1 2011-05-05
|
||||||
|
@ -23,9 +23,9 @@ select time_to_sec(sec_to_time(11111)), time_to_sec(sec_to_time(11111.22222));
|
|||||||
time_to_sec(sec_to_time(11111)) 11111
|
time_to_sec(sec_to_time(11111)) 11111
|
||||||
time_to_sec(sec_to_time(11111.22222)) 11111.22222
|
time_to_sec(sec_to_time(11111.22222)) 11111.22222
|
||||||
select current_timestamp(7);
|
select current_timestamp(7);
|
||||||
ERROR HY000: Incorrect arguments to now
|
ERROR 42000: Too big precision 7 specified for 'now'. Maximum is 6.
|
||||||
select curtime(7);
|
select curtime(7);
|
||||||
ERROR HY000: Incorrect arguments to curtime
|
ERROR 42000: Too big precision 7 specified for 'curtime'. Maximum is 6.
|
||||||
drop table if exists t1;
|
drop table if exists t1;
|
||||||
create table t1 select sec_to_time(12345), sec_to_time(12345.6789),
|
create table t1 select sec_to_time(12345), sec_to_time(12345.6789),
|
||||||
sec_to_time(1234567e-2), now(), curtime(0),
|
sec_to_time(1234567e-2), now(), curtime(0),
|
||||||
@ -130,7 +130,7 @@ t5 12:13:14.12345
|
|||||||
t6 12:13:14.123456
|
t6 12:13:14.123456
|
||||||
drop table t1;
|
drop table t1;
|
||||||
select CAST(@a AS DATETIME(7));
|
select CAST(@a AS DATETIME(7));
|
||||||
ERROR 42000: Too big precision 7 specified for column '(@a)'. Maximum is 6.
|
ERROR 42000: Too big precision 7 specified for '(@a)'. Maximum is 6.
|
||||||
SELECT CONVERT_TZ('2011-01-02 12:00:00', '+00:00', '+03:00');
|
SELECT CONVERT_TZ('2011-01-02 12:00:00', '+00:00', '+03:00');
|
||||||
CONVERT_TZ('2011-01-02 12:00:00', '+00:00', '+03:00')
|
CONVERT_TZ('2011-01-02 12:00:00', '+00:00', '+03:00')
|
||||||
2011-01-02 15:00:00
|
2011-01-02 15:00:00
|
||||||
@ -154,24 +154,24 @@ insert into t1 values ('2002-07-15 21:00:00');
|
|||||||
select time(f1) from t1;
|
select time(f1) from t1;
|
||||||
time(f1)
|
time(f1)
|
||||||
21:00:00.000000
|
21:00:00.000000
|
||||||
select time(f1) from t1 union all select time(f1) from t1;
|
select time(f1) from t1 union all select time(f1 + interval 1 second) from t1;
|
||||||
time(f1)
|
time(f1)
|
||||||
21:00:00.000000
|
21:00:00.000000
|
||||||
21:00:00.000000
|
21:00:01.000000
|
||||||
alter table t1 modify f1 timestamp;
|
alter table t1 modify f1 timestamp;
|
||||||
select time(f1) from t1;
|
select time(f1) from t1;
|
||||||
time(f1)
|
time(f1)
|
||||||
21:00:00
|
21:00:00
|
||||||
select time(f1) from t1 union all select time(f1) from t1;
|
select time(f1) from t1 union all select time(f1 + interval 1 second) from t1;
|
||||||
time(f1)
|
time(f1)
|
||||||
21:00:00
|
21:00:00
|
||||||
21:00:00
|
21:00:01
|
||||||
alter table t1 modify f1 varchar(100);
|
alter table t1 modify f1 varchar(100);
|
||||||
select time(f1) from t1;
|
select time(f1) from t1;
|
||||||
time(f1)
|
time(f1)
|
||||||
21:00:00
|
21:00:00
|
||||||
select time(f1) from t1 union all select time(f1) from t1;
|
select time(f1) from t1 union all select time(f1 + interval 1 second) from t1;
|
||||||
time(f1)
|
time(f1)
|
||||||
21:00:00.000000
|
21:00:00.000000
|
||||||
21:00:00.000000
|
21:00:01.000000
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -4105,6 +4105,11 @@ str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/20 00:00:00 GMT-6'
|
|||||||
1
|
1
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect date value: '2007/10/20 00:00:00 GMT-6'
|
Warning 1292 Truncated incorrect date value: '2007/10/20 00:00:00 GMT-6'
|
||||||
|
select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6';
|
||||||
|
str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6'
|
||||||
|
0
|
||||||
|
Warnings:
|
||||||
|
Warning 1292 Truncated incorrect date value: '2007/10/2000:00:00 GMT-6'
|
||||||
select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6';
|
select str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6';
|
||||||
str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6'
|
str_to_date('2007-10-01','%Y-%m-%d') = '2007-10-1 00:00:00 GMT-6'
|
||||||
1
|
1
|
||||||
@ -4168,14 +4173,10 @@ str_to_date('2007-10-00','%Y-%m-%d') between '2007/09/01 00:00:00'
|
|||||||
set SQL_MODE=TRADITIONAL;
|
set SQL_MODE=TRADITIONAL;
|
||||||
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
|
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
|
||||||
str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
|
str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
|
||||||
0
|
1
|
||||||
Warnings:
|
|
||||||
Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34'
|
|
||||||
select str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
|
select str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34';
|
||||||
str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
|
str_to_date('2007-10-01 12:34','%Y-%m-%d %H:%i') = '2007-10-00 12:34'
|
||||||
0
|
0
|
||||||
Warnings:
|
|
||||||
Warning 1292 Truncated incorrect datetime value: '2007-10-00 12:34'
|
|
||||||
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
|
select str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34';
|
||||||
str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34'
|
str_to_date('2007-10-00 12:34','%Y-%m-%d %H:%i') = '2007-10-01 12:34'
|
||||||
0
|
0
|
||||||
@ -4219,14 +4220,23 @@ str_to_date('','%Y-%m-%d') = ''
|
|||||||
1
|
1
|
||||||
Warnings:
|
Warnings:
|
||||||
Warning 1292 Truncated incorrect date value: ''
|
Warning 1292 Truncated incorrect date value: ''
|
||||||
select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL;
|
select str_to_date('2000-01-01','%Y-%m-%d') between '1000-01-01' and '2001-01-01';
|
||||||
str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL
|
str_to_date('2000-01-01','%Y-%m-%d') between '1000-01-01' and '2001-01-01'
|
||||||
|
1
|
||||||
|
select str_to_date('2000-01-01','%Y-%m-%d') between '1000-01-01' and NULL;
|
||||||
|
str_to_date('2000-01-01','%Y-%m-%d') between '1000-01-01' and NULL
|
||||||
NULL
|
NULL
|
||||||
select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00';
|
select str_to_date('2000-01-01','%Y-%m-%d') between NULL and '2001-01-01';
|
||||||
str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00'
|
str_to_date('2000-01-01','%Y-%m-%d') between NULL and '2001-01-01'
|
||||||
NULL
|
NULL
|
||||||
select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL;
|
select str_to_date('2000-01-01','%Y-%m-%d') between '2001-01-01' and NULL;
|
||||||
str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL
|
str_to_date('2000-01-01','%Y-%m-%d') between '2001-01-01' and NULL
|
||||||
|
0
|
||||||
|
select str_to_date('2000-01-01','%Y-%m-%d') between NULL and '1000-01-01';
|
||||||
|
str_to_date('2000-01-01','%Y-%m-%d') between NULL and '1000-01-01'
|
||||||
|
0
|
||||||
|
select str_to_date('2000-01-01','%Y-%m-%d') between NULL and NULL;
|
||||||
|
str_to_date('2000-01-01','%Y-%m-%d') between NULL and NULL
|
||||||
NULL
|
NULL
|
||||||
CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);
|
CREATE TABLE t1 (c11 INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY);
|
||||||
CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL,
|
CREATE TABLE t2 (c21 INT UNSIGNED NOT NULL,
|
||||||
|
@ -890,9 +890,9 @@ DROP TABLE b15776;
|
|||||||
CREATE TABLE b15776 (a year(-2));
|
CREATE TABLE b15776 (a year(-2));
|
||||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-2))' at line 1
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-2))' at line 1
|
||||||
CREATE TABLE b15776 (a timestamp(4294967294));
|
CREATE TABLE b15776 (a timestamp(4294967294));
|
||||||
ERROR 42000: Too big precision 4294967294 specified for column 'a'. Maximum is 6.
|
ERROR 42000: Too big precision 4294967294 specified for 'a'. Maximum is 6.
|
||||||
CREATE TABLE b15776 (a timestamp(4294967295));
|
CREATE TABLE b15776 (a timestamp(4294967295));
|
||||||
ERROR 42000: Too big precision 4294967295 specified for column 'a'. Maximum is 6.
|
ERROR 42000: Too big precision 4294967295 specified for 'a'. Maximum is 6.
|
||||||
CREATE TABLE b15776 (a timestamp(4294967296));
|
CREATE TABLE b15776 (a timestamp(4294967296));
|
||||||
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
ERROR 42000: Display width out of range for column 'a' (max = 4294967295)
|
||||||
CREATE TABLE b15776 (a timestamp(-1));
|
CREATE TABLE b15776 (a timestamp(-1));
|
||||||
|
@ -208,14 +208,10 @@ SELECT * FROM t1 WHERE a = '0000-00-00';
|
|||||||
a
|
a
|
||||||
0000-00-00
|
0000-00-00
|
||||||
0000-00-00
|
0000-00-00
|
||||||
Warnings:
|
|
||||||
Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 0
|
|
||||||
SELECT * FROM t2 WHERE a = '0000-00-00';
|
SELECT * FROM t2 WHERE a = '0000-00-00';
|
||||||
a
|
a
|
||||||
0000-00-00
|
0000-00-00
|
||||||
0000-00-00
|
0000-00-00
|
||||||
Warnings:
|
|
||||||
Warning 1292 Incorrect date value: '0000-00-00' for column 'a' at row 0
|
|
||||||
INSERT INTO t1 VALUES ('0000-00-00');
|
INSERT INTO t1 VALUES ('0000-00-00');
|
||||||
ERROR 22007: Incorrect date value: '0000-00-00' for column 'a' at row 1
|
ERROR 22007: Incorrect date value: '0000-00-00' for column 'a' at row 1
|
||||||
SET SQL_MODE=DEFAULT;
|
SET SQL_MODE=DEFAULT;
|
||||||
@ -239,12 +235,12 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||||||
1 SIMPLE t1 ref i i 4 const 1 Using where; Using index
|
1 SIMPLE t1 ref i i 4 const 1 Using where; Using index
|
||||||
SELECT * FROM t1 WHERE a = '1000-00-00';
|
SELECT * FROM t1 WHERE a = '1000-00-00';
|
||||||
a
|
a
|
||||||
Warnings:
|
1000-00-00
|
||||||
Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 0
|
1000-00-00
|
||||||
SELECT * FROM t2 WHERE a = '1000-00-00';
|
SELECT * FROM t2 WHERE a = '1000-00-00';
|
||||||
a
|
a
|
||||||
Warnings:
|
1000-00-00
|
||||||
Warning 1292 Incorrect date value: '1000-00-00' for column 'a' at row 0
|
1000-00-00
|
||||||
INSERT INTO t1 VALUES ('1000-00-00');
|
INSERT INTO t1 VALUES ('1000-00-00');
|
||||||
ERROR 22007: Incorrect date value: '1000-00-00' for column 'a' at row 1
|
ERROR 22007: Incorrect date value: '1000-00-00' for column 'a' at row 1
|
||||||
SET SQL_MODE=DEFAULT;
|
SET SQL_MODE=DEFAULT;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
drop table if exists t1, t2, t3;
|
drop table if exists t1, t2, t3;
|
||||||
create table t1 (a datetime(7));
|
create table t1 (a datetime(7));
|
||||||
ERROR 42000: Too big precision 7 specified for column 'a'. Maximum is 6.
|
ERROR 42000: Too big precision 7 specified for 'a'. Maximum is 6.
|
||||||
create table t1 (a datetime(3), key(a));
|
create table t1 (a datetime(3), key(a));
|
||||||
insert t1 values ('2010-12-11 00:20:03.1234');
|
insert t1 values ('2010-12-11 00:20:03.1234');
|
||||||
insert t1 values ('2010-12-11 15:47:11.1234');
|
insert t1 values ('2010-12-11 15:47:11.1234');
|
||||||
@ -147,6 +147,10 @@ t2 CREATE TABLE `t2` (
|
|||||||
`a` datetime(6) DEFAULT NULL,
|
`a` datetime(6) DEFAULT NULL,
|
||||||
`b` datetime(6) DEFAULT NULL
|
`b` datetime(6) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
select * from t2;
|
||||||
|
a b
|
||||||
|
2010-02-03 04:05:06.000000 2010-02-03 04:05:06.789100
|
||||||
|
2011-01-02 03:04:06.234500 2011-01-02 03:04:06.234561
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
CREATE TABLE t1 (
|
CREATE TABLE t1 (
|
||||||
@ -214,3 +218,129 @@ t2 p01 RANGE extract(microsecond from taken) 123000 3
|
|||||||
t2 p02 RANGE extract(microsecond from taken) 500000 4
|
t2 p02 RANGE extract(microsecond from taken) 500000 4
|
||||||
t2 p03 RANGE extract(microsecond from taken) MAXVALUE 3
|
t2 p03 RANGE extract(microsecond from taken) MAXVALUE 3
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
create table t1 (
|
||||||
|
q_date date,
|
||||||
|
q_time time,
|
||||||
|
q_time5 time(5),
|
||||||
|
q_datetime datetime,
|
||||||
|
q_datetime1 datetime(1),
|
||||||
|
q_datetime3 datetime(3),
|
||||||
|
q_datetime5 datetime(5),
|
||||||
|
q_timestamp timestamp,
|
||||||
|
q_timestamp2 timestamp(2),
|
||||||
|
q_timestamp4 timestamp(4),
|
||||||
|
q_timestamp6 timestamp(6),
|
||||||
|
q_varchar50 varchar(50),
|
||||||
|
q_varchar60 varchar(60),
|
||||||
|
q_varchar70 varchar(70),
|
||||||
|
q_varchar80 varchar(80));
|
||||||
|
create table t2 (
|
||||||
|
date_datetime datetime,
|
||||||
|
time_datetime datetime,
|
||||||
|
time5_varchar100 varchar(100),
|
||||||
|
datetime_time time,
|
||||||
|
datetime1_date date,
|
||||||
|
datetime3_timestamp timestamp,
|
||||||
|
datetime5_varchar100 varchar(100),
|
||||||
|
timestamp_datetime datetime,
|
||||||
|
timestamp2_date date,
|
||||||
|
timestamp4_time time,
|
||||||
|
timestamp6_varchar100 varchar(100),
|
||||||
|
varchar50_date date,
|
||||||
|
varchar60_datetime datetime,
|
||||||
|
varchar70_time time,
|
||||||
|
varchar80_timestamp timestamp);
|
||||||
|
insert t1 values ('2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432');
|
||||||
|
Warnings:
|
||||||
|
Note 1265 Data truncated for column 'q_date' at row 1
|
||||||
|
Note 1265 Data truncated for column 'q_time' at row 1
|
||||||
|
Note 1265 Data truncated for column 'q_time5' at row 1
|
||||||
|
select * from t1;;
|
||||||
|
q_date 2010-11-12
|
||||||
|
q_time 11:14:17
|
||||||
|
q_time5 11:14:17.76543
|
||||||
|
q_datetime 2010-11-12 11:14:17
|
||||||
|
q_datetime1 2010-11-12 11:14:17.7
|
||||||
|
q_datetime3 2010-11-12 11:14:17.765
|
||||||
|
q_datetime5 2010-11-12 11:14:17.76543
|
||||||
|
q_timestamp 2010-11-12 11:14:17
|
||||||
|
q_timestamp2 2010-11-12 11:14:17.76
|
||||||
|
q_timestamp4 2010-11-12 11:14:17.7654
|
||||||
|
q_timestamp6 2010-11-12 11:14:17.765432
|
||||||
|
q_varchar50 2010-11-12 11:14:17.765432
|
||||||
|
q_varchar60 2010-11-12 11:14:17.765432
|
||||||
|
q_varchar70 2010-11-12 11:14:17.765432
|
||||||
|
q_varchar80 2010-11-12 11:14:17.765432
|
||||||
|
insert t2 select * from t1;
|
||||||
|
Warnings:
|
||||||
|
Warning 1265 Data truncated for column 'time_datetime' at row 1
|
||||||
|
Note 1265 Data truncated for column 'datetime_time' at row 1
|
||||||
|
Note 1265 Data truncated for column 'datetime1_date' at row 1
|
||||||
|
Note 1265 Data truncated for column 'timestamp2_date' at row 1
|
||||||
|
Note 1265 Data truncated for column 'timestamp4_time' at row 1
|
||||||
|
Note 1265 Data truncated for column 'varchar50_date' at row 1
|
||||||
|
Note 1265 Data truncated for column 'varchar70_time' at row 1
|
||||||
|
select * from t2;;
|
||||||
|
date_datetime 2010-11-12 00:00:00
|
||||||
|
time_datetime 0000-00-00 00:00:00
|
||||||
|
time5_varchar100 11:14:17.76543
|
||||||
|
datetime_time 11:14:17
|
||||||
|
datetime1_date 2010-11-12
|
||||||
|
datetime3_timestamp 2010-11-12 11:14:17
|
||||||
|
datetime5_varchar100 2010-11-12 11:14:17.76543
|
||||||
|
timestamp_datetime 2010-11-12 11:14:17
|
||||||
|
timestamp2_date 2010-11-12
|
||||||
|
timestamp4_time 11:14:17
|
||||||
|
timestamp6_varchar100 2010-11-12 11:14:17.765432
|
||||||
|
varchar50_date 2010-11-12
|
||||||
|
varchar60_datetime 2010-11-12 11:14:17
|
||||||
|
varchar70_time 11:14:17
|
||||||
|
varchar80_timestamp 2010-11-12 11:14:17
|
||||||
|
alter table t1
|
||||||
|
change q_date date_datetime datetime,
|
||||||
|
change q_time time_datetime datetime,
|
||||||
|
change q_time5 time5_varchar100 varchar(100),
|
||||||
|
change q_datetime datetime_time time,
|
||||||
|
change q_datetime1 datetime1_date date,
|
||||||
|
change q_datetime3 datetime3_timestamp timestamp,
|
||||||
|
change q_datetime5 datetime5_varchar100 varchar(100),
|
||||||
|
change q_timestamp timestamp_datetime datetime,
|
||||||
|
change q_timestamp2 timestamp2_date date,
|
||||||
|
change q_timestamp4 timestamp4_time time,
|
||||||
|
change q_timestamp6 timestamp6_varchar100 varchar(100),
|
||||||
|
change q_varchar50 varchar50_date date,
|
||||||
|
change q_varchar60 varchar60_datetime datetime,
|
||||||
|
change q_varchar70 varchar70_time time,
|
||||||
|
change q_varchar80 varchar80_timestamp timestamp;
|
||||||
|
Warnings:
|
||||||
|
Warning 1265 Data truncated for column 'time_datetime' at row 1
|
||||||
|
Note 1265 Data truncated for column 'datetime_time' at row 1
|
||||||
|
Note 1265 Data truncated for column 'datetime1_date' at row 1
|
||||||
|
Note 1265 Data truncated for column 'timestamp2_date' at row 1
|
||||||
|
Note 1265 Data truncated for column 'timestamp4_time' at row 1
|
||||||
|
Note 1265 Data truncated for column 'varchar50_date' at row 1
|
||||||
|
Note 1265 Data truncated for column 'varchar70_time' at row 1
|
||||||
|
select * from t1;;
|
||||||
|
date_datetime 2010-11-12 00:00:00
|
||||||
|
time_datetime 0000-00-00 00:00:00
|
||||||
|
time5_varchar100 11:14:17.76543
|
||||||
|
datetime_time 11:14:17
|
||||||
|
datetime1_date 2010-11-12
|
||||||
|
datetime3_timestamp 2010-11-12 11:14:17
|
||||||
|
datetime5_varchar100 2010-11-12 11:14:17.76543
|
||||||
|
timestamp_datetime 2010-11-12 11:14:17
|
||||||
|
timestamp2_date 2010-11-12
|
||||||
|
timestamp4_time 11:14:17
|
||||||
|
timestamp6_varchar100 2010-11-12 11:14:17.765432
|
||||||
|
varchar50_date 2010-11-12
|
||||||
|
varchar60_datetime 2010-11-12 11:14:17
|
||||||
|
varchar70_time 11:14:17
|
||||||
|
varchar80_timestamp 2010-11-12 11:14:17
|
||||||
|
drop table t1, t2;
|
||||||
|
@ -721,7 +721,7 @@ t1 CREATE TABLE `t1` (
|
|||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (d decimal(66,0));
|
create table t1 (d decimal(66,0));
|
||||||
ERROR 42000: Too big precision 66 specified for column 'd'. Maximum is 65.
|
ERROR 42000: Too big precision 66 specified for 'd'. Maximum is 65.
|
||||||
CREATE TABLE t1 (i INT, d1 DECIMAL(9,2), d2 DECIMAL(9,2));
|
CREATE TABLE t1 (i INT, d1 DECIMAL(9,2), d2 DECIMAL(9,2));
|
||||||
INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),
|
INSERT INTO t1 VALUES (1, 101.40, 21.40), (1, -80.00, 0.00),
|
||||||
(2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),
|
(2, 0.00, 0.00), (2, -13.20, 0.00), (2, 59.60, 46.40),
|
||||||
|
@ -133,7 +133,7 @@ min(a)
|
|||||||
-0.010
|
-0.010
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (a float(200,100), b double(200,100));
|
create table t1 (a float(200,100), b double(200,100));
|
||||||
ERROR 42000: Too big scale 100 specified for column 'a'. Maximum is 30.
|
ERROR 42000: Too big scale 100 specified for 'a'. Maximum is 30.
|
||||||
create table t1 (c20 char);
|
create table t1 (c20 char);
|
||||||
insert into t1 values (5000.0);
|
insert into t1 values (5000.0);
|
||||||
Warnings:
|
Warnings:
|
||||||
|
@ -923,11 +923,11 @@ ERROR 42000: For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column
|
|||||||
select cast(ln(14000) as decimal(2,3)) c1;
|
select cast(ln(14000) as decimal(2,3)) c1;
|
||||||
ERROR 42000: For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '').
|
ERROR 42000: For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '').
|
||||||
create table t1 (sl decimal(70,30));
|
create table t1 (sl decimal(70,30));
|
||||||
ERROR 42000: Too big precision 70 specified for column 'sl'. Maximum is 65.
|
ERROR 42000: Too big precision 70 specified for 'sl'. Maximum is 65.
|
||||||
create table t1 (sl decimal(32,31));
|
create table t1 (sl decimal(32,31));
|
||||||
ERROR 42000: Too big scale 31 specified for column 'sl'. Maximum is 30.
|
ERROR 42000: Too big scale 31 specified for 'sl'. Maximum is 30.
|
||||||
create table t1 (sl decimal(0,38));
|
create table t1 (sl decimal(0,38));
|
||||||
ERROR 42000: Too big scale 38 specified for column 'sl'. Maximum is 30.
|
ERROR 42000: Too big scale 38 specified for 'sl'. Maximum is 30.
|
||||||
create table t1 (sl decimal(0,30));
|
create table t1 (sl decimal(0,30));
|
||||||
ERROR 42000: For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'sl').
|
ERROR 42000: For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column 'sl').
|
||||||
create table t1 (sl decimal(5, 5));
|
create table t1 (sl decimal(5, 5));
|
||||||
@ -1485,12 +1485,12 @@ SELECT CAST(1 AS decimal(65,10));
|
|||||||
CAST(1 AS decimal(65,10))
|
CAST(1 AS decimal(65,10))
|
||||||
1.0000000000
|
1.0000000000
|
||||||
SELECT CAST(1 AS decimal(66,10));
|
SELECT CAST(1 AS decimal(66,10));
|
||||||
ERROR 42000: Too big precision 66 specified for column '1'. Maximum is 65.
|
ERROR 42000: Too big precision 66 specified for '1'. Maximum is 65.
|
||||||
SELECT CAST(1 AS decimal(65,30));
|
SELECT CAST(1 AS decimal(65,30));
|
||||||
CAST(1 AS decimal(65,30))
|
CAST(1 AS decimal(65,30))
|
||||||
1.000000000000000000000000000000
|
1.000000000000000000000000000000
|
||||||
SELECT CAST(1 AS decimal(65,31));
|
SELECT CAST(1 AS decimal(65,31));
|
||||||
ERROR 42000: Too big scale 31 specified for column '1'. Maximum is 30.
|
ERROR 42000: Too big scale 31 specified for '1'. Maximum is 30.
|
||||||
CREATE TABLE t1 (a int DEFAULT NULL, b int DEFAULT NULL);
|
CREATE TABLE t1 (a int DEFAULT NULL, b int DEFAULT NULL);
|
||||||
INSERT INTO t1 VALUES (3,30), (1,10), (2,10);
|
INSERT INTO t1 VALUES (3,30), (1,10), (2,10);
|
||||||
SELECT a+CAST(1 AS decimal(65,30)) AS aa, SUM(b) FROM t1 GROUP BY aa;
|
SELECT a+CAST(1 AS decimal(65,30)) AS aa, SUM(b) FROM t1 GROUP BY aa;
|
||||||
@ -1499,7 +1499,7 @@ aa SUM(b)
|
|||||||
3.000000000000000000000000000000 10
|
3.000000000000000000000000000000 10
|
||||||
4.000000000000000000000000000000 30
|
4.000000000000000000000000000000 30
|
||||||
SELECT a+CAST(1 AS decimal(65,31)) AS aa, SUM(b) FROM t1 GROUP BY aa;
|
SELECT a+CAST(1 AS decimal(65,31)) AS aa, SUM(b) FROM t1 GROUP BY aa;
|
||||||
ERROR 42000: Too big scale 31 specified for column '1'. Maximum is 30.
|
ERROR 42000: Too big scale 31 specified for '1'. Maximum is 30.
|
||||||
DROP TABLE t1;
|
DROP TABLE t1;
|
||||||
CREATE TABLE t1 (a int DEFAULT NULL, b int DEFAULT NULL);
|
CREATE TABLE t1 (a int DEFAULT NULL, b int DEFAULT NULL);
|
||||||
INSERT INTO t1 VALUES (3,30), (1,10), (2,10);
|
INSERT INTO t1 VALUES (3,30), (1,10), (2,10);
|
||||||
|
@ -167,3 +167,9 @@ f1 f2
|
|||||||
00:20:01 a
|
00:20:01 a
|
||||||
00:20:03 b
|
00:20:03 b
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
create table t1(f1 time);
|
||||||
|
insert into t1 values ('23:38:57');
|
||||||
|
select f1, f1 = '2010-10-11 23:38:57' from t1;
|
||||||
|
f1 f1 = '2010-10-11 23:38:57'
|
||||||
|
23:38:57 0
|
||||||
|
drop table t1;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
drop table if exists t1, t2, t3;
|
drop table if exists t1, t2, t3;
|
||||||
create table t1 (a time(7));
|
create table t1 (a time(7));
|
||||||
ERROR 42000: Too big precision 7 specified for column 'a'. Maximum is 6.
|
ERROR 42000: Too big precision 7 specified for 'a'. Maximum is 6.
|
||||||
create table t1 (a time(3), key(a));
|
create table t1 (a time(3), key(a));
|
||||||
insert t1 values ('2010-12-11 00:20:03.1234');
|
insert t1 values ('2010-12-11 00:20:03.1234');
|
||||||
Warnings:
|
Warnings:
|
||||||
@ -163,5 +163,24 @@ t2 CREATE TABLE `t2` (
|
|||||||
`a` time(6) DEFAULT NULL,
|
`a` time(6) DEFAULT NULL,
|
||||||
`b` time(6) DEFAULT NULL
|
`b` time(6) DEFAULT NULL
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
select * from t2;
|
||||||
|
a b
|
||||||
|
03:04:06.234500 03:04:06.234561
|
||||||
|
04:05:06.000000 04:05:06.789100
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
create table t1 (a time(4) not null);
|
||||||
|
insert into t1 values ('-00:00:00.6'),('-00:00:00.7'),('-00:00:00.8'),('-00:00:00.9'),('-00:00:01.0'),('-00:00:01.1'),('-00:00:01.000000'),('-00:00:01.100001'),('-00:00:01.000002'),('-00:00:01.090000');
|
||||||
|
select * from t1;
|
||||||
|
a
|
||||||
|
-00:00:00.6000
|
||||||
|
-00:00:00.7000
|
||||||
|
-00:00:00.8000
|
||||||
|
-00:00:00.9000
|
||||||
|
-00:00:01.0000
|
||||||
|
-00:00:01.1000
|
||||||
|
-00:00:01.0000
|
||||||
|
-00:00:01.1000
|
||||||
|
-00:00:01.0000
|
||||||
|
-00:00:01.0900
|
||||||
|
drop table t1;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
drop table if exists t1, t2, t3;
|
drop table if exists t1, t2, t3;
|
||||||
create table t1 (a timestamp(7));
|
create table t1 (a timestamp(7));
|
||||||
ERROR 42000: Too big precision 7 specified for column 'a'. Maximum is 6.
|
ERROR 42000: Too big precision 7 specified for 'a'. Maximum is 6.
|
||||||
create table t1 (a timestamp(3), key(a));
|
create table t1 (a timestamp(3), key(a));
|
||||||
insert t1 values ('2010-12-11 00:20:03.1234');
|
insert t1 values ('2010-12-11 00:20:03.1234');
|
||||||
insert t1 values ('2010-12-11 15:47:11.1234');
|
insert t1 values ('2010-12-11 15:47:11.1234');
|
||||||
@ -147,6 +147,10 @@ t2 CREATE TABLE `t2` (
|
|||||||
`a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
|
`a` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000',
|
||||||
`b` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
|
`b` timestamp(6) NOT NULL DEFAULT '0000-00-00 00:00:00.000000'
|
||||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||||
|
select * from t2;
|
||||||
|
a b
|
||||||
|
2010-02-03 04:05:06.000000 2010-02-03 04:05:06.789100
|
||||||
|
2011-01-02 03:04:06.234500 2011-01-02 03:04:06.234561
|
||||||
drop view v1;
|
drop view v1;
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
set timestamp=unix_timestamp('2011-01-01 01:01:01') + 0.123456, time_zone='+03:00';
|
set timestamp=unix_timestamp('2011-01-01 01:01:01') + 0.123456, time_zone='+03:00';
|
||||||
|
@ -15,6 +15,7 @@ select now()-now(),weekday(curdate())-weekday(now()),unix_timestamp()-unix_times
|
|||||||
select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0;
|
select from_unixtime(unix_timestamp("1994-03-02 10:11:12")),from_unixtime(unix_timestamp("1994-03-02 10:11:12"),"%Y-%m-%d %h:%i:%s"),from_unixtime(unix_timestamp("1994-03-02 10:11:12"))+0;
|
||||||
select sec_to_time(9001),sec_to_time(9001)+0,time_to_sec("15:12:22"),
|
select sec_to_time(9001),sec_to_time(9001)+0,time_to_sec("15:12:22"),
|
||||||
sec_to_time(time_to_sec("0:30:47")/6.21);
|
sec_to_time(time_to_sec("0:30:47")/6.21);
|
||||||
|
select sec_to_time(9001.1), time_to_sec('15:12:22.123456'), time_to_sec(15.5566778899);
|
||||||
select sec_to_time(time_to_sec('-838:59:59'));
|
select sec_to_time(time_to_sec('-838:59:59'));
|
||||||
select now()-curdate()*1000000-curtime();
|
select now()-curdate()*1000000-curtime();
|
||||||
select strcmp(current_timestamp(),concat(current_date()," ",current_time()));
|
select strcmp(current_timestamp(),concat(current_date()," ",current_time()));
|
||||||
@ -926,7 +927,7 @@ select convert_tz(timediff('0000-00-00 00:00:00', cast('2008-03-26 07:09:06' as
|
|||||||
# lp:736370 Datetime functions in subquery context cause wrong result and bogus warnings in mysql-5.1-micr
|
# lp:736370 Datetime functions in subquery context cause wrong result and bogus warnings in mysql-5.1-micr
|
||||||
#
|
#
|
||||||
create table t1 (f1 integer, f2 date);
|
create table t1 (f1 integer, f2 date);
|
||||||
insert into t1 values (1,'2011-05-05'),(2,'2011-05-05'),(3,'2011-05-05'),(4,'2011-05-05'),(5,'2011-05-05');
|
insert into t1 values (1,'2011-05-05'),(2,'2011-05-05'),(3,'2011-05-05'),(4,'2011-05-05'),(5,'2011-05-05'),(6, '2011-05-06');
|
||||||
select * from t1 where 1 and concat(f2)=MAKEDATE(2011, 125);
|
select * from t1 where 1 and concat(f2)=MAKEDATE(2011, 125);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
@ -9,9 +9,9 @@ select now(), curtime(0), utc_timestamp(1), utc_time(2), current_time(3),
|
|||||||
select sec_to_time(time_to_sec('1:2:3')), sec_to_time(time_to_sec('2:3:4.567890'));
|
select sec_to_time(time_to_sec('1:2:3')), sec_to_time(time_to_sec('2:3:4.567890'));
|
||||||
select time_to_sec(sec_to_time(11111)), time_to_sec(sec_to_time(11111.22222));
|
select time_to_sec(sec_to_time(11111)), time_to_sec(sec_to_time(11111.22222));
|
||||||
--horizontal_results
|
--horizontal_results
|
||||||
--error ER_WRONG_ARGUMENTS
|
--error ER_TOO_BIG_PRECISION
|
||||||
select current_timestamp(7);
|
select current_timestamp(7);
|
||||||
--error ER_WRONG_ARGUMENTS
|
--error ER_TOO_BIG_PRECISION
|
||||||
select curtime(7);
|
select curtime(7);
|
||||||
|
|
||||||
--disable_warnings
|
--disable_warnings
|
||||||
@ -85,12 +85,12 @@ drop table t1;
|
|||||||
create table t1 (f1 timestamp(6));
|
create table t1 (f1 timestamp(6));
|
||||||
insert into t1 values ('2002-07-15 21:00:00');
|
insert into t1 values ('2002-07-15 21:00:00');
|
||||||
select time(f1) from t1;
|
select time(f1) from t1;
|
||||||
select time(f1) from t1 union all select time(f1) from t1;
|
select time(f1) from t1 union all select time(f1 + interval 1 second) from t1;
|
||||||
alter table t1 modify f1 timestamp;
|
alter table t1 modify f1 timestamp;
|
||||||
select time(f1) from t1;
|
select time(f1) from t1;
|
||||||
select time(f1) from t1 union all select time(f1) from t1;
|
select time(f1) from t1 union all select time(f1 + interval 1 second) from t1;
|
||||||
# but the effect cannot be eliminated completely:
|
# but the effect cannot be eliminated completely:
|
||||||
alter table t1 modify f1 varchar(100);
|
alter table t1 modify f1 varchar(100);
|
||||||
select time(f1) from t1;
|
select time(f1) from t1;
|
||||||
select time(f1) from t1 union all select time(f1) from t1;
|
select time(f1) from t1 union all select time(f1 + interval 1 second) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
@ -3514,6 +3514,7 @@ select str_to_date('2007-10-09','%Y-%m-%d') between '2007/10/01 00:00:00 GMT'
|
|||||||
and '2007/10/20 00:00:00 GMT';
|
and '2007/10/20 00:00:00 GMT';
|
||||||
select str_to_date('2007-10-09','%Y-%m-%d') > '2007/10/01 00:00:00 GMT-6';
|
select str_to_date('2007-10-09','%Y-%m-%d') > '2007/10/01 00:00:00 GMT-6';
|
||||||
select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/20 00:00:00 GMT-6';
|
select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/20 00:00:00 GMT-6';
|
||||||
|
select str_to_date('2007-10-09','%Y-%m-%d') <= '2007/10/2000:00:00 GMT-6';
|
||||||
|
|
||||||
# We have all we need -- and trailing garbage:
|
# We have all we need -- and trailing garbage:
|
||||||
# (leaving out a leading zero in first example to prove it's a
|
# (leaving out a leading zero in first example to prove it's a
|
||||||
@ -3562,10 +3563,12 @@ select str_to_date('1','%Y-%m-%d') = '1';
|
|||||||
select str_to_date('1','%Y-%m-%d') = '1';
|
select str_to_date('1','%Y-%m-%d') = '1';
|
||||||
select str_to_date('','%Y-%m-%d') = '';
|
select str_to_date('','%Y-%m-%d') = '';
|
||||||
|
|
||||||
# these three should work!
|
select str_to_date('2000-01-01','%Y-%m-%d') between '1000-01-01' and '2001-01-01';
|
||||||
select str_to_date('1000-01-01','%Y-%m-%d') between '0000-00-00' and NULL;
|
select str_to_date('2000-01-01','%Y-%m-%d') between '1000-01-01' and NULL;
|
||||||
select str_to_date('1000-01-01','%Y-%m-%d') between NULL and '2000-00-00';
|
select str_to_date('2000-01-01','%Y-%m-%d') between NULL and '2001-01-01';
|
||||||
select str_to_date('1000-01-01','%Y-%m-%d') between NULL and NULL;
|
select str_to_date('2000-01-01','%Y-%m-%d') between '2001-01-01' and NULL;
|
||||||
|
select str_to_date('2000-01-01','%Y-%m-%d') between NULL and '1000-01-01';
|
||||||
|
select str_to_date('2000-01-01','%Y-%m-%d') between NULL and NULL;
|
||||||
|
|
||||||
#
|
#
|
||||||
# Bug #30666: Incorrect order when using range conditions on 2 tables or more
|
# Bug #30666: Incorrect order when using range conditions on 2 tables or more
|
||||||
|
@ -61,3 +61,71 @@ select table_name,partition_name,partition_method,partition_expression,partition
|
|||||||
|
|
||||||
drop table t1, t2;
|
drop table t1, t2;
|
||||||
|
|
||||||
|
#
|
||||||
|
# insert ... select with conversion
|
||||||
|
#
|
||||||
|
create table t1 (
|
||||||
|
q_date date,
|
||||||
|
q_time time,
|
||||||
|
q_time5 time(5),
|
||||||
|
q_datetime datetime,
|
||||||
|
q_datetime1 datetime(1),
|
||||||
|
q_datetime3 datetime(3),
|
||||||
|
q_datetime5 datetime(5),
|
||||||
|
q_timestamp timestamp,
|
||||||
|
q_timestamp2 timestamp(2),
|
||||||
|
q_timestamp4 timestamp(4),
|
||||||
|
q_timestamp6 timestamp(6),
|
||||||
|
q_varchar50 varchar(50),
|
||||||
|
q_varchar60 varchar(60),
|
||||||
|
q_varchar70 varchar(70),
|
||||||
|
q_varchar80 varchar(80));
|
||||||
|
|
||||||
|
create table t2 (
|
||||||
|
date_datetime datetime,
|
||||||
|
time_datetime datetime,
|
||||||
|
time5_varchar100 varchar(100),
|
||||||
|
datetime_time time,
|
||||||
|
datetime1_date date,
|
||||||
|
datetime3_timestamp timestamp,
|
||||||
|
datetime5_varchar100 varchar(100),
|
||||||
|
timestamp_datetime datetime,
|
||||||
|
timestamp2_date date,
|
||||||
|
timestamp4_time time,
|
||||||
|
timestamp6_varchar100 varchar(100),
|
||||||
|
varchar50_date date,
|
||||||
|
varchar60_datetime datetime,
|
||||||
|
varchar70_time time,
|
||||||
|
varchar80_timestamp timestamp);
|
||||||
|
|
||||||
|
insert t1 values ('2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432',
|
||||||
|
'2010-11-12 11:14:17.765432', '2010-11-12 11:14:17.765432');
|
||||||
|
--query_vertical select * from t1;
|
||||||
|
insert t2 select * from t1;
|
||||||
|
--query_vertical select * from t2;
|
||||||
|
alter table t1
|
||||||
|
change q_date date_datetime datetime,
|
||||||
|
change q_time time_datetime datetime,
|
||||||
|
change q_time5 time5_varchar100 varchar(100),
|
||||||
|
change q_datetime datetime_time time,
|
||||||
|
change q_datetime1 datetime1_date date,
|
||||||
|
change q_datetime3 datetime3_timestamp timestamp,
|
||||||
|
change q_datetime5 datetime5_varchar100 varchar(100),
|
||||||
|
change q_timestamp timestamp_datetime datetime,
|
||||||
|
change q_timestamp2 timestamp2_date date,
|
||||||
|
change q_timestamp4 timestamp4_time time,
|
||||||
|
change q_timestamp6 timestamp6_varchar100 varchar(100),
|
||||||
|
change q_varchar50 varchar50_date date,
|
||||||
|
change q_varchar60 varchar60_datetime datetime,
|
||||||
|
change q_varchar70 varchar70_time time,
|
||||||
|
change q_varchar80 varchar80_timestamp timestamp;
|
||||||
|
--query_vertical select * from t1;
|
||||||
|
|
||||||
|
drop table t1, t2;
|
||||||
|
|
||||||
|
@ -115,3 +115,11 @@ select * from t1 force key (f1) where f1 < curdate();
|
|||||||
select * from t1 ignore key (f1) where f1 < curdate();
|
select * from t1 ignore key (f1) where f1 < curdate();
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# comparison of time and datetime:
|
||||||
|
#
|
||||||
|
create table t1(f1 time);
|
||||||
|
insert into t1 values ('23:38:57');
|
||||||
|
select f1, f1 = '2010-10-11 23:38:57' from t1;
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
@ -2,3 +2,7 @@
|
|||||||
let type=time;
|
let type=time;
|
||||||
--source include/type_hrtime.inc
|
--source include/type_hrtime.inc
|
||||||
|
|
||||||
|
create table t1 (a time(4) not null);
|
||||||
|
insert into t1 values ('-00:00:00.6'),('-00:00:00.7'),('-00:00:00.8'),('-00:00:00.9'),('-00:00:01.0'),('-00:00:01.1'),('-00:00:01.000000'),('-00:00:01.100001'),('-00:00:01.000002'),('-00:00:01.090000');
|
||||||
|
select * from t1;
|
||||||
|
drop table t1;
|
||||||
|
@ -695,7 +695,7 @@ fractional:
|
|||||||
int check_time_range(struct st_mysql_time *my_time, uint dec, int *warning)
|
int check_time_range(struct st_mysql_time *my_time, uint dec, int *warning)
|
||||||
{
|
{
|
||||||
longlong hour;
|
longlong hour;
|
||||||
static ulong max_sec_part[MAX_SEC_PART_DIGITS+1]= {000000, 900000, 990000,
|
static ulong max_sec_part[TIME_SECOND_PART_DIGITS+1]= {000000, 900000, 990000,
|
||||||
999000, 999900, 999990, 999999};
|
999000, 999900, 999990, 999999};
|
||||||
|
|
||||||
if (my_time->minute >= 60 || my_time->second >= 60)
|
if (my_time->minute >= 60 || my_time->second >= 60)
|
||||||
@ -704,7 +704,7 @@ int check_time_range(struct st_mysql_time *my_time, uint dec, int *warning)
|
|||||||
hour= my_time->hour + (24*my_time->day);
|
hour= my_time->hour + (24*my_time->day);
|
||||||
|
|
||||||
if (dec == AUTO_SEC_PART_DIGITS)
|
if (dec == AUTO_SEC_PART_DIGITS)
|
||||||
dec= MAX_SEC_PART_DIGITS;
|
dec= TIME_SECOND_PART_DIGITS;
|
||||||
|
|
||||||
if (hour <= TIME_MAX_HOUR &&
|
if (hour <= TIME_MAX_HOUR &&
|
||||||
(hour != TIME_MAX_HOUR || my_time->minute != TIME_MAX_MINUTE ||
|
(hour != TIME_MAX_HOUR || my_time->minute != TIME_MAX_MINUTE ||
|
||||||
@ -1042,9 +1042,9 @@ int my_time_to_str(const MYSQL_TIME *l_time, char *to, int digits)
|
|||||||
ulong day= (l_time->year || l_time->month) ? 0 : l_time->day;
|
ulong day= (l_time->year || l_time->month) ? 0 : l_time->day;
|
||||||
|
|
||||||
if (digits == AUTO_SEC_PART_DIGITS)
|
if (digits == AUTO_SEC_PART_DIGITS)
|
||||||
digits= l_time->second_part ? MAX_SEC_PART_DIGITS : 0;
|
digits= l_time->second_part ? TIME_SECOND_PART_DIGITS : 0;
|
||||||
|
|
||||||
DBUG_ASSERT(digits >= 0 && digits <= MAX_SEC_PART_DIGITS);
|
DBUG_ASSERT(digits >= 0 && digits <= TIME_SECOND_PART_DIGITS);
|
||||||
|
|
||||||
return sprintf(to,
|
return sprintf(to,
|
||||||
digits ? "%s%02lu:%02u:%02u.%0*lu"
|
digits ? "%s%02lu:%02u:%02u.%0*lu"
|
||||||
@ -1063,9 +1063,9 @@ int my_date_to_str(const MYSQL_TIME *l_time, char *to)
|
|||||||
int my_datetime_to_str(const MYSQL_TIME *l_time, char *to, int digits)
|
int my_datetime_to_str(const MYSQL_TIME *l_time, char *to, int digits)
|
||||||
{
|
{
|
||||||
if (digits == AUTO_SEC_PART_DIGITS)
|
if (digits == AUTO_SEC_PART_DIGITS)
|
||||||
digits= l_time->second_part ? MAX_SEC_PART_DIGITS : 0;
|
digits= l_time->second_part ? TIME_SECOND_PART_DIGITS : 0;
|
||||||
|
|
||||||
DBUG_ASSERT(digits >= 0 && digits <= MAX_SEC_PART_DIGITS);
|
DBUG_ASSERT(digits >= 0 && digits <= TIME_SECOND_PART_DIGITS);
|
||||||
|
|
||||||
return sprintf(to,
|
return sprintf(to,
|
||||||
digits ? "%04u-%02u-%02u %02u:%02u:%02u.%0*lu"
|
digits ? "%04u-%02u-%02u %02u:%02u:%02u.%0*lu"
|
||||||
|
11
sql/field.cc
11
sql/field.cc
@ -5056,7 +5056,7 @@ static uint sec_part_bytes[MAX_DATETIME_PRECISION+1]= { 0, 1, 1, 2, 2, 3, 3 };
|
|||||||
static uint datetime_hires_bytes[MAX_DATETIME_PRECISION+1]=
|
static uint datetime_hires_bytes[MAX_DATETIME_PRECISION+1]=
|
||||||
{ 5, 6, 6, 7, 7, 7, 8 };
|
{ 5, 6, 6, 7, 7, 7, 8 };
|
||||||
static uint time_hires_bytes[MAX_DATETIME_PRECISION+1]=
|
static uint time_hires_bytes[MAX_DATETIME_PRECISION+1]=
|
||||||
{ 3, 4, 4, 4, 5, 5, 6 };
|
{ 3, 4, 4, 5, 5, 5, 6 };
|
||||||
|
|
||||||
void Field_timestamp_hires::store_TIME(my_time_t timestamp, ulong sec_part)
|
void Field_timestamp_hires::store_TIME(my_time_t timestamp, ulong sec_part)
|
||||||
{
|
{
|
||||||
@ -5520,7 +5520,14 @@ String *Field_time_hires::val_str(String *str,
|
|||||||
|
|
||||||
bool Field_time_hires::get_date(MYSQL_TIME *ltime, uint fuzzydate)
|
bool Field_time_hires::get_date(MYSQL_TIME *ltime, uint fuzzydate)
|
||||||
{
|
{
|
||||||
ulonglong packed= read_bigendian(ptr, Field_time_hires::pack_length());
|
uint32 len= pack_length();
|
||||||
|
longlong packed= read_bigendian(ptr, len);
|
||||||
|
|
||||||
|
/* sign extension */
|
||||||
|
longlong mask= 1LL << (len*8 - 1);
|
||||||
|
if (packed & mask)
|
||||||
|
packed|= ~(mask-1);
|
||||||
|
|
||||||
unpack_time(sec_part_unshift(packed, dec), ltime);
|
unpack_time(sec_part_unshift(packed, dec), ltime);
|
||||||
/*
|
/*
|
||||||
unpack_time() returns MYSQL_TIMESTAMP_DATETIME.
|
unpack_time() returns MYSQL_TIMESTAMP_DATETIME.
|
||||||
|
@ -1234,7 +1234,7 @@ public:
|
|||||||
dec(dec_arg)
|
dec(dec_arg)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(dec);
|
DBUG_ASSERT(dec);
|
||||||
DBUG_ASSERT(dec <= MAX_SEC_PART_DIGITS);
|
DBUG_ASSERT(dec <= TIME_SECOND_PART_DIGITS);
|
||||||
}
|
}
|
||||||
void sql_type(String &str) const;
|
void sql_type(String &str) const;
|
||||||
long get_timestamp(ulong *sec_part) const;
|
long get_timestamp(ulong *sec_part) const;
|
||||||
@ -1407,7 +1407,7 @@ public:
|
|||||||
dec(dec_arg)
|
dec(dec_arg)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(dec);
|
DBUG_ASSERT(dec);
|
||||||
DBUG_ASSERT(dec <= MAX_SEC_PART_DIGITS);
|
DBUG_ASSERT(dec <= TIME_SECOND_PART_DIGITS);
|
||||||
}
|
}
|
||||||
enum ha_base_keytype key_type() const { return HA_KEYTYPE_BINARY; }
|
enum ha_base_keytype key_type() const { return HA_KEYTYPE_BINARY; }
|
||||||
uint decimals() const { return dec; }
|
uint decimals() const { return dec; }
|
||||||
@ -1476,7 +1476,7 @@ public:
|
|||||||
field_name_arg, cs), dec(dec_arg)
|
field_name_arg, cs), dec(dec_arg)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(dec);
|
DBUG_ASSERT(dec);
|
||||||
DBUG_ASSERT(dec <= MAX_SEC_PART_DIGITS);
|
DBUG_ASSERT(dec <= TIME_SECOND_PART_DIGITS);
|
||||||
}
|
}
|
||||||
enum ha_base_keytype key_type() const { return HA_KEYTYPE_BINARY; }
|
enum ha_base_keytype key_type() const { return HA_KEYTYPE_BINARY; }
|
||||||
int store_decimal(const my_decimal *d);
|
int store_decimal(const my_decimal *d);
|
||||||
|
@ -2748,13 +2748,13 @@ void Item_param::set_time(MYSQL_TIME *tm, timestamp_type time_type,
|
|||||||
value.time= *tm;
|
value.time= *tm;
|
||||||
value.time.time_type= time_type;
|
value.time.time_type= time_type;
|
||||||
|
|
||||||
decimals= value.time.second_part > 0 ? MAX_SEC_PART_DIGITS : 0;
|
decimals= value.time.second_part > 0 ? TIME_SECOND_PART_DIGITS : 0;
|
||||||
|
|
||||||
if (value.time.year > 9999 || value.time.month > 12 ||
|
if (value.time.year > 9999 || value.time.month > 12 ||
|
||||||
value.time.day > 31 ||
|
value.time.day > 31 ||
|
||||||
(time_type != MYSQL_TIMESTAMP_TIME && value.time.hour > 23) ||
|
(time_type != MYSQL_TIMESTAMP_TIME && value.time.hour > 23) ||
|
||||||
value.time.minute > 59 || value.time.second > 59 ||
|
value.time.minute > 59 || value.time.second > 59 ||
|
||||||
value.time.second_part > MAX_SEC_PART_VALUE)
|
value.time.second_part > TIME_MAX_SECOND_PART)
|
||||||
{
|
{
|
||||||
Lazy_string_time str(&value.time);
|
Lazy_string_time str(&value.time);
|
||||||
make_truncated_value_warning(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
make_truncated_value_warning(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
|
@ -629,12 +629,14 @@ int Arg_comparator::set_compare_func(Item_result_field *item, Item_result type)
|
|||||||
@param[in] warn_name Field name for issuing the warning
|
@param[in] warn_name Field name for issuing the warning
|
||||||
@param[out] l_time The MYSQL_TIME objects is initialized.
|
@param[out] l_time The MYSQL_TIME objects is initialized.
|
||||||
|
|
||||||
Parses a date provided in the string str into a MYSQL_TIME object. If the
|
Parses a date provided in the string str into a MYSQL_TIME object.
|
||||||
string contains an incorrect date or doesn't correspond to a date at all
|
The date is used for comparison, that is fuzzy dates are allowed
|
||||||
then a warning is issued. The warn_type and the warn_name arguments are used
|
independently of sql_mode.
|
||||||
as the name and the type of the field when issuing the warning. If any input
|
If the string contains an incorrect date or doesn't correspond to a date at
|
||||||
was discarded (trailing or non-timestamp-y characters), return value will be
|
all then a warning is issued. The warn_type and the warn_name arguments are
|
||||||
TRUE.
|
used as the name and the type of the field when issuing the warning. If any
|
||||||
|
input was discarded (trailing or non-timestamp-y characters), return value
|
||||||
|
will be TRUE.
|
||||||
|
|
||||||
@return Status flag
|
@return Status flag
|
||||||
@retval FALSE Success.
|
@retval FALSE Success.
|
||||||
@ -649,8 +651,6 @@ bool get_mysql_time_from_str(THD *thd, String *str, timestamp_type warn_type,
|
|||||||
enum_mysql_timestamp_type timestamp_type;
|
enum_mysql_timestamp_type timestamp_type;
|
||||||
int flags= TIME_FUZZY_DATE | MODE_INVALID_DATES;
|
int flags= TIME_FUZZY_DATE | MODE_INVALID_DATES;
|
||||||
|
|
||||||
flags|= thd->variables.sql_mode & (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE);
|
|
||||||
|
|
||||||
if (warn_type == MYSQL_TIMESTAMP_TIME)
|
if (warn_type == MYSQL_TIMESTAMP_TIME)
|
||||||
flags|= TIME_TIME_ONLY;
|
flags|= TIME_TIME_ONLY;
|
||||||
|
|
||||||
|
@ -1479,9 +1479,10 @@ bool Item_func_curdate::get_date(MYSQL_TIME *res,
|
|||||||
|
|
||||||
bool Item_func_curtime::fix_fields(THD *thd, Item **items)
|
bool Item_func_curtime::fix_fields(THD *thd, Item **items)
|
||||||
{
|
{
|
||||||
if (decimals > MAX_SEC_PART_DIGITS)
|
if (decimals > TIME_SECOND_PART_DIGITS)
|
||||||
{
|
{
|
||||||
my_error(ER_WRONG_ARGUMENTS, MYF(0), func_name());
|
my_error(ER_TOO_BIG_PRECISION, MYF(0), decimals, func_name(),
|
||||||
|
TIME_SECOND_PART_DIGITS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return Item_timefunc::fix_fields(thd, items);
|
return Item_timefunc::fix_fields(thd, items);
|
||||||
@ -1492,7 +1493,7 @@ void Item_func_curtime::fix_length_and_dec()
|
|||||||
collation.set(&my_charset_bin);
|
collation.set(&my_charset_bin);
|
||||||
store_now_in_TIME(<ime);
|
store_now_in_TIME(<ime);
|
||||||
max_length= MAX_TIME_WIDTH +
|
max_length= MAX_TIME_WIDTH +
|
||||||
(decimals ? min(decimals, MAX_SEC_PART_DIGITS)+1 : 0);
|
(decimals ? min(decimals, TIME_SECOND_PART_DIGITS)+1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Item_func_curtime::get_date(MYSQL_TIME *res,
|
bool Item_func_curtime::get_date(MYSQL_TIME *res,
|
||||||
@ -1505,11 +1506,11 @@ bool Item_func_curtime::get_date(MYSQL_TIME *res,
|
|||||||
static void set_sec_part(ulong sec_part, MYSQL_TIME *ltime, Item *item)
|
static void set_sec_part(ulong sec_part, MYSQL_TIME *ltime, Item *item)
|
||||||
{
|
{
|
||||||
DBUG_ASSERT(item->decimals == AUTO_SEC_PART_DIGITS ||
|
DBUG_ASSERT(item->decimals == AUTO_SEC_PART_DIGITS ||
|
||||||
item->decimals <= MAX_SEC_PART_DIGITS);
|
item->decimals <= TIME_SECOND_PART_DIGITS);
|
||||||
if (item->decimals)
|
if (item->decimals)
|
||||||
{
|
{
|
||||||
ltime->second_part= sec_part;
|
ltime->second_part= sec_part;
|
||||||
if (item->decimals < MAX_SEC_PART_DIGITS)
|
if (item->decimals < TIME_SECOND_PART_DIGITS)
|
||||||
ltime->second_part= sec_part_truncate(ltime->second_part, item->decimals);
|
ltime->second_part= sec_part_truncate(ltime->second_part, item->decimals);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1548,9 +1549,10 @@ void Item_func_curtime_utc::store_now_in_TIME(MYSQL_TIME *now_time)
|
|||||||
|
|
||||||
bool Item_func_now::fix_fields(THD *thd, Item **items)
|
bool Item_func_now::fix_fields(THD *thd, Item **items)
|
||||||
{
|
{
|
||||||
if (decimals > MAX_SEC_PART_DIGITS)
|
if (decimals > TIME_SECOND_PART_DIGITS)
|
||||||
{
|
{
|
||||||
my_error(ER_WRONG_ARGUMENTS, MYF(0), func_name());
|
my_error(ER_TOO_BIG_PRECISION, MYF(0), decimals, func_name(),
|
||||||
|
TIME_SECOND_PART_DIGITS);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return Item_temporal_func::fix_fields(thd, items);
|
return Item_temporal_func::fix_fields(thd, items);
|
||||||
@ -1561,7 +1563,7 @@ void Item_func_now::fix_length_and_dec()
|
|||||||
collation.set(&my_charset_bin);
|
collation.set(&my_charset_bin);
|
||||||
store_now_in_TIME(<ime);
|
store_now_in_TIME(<ime);
|
||||||
max_length= MAX_DATETIME_WIDTH +
|
max_length= MAX_DATETIME_WIDTH +
|
||||||
(decimals ? min(decimals, MAX_SEC_PART_DIGITS)+1 : 0);
|
(decimals ? min(decimals, TIME_SECOND_PART_DIGITS)+1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -1848,7 +1850,7 @@ void Item_func_convert_tz::fix_length_and_dec()
|
|||||||
max_length= MAX_DATETIME_WIDTH;
|
max_length= MAX_DATETIME_WIDTH;
|
||||||
decimals= args[0]->decimals;
|
decimals= args[0]->decimals;
|
||||||
if (decimals && decimals != NOT_FIXED_DEC)
|
if (decimals && decimals != NOT_FIXED_DEC)
|
||||||
max_length+= min(decimals, MAX_SEC_PART_DIGITS) + 1;
|
max_length+= min(decimals, TIME_SECOND_PART_DIGITS) + 1;
|
||||||
maybe_null= 1;
|
maybe_null= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1949,7 +1951,7 @@ void Item_date_add_interval::fix_length_and_dec()
|
|||||||
else
|
else
|
||||||
decimals= args[0]->decimals;
|
decimals= args[0]->decimals;
|
||||||
if (decimals)
|
if (decimals)
|
||||||
max_length+= min(decimals, MAX_SEC_PART_DIGITS) + 1;
|
max_length+= min(decimals, TIME_SECOND_PART_DIGITS) + 1;
|
||||||
value.alloc(max_length);
|
value.alloc(max_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2402,7 +2404,7 @@ void Item_func_add_time::fix_length_and_dec()
|
|||||||
else if (arg0_field_type == MYSQL_TYPE_TIME)
|
else if (arg0_field_type == MYSQL_TYPE_TIME)
|
||||||
cached_field_type= MYSQL_TYPE_TIME;
|
cached_field_type= MYSQL_TYPE_TIME;
|
||||||
if (decimals)
|
if (decimals)
|
||||||
max_length+= min(decimals, MAX_SEC_PART_DIGITS) + 1;
|
max_length+= min(decimals, TIME_SECOND_PART_DIGITS) + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -2467,7 +2469,7 @@ bool Item_func_add_time::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
|
|||||||
|
|
||||||
if (cached_field_type == MYSQL_TYPE_STRING &&
|
if (cached_field_type == MYSQL_TYPE_STRING &&
|
||||||
(l_time1.second_part || l_time2.second_part))
|
(l_time1.second_part || l_time2.second_part))
|
||||||
dec= MAX_SEC_PART_DIGITS;
|
dec= TIME_SECOND_PART_DIGITS;
|
||||||
|
|
||||||
if (!is_time)
|
if (!is_time)
|
||||||
{
|
{
|
||||||
@ -2931,7 +2933,7 @@ void Item_func_str_to_date::fix_length_and_dec()
|
|||||||
{
|
{
|
||||||
maybe_null= 1;
|
maybe_null= 1;
|
||||||
cached_field_type= MYSQL_TYPE_DATETIME;
|
cached_field_type= MYSQL_TYPE_DATETIME;
|
||||||
max_length= MAX_DATETIME_WIDTH+MAX_SEC_PART_DIGITS;
|
max_length= MAX_DATETIME_WIDTH + TIME_SECOND_PART_DIGITS;
|
||||||
cached_timestamp_type= MYSQL_TIMESTAMP_DATETIME;
|
cached_timestamp_type= MYSQL_TIMESTAMP_DATETIME;
|
||||||
decimals= AUTO_SEC_PART_DIGITS;
|
decimals= AUTO_SEC_PART_DIGITS;
|
||||||
if ((const_item= args[1]->const_item()))
|
if ((const_item= args[1]->const_item()))
|
||||||
|
@ -332,7 +332,9 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
maybe_null= TRUE;
|
maybe_null= TRUE;
|
||||||
decimals=args[0]->decimals;
|
decimals= args[0]->decimals;
|
||||||
|
if (decimals != NOT_FIXED_DEC)
|
||||||
|
set_if_smaller(decimals, TIME_SECOND_PART_DIGITS);
|
||||||
max_length=17;
|
max_length=17;
|
||||||
}
|
}
|
||||||
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
bool check_partition_func_processor(uchar *int_arg) {return FALSE;}
|
||||||
@ -389,7 +391,7 @@ public:
|
|||||||
void fix_length_and_dec()
|
void fix_length_and_dec()
|
||||||
{
|
{
|
||||||
max_length= MAX_TIME_WIDTH +
|
max_length= MAX_TIME_WIDTH +
|
||||||
(decimals ? min(decimals, MAX_SEC_PART_DIGITS)+1 : 0);
|
(decimals ? min(decimals, TIME_SECOND_PART_DIGITS)+1 : 0);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -597,8 +599,8 @@ public:
|
|||||||
collation.set(&my_charset_bin);
|
collation.set(&my_charset_bin);
|
||||||
maybe_null=1;
|
maybe_null=1;
|
||||||
decimals= args[0]->decimals;
|
decimals= args[0]->decimals;
|
||||||
if (decimals != NOT_FIXED_DEC && decimals > MAX_SEC_PART_DIGITS)
|
if (decimals != NOT_FIXED_DEC)
|
||||||
decimals= MAX_SEC_PART_DIGITS;
|
set_if_smaller(decimals, TIME_SECOND_PART_DIGITS);
|
||||||
Item_timefunc::fix_length_and_dec();
|
Item_timefunc::fix_length_and_dec();
|
||||||
}
|
}
|
||||||
const char *func_name() const { return "sec_to_time"; }
|
const char *func_name() const { return "sec_to_time"; }
|
||||||
@ -700,9 +702,13 @@ public:
|
|||||||
maybe_null= 1;
|
maybe_null= 1;
|
||||||
max_length= MIN_TIME_WIDTH;
|
max_length= MIN_TIME_WIDTH;
|
||||||
if (decimals == NOT_FIXED_DEC)
|
if (decimals == NOT_FIXED_DEC)
|
||||||
|
{
|
||||||
decimals= args[0]->decimals;
|
decimals= args[0]->decimals;
|
||||||
|
if (decimals != NOT_FIXED_DEC)
|
||||||
|
set_if_smaller(decimals, TIME_SECOND_PART_DIGITS);
|
||||||
|
}
|
||||||
if (decimals && decimals != NOT_FIXED_DEC)
|
if (decimals && decimals != NOT_FIXED_DEC)
|
||||||
max_length+= min(decimals, MAX_SEC_PART_DIGITS) + 1;
|
max_length+= min(decimals, TIME_SECOND_PART_DIGITS) + 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -722,7 +728,7 @@ public:
|
|||||||
maybe_null= 1;
|
maybe_null= 1;
|
||||||
max_length= MAX_DATETIME_WIDTH;
|
max_length= MAX_DATETIME_WIDTH;
|
||||||
if (decimals && decimals != NOT_FIXED_DEC)
|
if (decimals && decimals != NOT_FIXED_DEC)
|
||||||
max_length+= min(decimals, MAX_SEC_PART_DIGITS) + 1;
|
max_length+= min(decimals, TIME_SECOND_PART_DIGITS) + 1;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1200,7 +1200,7 @@ bool Protocol_binary::store(MYSQL_TIME *tm, int decimals)
|
|||||||
pos[5]= (uchar) tm->minute;
|
pos[5]= (uchar) tm->minute;
|
||||||
pos[6]= (uchar) tm->second;
|
pos[6]= (uchar) tm->second;
|
||||||
DBUG_ASSERT(decimals == AUTO_SEC_PART_DIGITS ||
|
DBUG_ASSERT(decimals == AUTO_SEC_PART_DIGITS ||
|
||||||
(decimals >= 0 && decimals <= MAX_SEC_PART_DIGITS));
|
(decimals >= 0 && decimals <= TIME_SECOND_PART_DIGITS));
|
||||||
if (decimals != AUTO_SEC_PART_DIGITS)
|
if (decimals != AUTO_SEC_PART_DIGITS)
|
||||||
tm->second_part= sec_part_truncate(tm->second_part, decimals);
|
tm->second_part= sec_part_truncate(tm->second_part, decimals);
|
||||||
int4store(pos+7, tm->second_part);
|
int4store(pos+7, tm->second_part);
|
||||||
@ -1242,7 +1242,7 @@ bool Protocol_binary::store_time(MYSQL_TIME *tm, int decimals)
|
|||||||
pos[6]= (uchar) tm->minute;
|
pos[6]= (uchar) tm->minute;
|
||||||
pos[7]= (uchar) tm->second;
|
pos[7]= (uchar) tm->second;
|
||||||
DBUG_ASSERT(decimals == AUTO_SEC_PART_DIGITS ||
|
DBUG_ASSERT(decimals == AUTO_SEC_PART_DIGITS ||
|
||||||
(decimals >= 0 && decimals <= MAX_SEC_PART_DIGITS));
|
(decimals >= 0 && decimals <= TIME_SECOND_PART_DIGITS));
|
||||||
if (decimals != AUTO_SEC_PART_DIGITS)
|
if (decimals != AUTO_SEC_PART_DIGITS)
|
||||||
tm->second_part= sec_part_truncate(tm->second_part, decimals);
|
tm->second_part= sec_part_truncate(tm->second_part, decimals);
|
||||||
int4store(pos+8, tm->second_part);
|
int4store(pos+8, tm->second_part);
|
||||||
|
@ -5513,11 +5513,11 @@ ER_SP_NO_RECURSION
|
|||||||
eng "Recursive stored functions and triggers are not allowed."
|
eng "Recursive stored functions and triggers are not allowed."
|
||||||
ger "Rekursive gespeicherte Routinen und Triggers sind nicht erlaubt"
|
ger "Rekursive gespeicherte Routinen und Triggers sind nicht erlaubt"
|
||||||
ER_TOO_BIG_SCALE 42000 S1009
|
ER_TOO_BIG_SCALE 42000 S1009
|
||||||
eng "Too big scale %u specified for column '%-.192s'. Maximum is %lu."
|
eng "Too big scale %u specified for '%-.192s'. Maximum is %lu."
|
||||||
ger "Zu großer Skalierungsfaktor %u für Feld '%-.192s' angegeben. Maximum ist %lu"
|
ger "Zu großer Skalierungsfaktor %u für '%-.192s' angegeben. Maximum ist %lu"
|
||||||
ER_TOO_BIG_PRECISION 42000 S1009
|
ER_TOO_BIG_PRECISION 42000 S1009
|
||||||
eng "Too big precision %u specified for column '%-.192s'. Maximum is %lu."
|
eng "Too big precision %u specified for '%-.192s'. Maximum is %lu."
|
||||||
ger "Zu große Genauigkeit %u für Feld '%-.192s' angegeben. Maximum ist %lu"
|
ger "Zu große Genauigkeit %u für '%-.192s' angegeben. Maximum ist %lu"
|
||||||
ER_M_BIGGER_THAN_D 42000 S1009
|
ER_M_BIGGER_THAN_D 42000 S1009
|
||||||
eng "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s')."
|
eng "For float(M,D), double(M,D) or decimal(M,D), M must be >= D (column '%-.192s')."
|
||||||
ger "Für FLOAT(M,D), DOUBLE(M,D) oder DECIMAL(M,D) muss M >= D sein (Feld '%-.192s')"
|
ger "Für FLOAT(M,D), DOUBLE(M,D) oder DECIMAL(M,D) muss M >= D sein (Feld '%-.192s')"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user