mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	EXPLAIN EXTENDED warning.
Query optimizer searches for the constant tables and optimizes them away. This
means that fields of such tables are substituted for their values and on later
phases they are treated as constants. After this constant tables are removed
from the query execution plan. Nevertheless constant tables were shown in 
the EXPLAIN EXTENDED warning thus producing query that might be not an
equivalent of the original query.
        
Now the print_join function skips all tables that were optimized away from
printing to the EXPLAIN EXTENDED warning. If all tables were optimized away it
produces the 'FROM dual' clause.
		
	
		
			
				
	
	
		
			148 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			148 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| drop table if exists t1;
 | |
| set names latin1;
 | |
| drop table if exists t1;
 | |
| create table t1 as
 | |
| select repeat(' ', 64) as s1, repeat(' ',64) as s2
 | |
| union
 | |
| select null, null;
 | |
| show create table t1;
 | |
| Table	Create Table
 | |
| t1	CREATE TABLE `t1` (
 | |
|   `s1` varchar(64) DEFAULT NULL,
 | |
|   `s2` varchar(64) DEFAULT NULL
 | |
| ) ENGINE=MyISAM DEFAULT CHARSET=latin1
 | |
| delete from t1;
 | |
| insert into t1 values('aaa','aaa');
 | |
| insert into t1 values('aaa|qqq','qqq');
 | |
| insert into t1 values('gheis','^[^a-dXYZ]+$');
 | |
| insert into t1 values('aab','^aa?b');
 | |
| insert into t1 values('Baaan','^Ba*n');
 | |
| insert into t1 values('aaa','qqq|aaa');
 | |
| insert into t1 values('qqq','qqq|aaa');
 | |
| insert into t1 values('bbb','qqq|aaa');
 | |
| insert into t1 values('bbb','qqq');
 | |
| insert into t1 values('aaa','aba');
 | |
| insert into t1 values(null,'abc');
 | |
| insert into t1 values('def',null);
 | |
| insert into t1 values(null,null);
 | |
| insert into t1 values('ghi','ghi[');
 | |
| select HIGH_PRIORITY s1 regexp s2 from t1;
 | |
| s1 regexp s2
 | |
| 1
 | |
| 1
 | |
| 1
 | |
| 1
 | |
| 1
 | |
| 1
 | |
| 1
 | |
| 0
 | |
| 0
 | |
| 0
 | |
| NULL
 | |
| NULL
 | |
| NULL
 | |
| NULL
 | |
| drop table t1;
 | |
| create table t1 (xxx char(128));
 | |
| insert into t1 (xxx) values('this is a test of some long text to see what happens');
 | |
| select * from t1 where xxx regexp('is a test of some long text to');
 | |
| xxx
 | |
| this is a test of some long text to see what happens
 | |
| explain extended select * from t1 where xxx regexp('is a test of some long text to');
 | |
| id	select_type	table	type	possible_keys	key	key_len	ref	rows	filtered	Extra
 | |
| 1	SIMPLE	t1	system	NULL	NULL	NULL	NULL	1	100.00	
 | |
| Warnings:
 | |
| Note	1003	select 'this is a test of some long text to see what happens' AS `xxx` from dual where ('this is a test of some long text to see what happens' regexp 'is a test of some long text to')
 | |
| select * from t1 where xxx regexp('is a test of some long text to ');
 | |
| xxx
 | |
| this is a test of some long text to see what happens
 | |
| select * from t1 where xxx regexp('is a test of some long text to s');
 | |
| xxx
 | |
| this is a test of some long text to see what happens
 | |
| select * from t1 where xxx regexp('is a test of some long text to se');
 | |
| xxx
 | |
| this is a test of some long text to see what happens
 | |
| drop table t1;
 | |
| create table t1 (xxx char(128));
 | |
| insert into t1 (xxx) values('this is some text: to test - out.reg exp (22/45)');
 | |
| select * from t1 where xxx REGEXP '^this is some text: to test - out\\.reg exp [[(][0-9]+[/\\][0-9]+[])][ ]*$';
 | |
| xxx
 | |
