122 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
		
		
			
		
	
	
			122 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			PHP
		
	
	
	
| 
								 | 
							
								# include/rowid_order.inc
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Test for rowid ordering (and comparison) functions.
							 | 
						||
| 
								 | 
							
								# do index_merge select for tables with PK of various types.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# The variable
							 | 
						||
| 
								 | 
							
								#     $engine_type       -- storage engine to be tested
							 | 
						||
| 
								 | 
							
								# has to be set before sourcing this script.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Note: The comments/expections refer to InnoDB.
							 | 
						||
| 
								 | 
							
								#       They might be not valid for other storage engines.
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								# Last update:
							 | 
						||
| 
								 | 
							
								# 2006-08-02 ML test refactored
							 | 
						||
| 
								 | 
							
								#               old name was t/rowid_order.test
							 | 
						||
| 
								 | 
							
								#               main code went into include/rowid_order.inc
							 | 
						||
| 
								 | 
							
								#
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								eval SET SESSION STORAGE_ENGINE = $engine_type;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								--disable_warnings
							 | 
						||
| 
								 | 
							
								drop table if exists t1, t2, t3,t4;
							 | 
						||
| 
								 | 
							
								--enable_warnings
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Signed number as rowid
							 | 
						||
| 
								 | 
							
								create table t1 (
							 | 
						||
| 
								 | 
							
								  pk1 int not NULL,
							 | 
						||
| 
								 | 
							
								  key1 int(11),
							 | 
						||
| 
								 | 
							
								  key2 int(11),
							 | 
						||
| 
								 | 
							
								  PRIMARY KEY  (pk1),
							 | 
						||
| 
								 | 
							
								  KEY key1 (key1),
							 | 
						||
| 
								 | 
							
								  KEY key2 (key2)
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								insert into t1 values (-5, 1, 1),
							 | 
						||
| 
								 | 
							
								  (-100, 1, 1),
							 | 
						||
| 
								 | 
							
								  (3, 1, 1),
							 | 
						||
| 
								 | 
							
								  (0, 1, 1),
							 | 
						||
| 
								 | 
							
								  (10, 1, 1);
							 | 
						||
| 
								 | 
							
								explain select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
							 | 
						||
| 
								 | 
							
								select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
							 | 
						||
| 
								 | 
							
								drop table t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Unsigned numbers as rowids
							 | 
						||
| 
								 | 
							
								create table t1 (
							 | 
						||
| 
								 | 
							
								  pk1 int unsigned not NULL,
							 | 
						||
| 
								 | 
							
								  key1 int(11),
							 | 
						||
| 
								 | 
							
								  key2 int(11),
							 | 
						||
| 
								 | 
							
								  PRIMARY KEY  (pk1),
							 | 
						||
| 
								 | 
							
								  KEY key1 (key1),
							 | 
						||
| 
								 | 
							
								  KEY key2 (key2)
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								insert into t1 values (0, 1, 1),
							 | 
						||
| 
								 | 
							
								  (0xFFFFFFFF, 1, 1),
							 | 
						||
| 
								 | 
							
								  (0xFFFFFFFE, 1, 1),
							 | 
						||
| 
								 | 
							
								  (1, 1, 1),
							 | 
						||
| 
								 | 
							
								  (2, 1, 1);
							 | 
						||
| 
								 | 
							
								select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
							 | 
						||
| 
								 | 
							
								drop table t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Case-insensitive char(N)
							 | 
						||
| 
								 | 
							
								create table t1 (
							 | 
						||
| 
								 | 
							
								  pk1 char(4) not NULL,
							 | 
						||
| 
								 | 
							
								  key1 int(11),
							 | 
						||
| 
								 | 
							
								  key2 int(11),
							 | 
						||
| 
								 | 
							
								  PRIMARY KEY  (pk1),
							 | 
						||
| 
								 | 
							
								  KEY key1 (key1),
							 | 
						||
| 
								 | 
							
								  KEY key2 (key2)
							 | 
						||
| 
								 | 
							
								) collate latin2_general_ci;
							 | 
						||
| 
								 | 
							
								insert into t1 values ('a1', 1, 1),
							 | 
						||
| 
								 | 
							
								  ('b2', 1, 1),
							 | 
						||
| 
								 | 
							
								  ('A3', 1, 1),
							 | 
						||
| 
								 | 
							
								  ('B4', 1, 1);
							 | 
						||
| 
								 | 
							
								select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
							 | 
						||
| 
								 | 
							
								drop table t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Multi-part PK
							 | 
						||
| 
								 | 
							
								create table t1 (
							 | 
						||
| 
								 | 
							
								  pk1 int not NULL,
							 | 
						||
| 
								 | 
							
								  pk2 char(4) not NULL collate latin1_german1_ci,
							 | 
						||
| 
								 | 
							
								  pk3 char(4) not NULL collate latin1_bin,
							 | 
						||
| 
								 | 
							
								  key1 int(11),
							 | 
						||
| 
								 | 
							
								  key2 int(11),
							 | 
						||
| 
								 | 
							
								  PRIMARY KEY  (pk1,pk2,pk3),
							 | 
						||
| 
								 | 
							
								  KEY key1 (key1),
							 | 
						||
| 
								 | 
							
								  KEY key2 (key2)
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								insert into t1 values
							 | 
						||
| 
								 | 
							
								  (1, 'u', 'u',        1, 1),
							 | 
						||
| 
								 | 
							
								  (1, 'u', char(0xEC), 1, 1),
							 | 
						||
| 
								 | 
							
								  (1, 'u', 'x',        1, 1);
							 | 
						||
| 
								 | 
							
								insert ignore into t1 select pk1, char(0xEC), pk3, key1, key2  from t1;
							 | 
						||
| 
								 | 
							
								insert ignore into t1 select pk1, 'x', pk3, key1, key2  from t1 where pk2='u';
							 | 
						||
| 
								 | 
							
								insert ignore into t1 select 2, pk2, pk3, key1, key2  from t1;
							 | 
						||
| 
								 | 
							
								select * from t1;
							 | 
						||
| 
								 | 
							
								select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Hidden PK
							 | 
						||
| 
								 | 
							
								alter table t1 drop primary key;
							 | 
						||
| 
								 | 
							
								select * from t1;
							 | 
						||
| 
								 | 
							
								select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
							 | 
						||
| 
								 | 
							
								drop table t1;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								# Variable-length PK
							 | 
						||
| 
								 | 
							
								# this is also test for Bug#2688
							 | 
						||
| 
								 | 
							
								create table t1  (
							 | 
						||
| 
								 | 
							
								  pk1 varchar(8) NOT NULL default '',
							 | 
						||
| 
								 | 
							
								  pk2 varchar(4) NOT NULL default '',
							 | 
						||
| 
								 | 
							
								  key1 int(11),
							 | 
						||
| 
								 | 
							
								  key2 int(11),
							 | 
						||
| 
								 | 
							
								  primary key(pk1, pk2),
							 | 
						||
| 
								 | 
							
								  KEY key1 (key1),
							 | 
						||
| 
								 | 
							
								  KEY key2 (key2)
							 | 
						||
| 
								 | 
							
								);
							 | 
						||
| 
								 | 
							
								insert into t1 values ('','empt',2,2),
							 | 
						||
| 
								 | 
							
								  ('a','a--a',2,2),
							 | 
						||
| 
								 | 
							
								  ('bb','b--b',2,2),
							 | 
						||
| 
								 | 
							
								  ('ccc','c--c',2,2),
							 | 
						||
| 
								 | 
							
								  ('dddd','d--d',2,2);
							 | 
						||
| 
								 | 
							
								select * from t1 force index(key1, key2) where key1 < 3 or key2 < 3;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								drop table t1;
							 |