mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	 2033f7ba45
			
		
	
	2033f7ba45
	
	
	
		
			
			trigger fails". In cases when CONVERT_TZ() function was used in trigger or stored function (or in stored procedure which was called from trigger or stored function) error about non existing '.' table was reported. Statements that use CONVERT_TZ() function should have time zone related tables in their table list. tz_init_table_list() function which is used to produce part of table list containing those tables didn't set TABLE_LIST::db_length/table_name_length members properly. As result time zone tables needed for CONVERT_TZ() function were incorrectly handled by prelocking algorithm and "Table '.' doesn't exist' error was emitted. This fix changes tz_init_table_list() in such way that it properly inits TABLE_LIST::table_name_length/db_length members and thus produces table list which can be handled by prelocking algorithm correctly.
		
			
				
	
	
		
			286 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			286 lines
		
	
	
		
			10 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| drop table if exists t1, t2;
 | |
| drop function if exists f1;
 | |
| create table t1 (ts timestamp);
 | |
| set time_zone='+00:00';
 | |
| select unix_timestamp(utc_timestamp())-unix_timestamp(current_timestamp());
 | |
| unix_timestamp(utc_timestamp())-unix_timestamp(current_timestamp())
 | |
| 0
 | |
| insert into t1 (ts) values ('2003-03-30 02:30:00');
 | |
| set time_zone='+10:30';
 | |
| select unix_timestamp(utc_timestamp())-unix_timestamp(current_timestamp());
 | |
| unix_timestamp(utc_timestamp())-unix_timestamp(current_timestamp())
 | |
| -37800
 | |
| insert into t1 (ts) values ('2003-03-30 02:30:00');
 | |
| set time_zone='-10:00';
 | |
| select unix_timestamp(utc_timestamp())-unix_timestamp(current_timestamp());
 | |
| unix_timestamp(utc_timestamp())-unix_timestamp(current_timestamp())
 | |
| 36000
 | |
| insert into t1 (ts) values ('2003-03-30 02:30:00');
 | |
| select * from t1;
 | |
| ts
 | |
| 2003-03-29 16:30:00
 | |
| 2003-03-29 06:00:00
 | |
| 2003-03-30 02:30:00
 | |
| drop table t1;
 | |
| select Name from mysql.time_zone_name where Name in 
 | |
| ('UTC','Universal','MET','Europe/Moscow','leap/Europe/Moscow');
 | |
| Name
 | |
| Europe/Moscow
 | |
| leap/Europe/Moscow
 | |
| MET
 | |
| Universal
 | |
| UTC
 | |
| create table t1 (i int, ts timestamp);
 | |
| set time_zone='MET';
 | |
| insert into t1 (i, ts) values
 | |
| (unix_timestamp('2003-03-01 00:00:00'),'2003-03-01 00:00:00');
 | |
| insert into t1 (i, ts) values
 | |
| (unix_timestamp('2003-03-30 01:59:59'),'2003-03-30 01:59:59'),
 | |
| (unix_timestamp('2003-03-30 02:30:00'),'2003-03-30 02:30:00'),
 | |
| (unix_timestamp('2003-03-30 03:00:00'),'2003-03-30 03:00:00');
 | |
| Warnings:
 | |
| Warning	1299	Invalid TIMESTAMP value in column 'ts' at row 2
 | |
| insert into t1 (i, ts) values
 | |
| (unix_timestamp(20030330015959),20030330015959),
 | |
| (unix_timestamp(20030330023000),20030330023000),
 | |
| (unix_timestamp(20030330030000),20030330030000);
 | |
| Warnings:
 | |
| Warning	1299	Invalid TIMESTAMP value in column 'ts' at row 2
 | |
| insert into t1 (i, ts) values
 | |
| (unix_timestamp('2003-05-01 00:00:00'),'2003-05-01 00:00:00');
 | |
| insert into t1 (i, ts) values
 | |
| (unix_timestamp('2003-10-26 01:00:00'),'2003-10-26 01:00:00'),
 | |
| (unix_timestamp('2003-10-26 02:00:00'),'2003-10-26 02:00:00'),
 | |
| (unix_timestamp('2003-10-26 02:59:59'),'2003-10-26 02:59:59'),
 | |
| (unix_timestamp('2003-10-26 04:00:00'),'2003-10-26 04:00:00'),
 | |
| (unix_timestamp('2003-10-26 02:59:59'),'2003-10-26 02:59:59');
 | |
| set time_zone='UTC';
 | |
| select * from t1;
 | |
| i	ts
 | |
| 1046473200	2003-02-28 23:00:00
 | |
| 1048985999	2003-03-30 00:59:59
 | |