| this is some text: to test - out.reg exp (22/45)
 | |
| drop table t1;
 | |
| select _latin1 0xFF regexp _latin1 '[[:lower:]]' COLLATE latin1_bin;
 | |
| _latin1 0xFF regexp _latin1 '[[:lower:]]' COLLATE latin1_bin
 | |
| 1
 | |
| select _koi8r  0xFF regexp _koi8r  '[[:lower:]]' COLLATE koi8r_bin;
 | |
| _koi8r  0xFF regexp _koi8r  '[[:lower:]]' COLLATE koi8r_bin
 | |
| 0
 | |
| select _latin1 0xFF regexp _latin1 '[[:upper:]]' COLLATE latin1_bin;
 | |
| _latin1 0xFF regexp _latin1 '[[:upper:]]' COLLATE latin1_bin
 | |
| 0
 | |
| select _koi8r  0xFF regexp _koi8r  '[[:upper:]]' COLLATE koi8r_bin;
 | |
| _koi8r  0xFF regexp _koi8r  '[[:upper:]]' COLLATE koi8r_bin
 | |
| 1
 | |
| select _latin1 0xF7 regexp _latin1 '[[:alpha:]]';
 | |
| _latin1 0xF7 regexp _latin1 '[[:alpha:]]'
 | |
| 0
 | |
| select _koi8r  0xF7 regexp _koi8r  '[[:alpha:]]';
 | |
| _koi8r  0xF7 regexp _koi8r  '[[:alpha:]]'
 | |
| 1
 | |
| select _latin1'a' regexp _latin1'A' collate latin1_general_ci;
 | |
| _latin1'a' regexp _latin1'A' collate latin1_general_ci
 | |
| 1
 | |
| select _latin1'a' regexp _latin1'A' collate latin1_bin;
 | |
| _latin1'a' regexp _latin1'A' collate latin1_bin
 | |
| 0
 | |
| create table t1 (a varchar(40));
 | |
| insert into t1 values ('C1'),('C2'),('R1'),('C3'),('R2'),('R3');
 | |
| prepare stmt1 from 'select a from t1 where a rlike ? order by a';
 | |
| set @a="^C.*";
 | |
| execute stmt1 using @a;
 | |
| a
 | |
| C1
 | |
| C2
 | |
| C3
 | |
| set @a="^R.*";
 | |
| execute stmt1 using @a;
 | |
| a
 | |
| R1
 | |
| R2
 | |
| R3
 | |
| deallocate prepare stmt1;
 | |
| drop table t1;
 | |
| End of 4.1 tests
 | |
| SELECT 1 REGEXP NULL;
 | |
| 1 REGEXP NULL
 | |
| NULL
 | |
| SELECT '' REGEXP BINARY NULL;
 | |
| '' REGEXP BINARY NULL
 | |
| NULL
 | |
| SELECT NULL REGEXP BINARY NULL;
 | |
| NULL REGEXP BINARY NULL
 | |
| NULL
 | |
| SELECT 'A' REGEXP BINARY NULL;
 | |
| 'A' REGEXP BINARY NULL
 | |
| NULL
 | |
| SELECT "ABC" REGEXP BINARY NULL;
 | |
| "ABC" REGEXP BINARY NULL
 | |
| NULL
 | |
| End of 5.0 tests
 | |
| CREATE TABLE t1(a INT, b CHAR(4));
 | |
| INSERT INTO t1 VALUES (1, '6.1'), (1, '7.0'), (1, '8.0');
 | |
| PREPARE stmt1 FROM "SELECT a FROM t1 WHERE a=1 AND '7.0' REGEXP b LIMIT 1";
 | |
| EXECUTE stmt1;
 | |
| a
 | |
| 1
 | |
| EXECUTE stmt1;
 | |
| a
 | |
| 1
 | |
| EXECUTE stmt1;
 | |
| a
 | |
| 1
 | |
| EXECUTE stmt1;
 | |
| a
 | |
| 1
 | |
| DEALLOCATE PREPARE stmt1;
 | |
| DROP TABLE t1;
 | |
| End of 5.1 tests
 |