mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-24 07:13:33 +03:00 
			
		
		
		
	Fixed warnings by valgrind for sum_distinct.test Enable buffered-record-reads after filesort for InnoDB tables with short primary key Enabled sort-with-data for MyISAM temporary files BitKeeper/etc/ignore: added tools/mysqltestmanager client/mysqltest.c: Ensure that BIG_TEST is always set to 0 or 1 Fix the 'eval' also honors 'require' mysql-test/mysql-test-run.sh: Enlarge InnoDB table space for --big tests mysql-test/r/heap.result: Fix after adding more optimzation for filsort mysql-test/r/sum_distinct.result: Move 'slow' part of test to sum_distinct-big.test mysql-test/t/heap.test: Ensure that results are indpendent of optimizer mysql-test/t/sum_distinct.test: Move 'slow' part of test to sum_distinct-big.test sql/filesort.cc: Use 'sort with data' also on temporary files and with INSERT ... SELECT sql/ha_innodb.h: Remove HA_FAST_KEY_READ to enable buffered-record-reads after filesort sql/handler.h: More comments sql/mysql_priv.h: A bit smaller limit for cache for buffered-records-read (after testing) sql/records.cc: Don't use buffered-record-reads if ref_length > MAX_REFLENGTH Fixed warning from valgrind in 'sum_distinct' sql/sql_select.cc: Ensure that tempory tables has query_id set for all fields (Required for sort-with-data to work on temp files)
		
			
				
	
	
		
			96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			96 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #
 | |
| # Various tests for SUM(DISTINCT ...)
 | |
| #
 | |
| --disable_warnings
 | |
| DROP TABLE IF EXISTS t1, t2;
 | |
| --enable_warnings
 | |
| 
 | |
| CREATE TABLE t1 (
 | |
|   id INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT, 
 | |
|   gender CHAR(1),
 | |
|   name VARCHAR(20)
 | |
| );
 | |
| 
 | |
| # According to ANSI SQL, SUM(DISTINCT ...) should return NULL for empty
 | |
| # record set
 | |
| 
 | |
| SELECT SUM(DISTINCT LENGTH(name)) s1 FROM t1;
 | |
| 
 | |
| # According to ANSI SQL, SUM(DISTINCT ...) should return NULL for records sets
 | |
| # entirely consisting of NULLs
 | |
| 
 | |
| INSERT INTO t1 (gender, name) VALUES (NULL, NULL);
 | |
| INSERT INTO t1 (gender, name) VALUES (NULL, NULL);
 | |
| INSERT INTO t1 (gender, name) VALUES (NULL, NULL);
 | |
| 
 | |
| SELECT SUM(DISTINCT LENGTH(name)) s1 FROM t1;
 | |
| 
 | |
| 
 | |
| # Filling table with t1
 | |
| 
 | |
| INSERT INTO t1 (gender, name) VALUES ('F', 'Helen'), ('F', 'Anastasia'),
 | |
| ('F', 'Katherine'), ('F', 'Margo'), ('F', 'Magdalene'), ('F', 'Mary');
 | |
| 
 | |
| CREATE TABLE t2 SELECT name FROM t1;
 | |
| 
 | |
| SELECT (SELECT SUM(DISTINCT LENGTH(name)) FROM t1) FROM t2;
 | |
| 
 | |
| DROP TABLE t2;
 | |
| 
 | |
| INSERT INTO t1 (gender, name) VALUES ('F', 'Eva'), ('F', 'Sofia'),
 | |
| ('F', 'Sara'), ('F', 'Golda'), ('F', 'Toba'), ('F', 'Victory'),
 | |
| ('F', 'Faina'), ('F', 'Miriam'), ('F', 'Beki'), ('F', 'America'),
 | |
| ('F', 'Susan'), ('F', 'Glory'), ('F', 'Priscilla'), ('F', 'Rosmary'),
 | |
| ('F', 'Rose'), ('F', 'Margareth'), ('F', 'Elizabeth'), ('F', 'Meredith'),
 | |
| ('F', 'Julie'), ('F', 'Xenia'), ('F', 'Zena'), ('F', 'Olga'),
 | |
| ('F', 'Brunhilda'), ('F', 'Nataly'), ('F', 'Lara'), ('F', 'Svetlana'),
 | |
| ('F', 'Grethem'), ('F', 'Irene');
 | |
| 
 | |
| SELECT
 | |
|   SUM(DISTINCT LENGTH(name)) s1,
 | |
|   SUM(DISTINCT SUBSTRING(NAME, 1, 3)) s2,
 | |
|   SUM(DISTINCT LENGTH(SUBSTRING(name, 1, 4))) s3
 | |
| FROM t1;
 | |
| 
 | |
| SELECT
 | |
|   SUM(DISTINCT LENGTH(g1.name)) s1,
 | |
|   SUM(DISTINCT SUBSTRING(g2.name, 1, 3)) s2,
 | |
|   SUM(DISTINCT LENGTH(SUBSTRING(g3.name, 1, 4))) s3
 | |
| FROM t1 g1, t1 g2, t1 g3;
 | |
| 
 | |
| SELECT
 | |
|   SUM(DISTINCT LENGTH(g1.name)) s1,
 | |
|   SUM(DISTINCT SUBSTRING(g2.name, 1, 3)) s2,
 | |
|   SUM(DISTINCT LENGTH(SUBSTRING(g3.name, 1, 4))) s3
 | |
| FROM t1 g1, t1 g2, t1 g3 GROUP BY LENGTH(SUBSTRING(g3.name, 5, 10));
 | |
| 
 | |
| # here we explicitly request summing through temporary table (so
 | |
| # Item_sum_sum_distinct::copy_or_same() is called)
 | |
| 
 | |
| SELECT SQL_BUFFER_RESULT
 | |
|   SUM(DISTINCT LENGTH(name)) s1,
 | |
|   SUM(DISTINCT SUBSTRING(NAME, 1, 3)) s2,
 | |
|   SUM(DISTINCT LENGTH(SUBSTRING(name, 1, 4))) s3
 | |
| FROM t1;
 | |
| 
 | |
| SELECT SQL_BUFFER_RESULT
 | |
|   SUM(DISTINCT LENGTH(g1.name)) s1,
 | |
|   SUM(DISTINCT SUBSTRING(g2.name, 1, 3)) s2,
 | |
|   SUM(DISTINCT LENGTH(SUBSTRING(g3.name, 1, 4))) s3
 | |
| FROM t1 g1, t1 g2, t1 g3 GROUP BY LENGTH(SUBSTRING(g3.name, 5, 10));
 | |
| 
 | |
| # this test demonstrates that strings are automatically converted to numbers
 | |
| # before summing
 | |
| 
 | |
| SET @l=1;
 | |
| UPDATE t1 SET name=CONCAT(name, @l:=@l+1);
 | |
| 
 | |
| SELECT SUM(DISTINCT RIGHT(name, 1)) FROM t1;
 | |
| 
 | |
| # this is a test case for ordinary t1 
 | |
| 
 | |
| SELECT SUM(DISTINCT id) FROM t1;
 | |
| SELECT SUM(DISTINCT id % 11) FROM t1;
 | |
| 
 | |
| DROP TABLE t1;
 |