| 1048986000	2003-03-30 01:00:00
 | |
| 1048986000	2003-03-30 01:00:00
 | |
| 1048985999	2003-03-30 00:59:59
 | |
| 1048986000	2003-03-30 01:00:00
 | |
| 1048986000	2003-03-30 01:00:00
 | |
| 1051740000	2003-04-30 22:00:00
 | |
| 1067122800	2003-10-25 23:00:00
 | |
| 1067126400	2003-10-26 00:00:00
 | |
| 1067129999	2003-10-26 00:59:59
 | |
| 1067137200	2003-10-26 03:00:00
 | |
| 1067129999	2003-10-26 00:59:59
 | |
| delete from t1;
 | |
| set time_zone='Europe/Moscow';
 | |
| insert into t1 (i, ts) values
 | |
| (unix_timestamp('2004-01-01 00:00:00'),'2004-01-01 00:00:00'),
 | |
| (unix_timestamp('2004-03-28 02:30:00'),'2004-03-28 02:30:00'),
 | |
| (unix_timestamp('2004-08-01 00:00:00'),'2003-08-01 00:00:00'),
 | |
| (unix_timestamp('2004-10-31 02:30:00'),'2004-10-31 02:30:00');
 | |
| Warnings:
 | |
| Warning	1299	Invalid TIMESTAMP value in column 'ts' at row 2
 | |
| select * from t1;
 | |
| i	ts
 | |
| 1072904400	2004-01-01 00:00:00
 | |
| 1080428400	2004-03-28 03:00:00
 | |
| 1091304000	2003-08-01 00:00:00
 | |
| 1099175400	2004-10-31 02:30:00
 | |
| delete from t1;
 | |
| set time_zone='leap/Europe/Moscow';
 | |
| insert into t1 (i, ts) values
 | |
| (unix_timestamp('2004-01-01 00:00:00'),'2004-01-01 00:00:00'),
 | |
| (unix_timestamp('2004-03-28 02:30:00'),'2004-03-28 02:30:00'),
 | |
| (unix_timestamp('2004-08-01 00:00:00'),'2003-08-01 00:00:00'),
 | |
| (unix_timestamp('2004-10-31 02:30:00'),'2004-10-31 02:30:00');
 | |
| Warnings:
 | |
| Warning	1299	Invalid TIMESTAMP value in column 'ts' at row 2
 | |
| select * from t1;
 | |
| i	ts
 | |
| 1072904422	2004-01-01 00:00:00
 | |
| 1080428422	2004-03-28 03:00:00
 | |
| 1091304022	2003-08-01 00:00:00
 | |
| 1099175422	2004-10-31 02:30:00
 | |
| delete from t1;
 | |
| insert into t1 (i, ts) values
 | |
| (unix_timestamp('1981-07-01 03:59:59'),'1981-07-01 03:59:59'),
 | |
| (unix_timestamp('1981-07-01 04:00:00'),'1981-07-01 04:00:00');
 | |
| select * from t1;
 | |
| i	ts
 | |
| 362793608	1981-07-01 03:59:59
 | |
| 362793610	1981-07-01 04:00:00
 | |
| select from_unixtime(362793609);
 | |
| from_unixtime(362793609)
 | |
| 1981-07-01 03:59:60
 | |
| drop table t1;
 | |
| create table t1 (ts timestamp);
 | |
| set time_zone='UTC';
 | |
| insert into t1 values ('0000-00-00 00:00:00'),('1969-12-31 23:59:59'),
 | |
| ('1970-01-01 00:00:00'),('1970-01-01 00:00:01'),
 | |
| ('2037-12-31 23:59:59'),('2038-01-01 00:00:00');
 | |
| Warnings:
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 2
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 3
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 6
 | |
| select * from t1;
 | |
| ts
 | |
| 0000-00-00 00:00:00
 | |
| 0000-00-00 00:00:00
 | |
| 0000-00-00 00:00:00
 | |
| 1970-01-01 00:00:01
 | |
| 2037-12-31 23:59:59
 | |
| 0000-00-00 00:00:00
 | |
| delete from t1;
 | |
| set time_zone='MET';
 | |
| insert into t1 values ('0000-00-00 00:00:00'),('1970-01-01 00:30:00'),
 | |
| ('1970-01-01 01:00:00'),('1970-01-01 01:00:01'),
 | |
| ('2038-01-01 00:59:59'),('2038-01-01 01:00:00');
 | |
| Warnings:
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 2
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 3
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 6
 | |
| select * from t1;
 | |
| ts
 | |
| 0000-00-00 00:00:00
 | |
| 0000-00-00 00:00:00
 | |
