mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-04 04:46:15 +01:00 
			
		
		
		
	* it isn't "pfs" function, don't call it Item_func_pfs, don't use item_pfsfunc.* * tests don't depend on performance schema, put in the main suite * inherit from Item_str_ascii_func * use connection collation, not utf8mb3_general_ci * set result length in fix_length_and_dec * do not set maybe_null * use my_snprintf() where possible * don't set m_value.ptr on every invocation * update sys schema to use the format_pico_time() * len must be size_t (compilation error on Windows) * the correct function name for double->double is fabs() * drop volatile hack
		
			
				
	
	
		
			213 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			213 lines
		
	
	
	
		
			4.9 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
# MDEV-19629: Implement MySQL 8.0 native functions: format_bytes(), format_pico_time() and ps_thread_id()
 | 
						|
#
 | 
						|
# Tests for the Performance Schema native function format_pico_time()
 | 
						|
#
 | 
						|
 | 
						|
SELECT format_pico_time(NULL);
 | 
						|
format_pico_time(NULL)
 | 
						|
NULL
 | 
						|
 | 
						|
SELECT format_pico_time(0);
 | 
						|
format_pico_time(0)
 | 
						|
  0 ps
 | 
						|
 | 
						|
SELECT format_pico_time(1);
 | 
						|
format_pico_time(1)
 | 
						|
  1 ps
 | 
						|
 | 
						|
SELECT format_pico_time(999);
 | 
						|
format_pico_time(999)
 | 
						|
999 ps
 | 
						|
 | 
						|
SELECT format_pico_time(1000);
 | 
						|
format_pico_time(1000)
 | 
						|
1.00 ns
 | 
						|
 | 
						|
SELECT format_pico_time(1001);
 | 
						|
format_pico_time(1001)
 | 
						|
1.00 ns
 | 
						|
 | 
						|
SELECT format_pico_time(999999);
 | 
						|
format_pico_time(999999)
 | 
						|
1000.00 ns
 | 
						|
 | 
						|
SELECT format_pico_time(1000000);
 | 
						|
format_pico_time(1000000)
 | 
						|
1.00 us
 | 
						|
 | 
						|
SELECT format_pico_time(1000001);
 | 
						|
format_pico_time(1000001)
 | 
						|
1.00 us
 | 
						|
 | 
						|
SELECT format_pico_time(1010000);
 | 
						|
format_pico_time(1010000)
 | 
						|
1.01 us
 | 
						|
 | 
						|
SELECT format_pico_time(987654321);
 | 
						|
format_pico_time(987654321)
 | 
						|
987.65 us
 | 
						|
 | 
						|
SELECT format_pico_time(1000000000);
 | 
						|
format_pico_time(1000000000)
 | 
						|
1.00 ms
 | 
						|
 | 
						|
SELECT format_pico_time(999876000000);
 | 
						|
format_pico_time(999876000000)
 | 
						|
999.88 ms
 | 
						|
 | 
						|
SELECT format_pico_time(999999999999);
 | 
						|
format_pico_time(999999999999)
 | 
						|
1000.00 ms
 | 
						|
 | 
						|
SELECT format_pico_time(1000000000000);
 | 
						|
format_pico_time(1000000000000)
 | 
						|
1.00 s
 | 
						|
 | 
						|
SELECT format_pico_time(59000000000000);
 | 
						|
format_pico_time(59000000000000)
 | 
						|
59.00 s
 | 
						|
 | 
						|
SELECT format_pico_time(60000000000000);
 | 
						|
format_pico_time(60000000000000)
 | 
						|
1.00 min
 | 
						|
 | 
						|
SELECT format_pico_time(3549000000000000);
 | 
						|
format_pico_time(3549000000000000)
 | 
						|
59.15 min
 | 
						|
 | 
						|
SELECT format_pico_time(3599000000000000);
 | 
						|
format_pico_time(3599000000000000)
 | 
						|
59.98 min
 | 
						|
 | 
						|
SELECT format_pico_time(3600000000000000);
 | 
						|
format_pico_time(3600000000000000)
 | 
						|
1.00 h
 | 
						|
 | 
						|
SELECT format_pico_time(power(2, 63));
 | 
						|
format_pico_time(power(2, 63))
 | 
						|
106.75 d
 | 
						|
 | 
						|
SELECT format_pico_time((power(2, 63) - 1) * 2 + 1);
 | 
						|
format_pico_time((power(2, 63) - 1) * 2 + 1)
 | 
						|
213.50 d
 | 
						|
 | 
						|
SELECT format_pico_time(36000000.495523);
 | 
						|
format_pico_time(36000000.495523)
 | 
						|
36.00 us
 | 
						|
 | 
						|
SELECT format_pico_time(1000 * pow(10,12) * 86400);
 | 
						|
format_pico_time(1000 * pow(10,12) * 86400)
 | 
						|
1000.00 d
 | 
						|
 | 
						|
SELECT format_pico_time(86400000000000000000);
 | 
						|
format_pico_time(86400000000000000000)
 | 
						|
1000.00 d
 | 
						|
 | 
						|
SELECT format_pico_time(86400000000000000000+5000);
 | 
						|
format_pico_time(86400000000000000000+5000)
 | 
						|
1000.00 d
 | 
						|
 | 
						|
## Negative values are ok
 | 
						|