| 0000-00-00 00:00:00
 | |
| 1970-01-01 01:00:01
 | |
| 2038-01-01 00:59:59
 | |
| 0000-00-00 00:00:00
 | |
| delete from t1;
 | |
| set time_zone='+01:30';
 | |
| insert into t1 values ('0000-00-00 00:00:00'),('1970-01-01 01:00:00'),
 | |
| ('1970-01-01 01:30:00'),('1970-01-01 01:30:01'),
 | |
| ('2038-01-01 01:29:59'),('2038-01-01 01:30:00');
 | |
| Warnings:
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 2
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 3
 | |
| Warning	1264	Out of range value adjusted for column 'ts' at row 6
 | |
| select * from t1;
 | |
| ts
 | |
| 0000-00-00 00:00:00
 | |
| 0000-00-00 00:00:00
 | |
| 0000-00-00 00:00:00
 | |
| 1970-01-01 01:30:01
 | |
| 2038-01-01 01:29:59
 | |
| 0000-00-00 00:00:00
 | |
| drop table t1;
 | |
| show variables like 'time_zone';
 | |
| Variable_name	Value
 | |
| time_zone	+01:30
 | |
| set time_zone = default;
 | |
| show variables like 'time_zone';
 | |
| Variable_name	Value
 | |
| time_zone	SYSTEM
 | |
| set time_zone= '0';
 | |
| ERROR HY000: Unknown or incorrect time zone: '0'
 | |
| set time_zone= '0:0';
 | |
| ERROR HY000: Unknown or incorrect time zone: '0:0'
 | |
| set time_zone= '-20:00';
 | |
| ERROR HY000: Unknown or incorrect time zone: '-20:00'
 | |
| set time_zone= '+20:00';
 | |
| ERROR HY000: Unknown or incorrect time zone: '+20:00'
 | |
| set time_zone= 'Some/Unknown/Time/Zone';
 | |
| ERROR HY000: Unknown or incorrect time zone: 'Some/Unknown/Time/Zone'
 | |
| select convert_tz(now(),'UTC', 'Universal') = now();
 | |
| convert_tz(now(),'UTC', 'Universal') = now()
 | |
| 1
 | |
| select convert_tz(now(),'utc', 'UTC') = now();
 | |
| convert_tz(now(),'utc', 'UTC') = now()
 | |
| 1
 | |
| select convert_tz('1917-11-07 12:00:00', 'MET', 'UTC');
 | |
| convert_tz('1917-11-07 12:00:00', 'MET', 'UTC')
 | |
| 1917-11-07 12:00:00
 | |
| select convert_tz('1970-01-01 01:00:00', 'MET', 'UTC');
 | |
| convert_tz('1970-01-01 01:00:00', 'MET', 'UTC')
 | |
| 1970-01-01 01:00:00
 | |
| select convert_tz('1970-01-01 01:00:01', 'MET', 'UTC');
 | |
| convert_tz('1970-01-01 01:00:01', 'MET', 'UTC')
 | |
| 1970-01-01 00:00:01
 | |
| select convert_tz('2003-03-01 00:00:00', 'MET', 'UTC');
 | |
| convert_tz('2003-03-01 00:00:00', 'MET', 'UTC')
 | |
| 2003-02-28 23:00:00
 | |
| select convert_tz('2003-03-30 01:59:59', 'MET', 'UTC');
 | |
| convert_tz('2003-03-30 01:59:59', 'MET', 'UTC')
 | |
| 2003-03-30 00:59:59
 | |
| select convert_tz('2003-03-30 02:30:00', 'MET', 'UTC');
 | |
| convert_tz('2003-03-30 02:30:00', 'MET', 'UTC')
 | |
| 2003-03-30 01:00:00
 | |
| select convert_tz('2003-03-30 03:00:00', 'MET', 'UTC');
 | |
| convert_tz('2003-03-30 03:00:00', 'MET', 'UTC')
 | |
| 2003-03-30 01:00:00
 | |
| select convert_tz('2003-05-01 00:00:00', 'MET', 'UTC');
 | |
| convert_tz('2003-05-01 00:00:00', 'MET', 'UTC')
 | |
| 2003-04-30 22:00:00
 | |
| select convert_tz('2003-10-26 01:00:00', 'MET', 'UTC');
 | |
| convert_tz('2003-10-26 01:00:00', 'MET', 'UTC')
 | |
| 2003-10-25 23:00:00
 | |
| select convert_tz('2003-10-26 02:00:00', 'MET', 'UTC');
 | |
| convert_tz('2003-10-26 02:00:00', 'MET', 'UTC')
 | |
| 2003-10-26 00:00:00
 | |
| select convert_tz('2003-10-26 02:59:59', 'MET', 'UTC');
 | |
| convert_tz('2003-10-26 02:59:59', 'MET', 'UTC')
 | |
| 2003-10-26 00:59:59
 | |
| select convert_tz('2003-10-26 04:00:00', 'MET', 'UTC');
 | |
| convert_tz('2003-10-26 04:00:00', 'MET', 'UTC')
 | |
| 2003-10-26 03:00:00
 | |
| select convert_tz('2038-01-01 00:59:59', 'MET', 'UTC');
 | |
| convert_tz('2038-01-01 00:59:59', 'MET', 'UTC')
 | |
| 2037-12-31 23:59:59
 | |
| select convert_tz('2038-01-01 01:00:00', 'MET', 'UTC');
 | |
| convert_tz('2038-01-01 01:00:00', 'MET', 'UTC')
 | |
| 2038-01-01 01:00:00
 | |
| select convert_tz('2103-01-01 04:00:00', 'MET', 'UTC');
 | |
| convert_tz('2103-01-01 04:00:00', 'MET', 'UTC')
 | |
| 2103-01-01 04:00:00
 | |
| create table t1 (tz varchar(3));
 | |
| insert into t1 (tz) values ('MET'), ('UTC');
 | |
| select tz, convert_tz('2003-12-31 00:00:00',tz,'UTC'), convert_tz('2003-12-31 00:00:00','UTC',tz) from t1 order by tz;
 | |
| tz	convert_tz('2003-12-31 00:00:00',tz,'UTC')	convert_tz('2003-12-31 00:00:00','UTC',tz)
 | |
| MET	2003-12-30 23:00:00	2003-12-31 01:00:00
 | |
| UTC	2003-12-31 00:00:00	2003-12-31 00:00:00
 | |
| drop table t1;
 | |
| select convert_tz('2003-12-31 04:00:00', NULL, 'UTC');
 | |
| convert_tz('2003-12-31 04:00:00', NULL, 'UTC')
 | |
| NULL
 | |
| select convert_tz('2003-12-31 04:00:00', 'SomeNotExistingTimeZone', 'UTC');
 | |
| convert_tz('2003-12-31 04:00:00', 'SomeNotExistingTimeZone', 'UTC')
 | |
| NULL
 | |
| select convert_tz('2003-12-31 04:00:00', 'MET', 'SomeNotExistingTimeZone');
 | |
| convert_tz('2003-12-31 04:00:00', 'MET', 'SomeNotExistingTimeZone')
 | |
| NULL
 | |
| select convert_tz('2003-12-31 04:00:00', 'MET', NULL);
 | |
| convert_tz('2003-12-31 04:00:00', 'MET', NULL)
 | |
| NULL
 | |
| select convert_tz( NULL, 'MET', 'UTC');
 | |
| convert_tz( NULL, 'MET', 'UTC')
 | |
| NULL
 | |
| create table t1 (ts timestamp);
 | |
| set timestamp=1000000000;
 | |
| insert into t1 (ts) values (now());
 | |
| select convert_tz(ts, @@time_zone, 'Japan') from t1;
 | |
| convert_tz(ts, @@time_zone, 'Japan')
 | |
| 2001-09-09 10:46:40
 | |
| drop table t1;
 | |
| select convert_tz('2005-01-14 17:00:00', 'UTC', custTimeZone) from (select 'UTC' as custTimeZone) as tmp;
 | |
| convert_tz('2005-01-14 17:00:00', 'UTC', custTimeZone)
 | |
| 2005-01-14 17:00:00
 | |
| create table t1 select convert_tz(NULL, NULL, NULL);
 | |
| select * from t1;
 | |
| convert_tz(NULL, NULL, NULL)
 | |
| NULL
 | |
| drop table t1;
 | |
| create table t1 (ldt datetime, udt datetime);
 | |
| create function f1(i datetime) returns datetime
 | |
| return convert_tz(i, 'UTC', 'Europe/Moscow');
 | |
| create trigger t1_bi before insert on t1 for each row
 | |
| set new.udt:= convert_tz(new.ldt, 'Europe/Moscow', 'UTC');
 | |
| insert into t1 (ldt) values ('2006-04-19 16:30:00');
 | |
| select * from t1;
 | |
| ldt	udt
 | |
| 2006-04-19 16:30:00	2006-04-19 12:30:00
 | |
| select ldt, f1(udt) as ldt2 from t1;
 | |
| ldt	ldt2
 | |
| 2006-04-19 16:30:00	2006-04-19 16:30:00
 | |
| drop table t1;
 | |
| drop function f1;
 |