SELECT format_pico_time(1010000 * -1);
 | 
						|
format_pico_time(1010000 * -1)
 | 
						|
-1.01 us
 | 
						|
 | 
						|
## Force exponent
 | 
						|
SELECT format_pico_time(8650000000000000000099);
 | 
						|
format_pico_time(8650000000000000000099)
 | 
						|
1.00e+05 d
 | 
						|
 | 
						|
SELECT format_pico_time(-8650000000000000000099);
 | 
						|
format_pico_time(-8650000000000000000099)
 | 
						|
-1.00e+05 d
 | 
						|
 | 
						|
SELECT format_pico_time(8640000000000000000099 * 2);
 | 
						|
format_pico_time(8640000000000000000099 * 2)
 | 
						|
2.00e+05 d
 | 
						|
 | 
						|
 | 
						|
## Text input
 | 
						|
SELECT format_pico_time("foo");
 | 
						|
format_pico_time("foo")
 | 
						|
  0 ps
 | 
						|
Warnings:
 | 
						|
Warning	1292	Truncated incorrect DOUBLE value: 'foo'
 | 
						|
 | 
						|
SELECT format_pico_time("");
 | 
						|
format_pico_time("")
 | 
						|
  0 ps
 | 
						|
Warnings:
 | 
						|
Warning	1292	Truncated incorrect DOUBLE value: ''
 | 
						|
 | 
						|
SELECT format_pico_time("118059162071741143500099");
 | 
						|
format_pico_time("118059162071741143500099")
 | 
						|
1.37e+06 d
 | 
						|
 | 
						|
SELECT format_pico_time("-118059162071741143500099");
 | 
						|
format_pico_time("-118059162071741143500099")
 | 
						|
-1.37e+06 d
 | 
						|
 | 
						|
## Recognizes up to first non-numeric
 | 
						|
SELECT format_pico_time("40000 * 2000");
 | 
						|
format_pico_time("40000 * 2000")
 | 
						|
40.00 ns
 | 
						|
Warnings:
 | 
						|
Warning	1292	Truncated incorrect DOUBLE value: '40000 * 2000'
 | 
						|
 | 
						|
SELECT format_pico_time("40000 foo 2000");
 | 
						|
format_pico_time("40000 foo 2000")
 | 
						|
40.00 ns
 | 
						|
Warnings:
 | 
						|
Warning	1292	Truncated incorrect DOUBLE value: '40000 foo 2000'
 | 
						|
## Aggregate functions
 | 
						|
USE test;
 | 
						|
 | 
						|
CREATE TABLE timer_waits (id VARCHAR(10), wait BIGINT UNSIGNED DEFAULT NULL) DEFAULT CHARSET = utf8mb4;
 | 
						|
 | 
						|
INSERT INTO timer_waits VALUES ('1 sec',          1000000000000);
 | 
						|
INSERT INTO timer_waits VALUES ('1 min',         60000000000000);
 | 
						|
INSERT INTO timer_waits VALUES ('1 hour',      3600000000000000);
 | 
						|
INSERT INTO timer_waits VALUES ('1 day',      86400000000000000);
 | 
						|
INSERT INTO timer_waits VALUES ('100 days', 8640000000000000000);
 | 
						|
 | 
						|
SELECT id, format_pico_time(wait), wait FROM timer_waits;
 | 
						|
id	format_pico_time(wait)	wait
 | 
						|
1 sec	1.00 s	1000000000000
 | 
						|
1 min	1.00 min	60000000000000
 | 
						|
1 hour	1.00 h	3600000000000000
 | 
						|
1 day	1.00 d	86400000000000000
 | 
						|
100 days	100.00 d	8640000000000000000
 | 
						|
 | 
						|
SELECT sum(wait), format_pico_time(sum(wait)) FROM timer_waits;
 | 
						|
sum(wait)	format_pico_time(sum(wait))
 | 
						|
8730061000000000000	101.04 d
 | 
						|
 | 
						|
SELECT avg(wait), format_pico_time(avg(wait)) FROM timer_waits;
 | 
						|
avg(wait)	format_pico_time(avg(wait))
 | 
						|
1746012200000000000.0000	20.21 d
 | 
						|
 | 
						|
SELECT min(wait), format_pico_time(min(wait)) FROM timer_waits;
 | 
						|
min(wait)	format_pico_time(min(wait))
 | 
						|
1000000000000	1.00 s
 | 
						|
 | 
						|
SELECT max(wait), format_pico_time(max(wait)) FROM timer_waits;
 | 
						|
max(wait)	format_pico_time(max(wait))
 | 
						|
8640000000000000000	100.00 d
 | 
						|
 | 
						|
DROP TABLE timer_waits;
 | 
						|
## Using Scientific Notation
 | 
						|
SELECT format_pico_time(3e9);
 | 
						|
format_pico_time(3e9)
 | 
						|
3.00 ms
 | 
						|
 | 
						|
SELECT format_pico_time(4e6);
 | 
						|
format_pico_time(4e6)
 | 
						|
4.00 us
 | 
						|
 | 
						|
SELECT format_pico_time(5e3);
 | 
						|
format_pico_time(5e3)
 | 
						|
5.00 ns
 | 
						|
 | 
						|
SELECT format_pico_time(6e2);
 | 
						|
format_pico_time(6e2)
 | 
						|
600 ps
 |