~stewart/drizzle/embedded-innodb-create-select-transaction-arrgh

« back to all changes in this revision

Viewing changes to mysql-test/include/index_merge2.inc

  • Committer: brian
  • Date: 2008-06-25 05:29:13 UTC
  • Revision ID: brian@localhost.localdomain-20080625052913-6upwo0jsrl4lnapl
clean slate

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# include/index_merge2.inc
 
2
#
 
3
# Index merge tests
 
4
#
 
5
# The variable
 
6
#     $engine_type       -- storage engine to be tested
 
7
# has to be set before sourcing this script.
 
8
#
 
9
# Note: The comments/expectations refer to InnoDB.
 
10
#       They might be not valid for other storage engines.
 
11
#
 
12
# Last update:
 
13
# 2006-08-02 ML test refactored
 
14
#               old name was t/index_merge_innodb.test
 
15
#               main code went into include/index_merge2.inc
 
16
#
 
17
 
 
18
--echo #---------------- Index merge test 2 -------------------------------------------
 
19
 
 
20
eval SET SESSION STORAGE_ENGINE = $engine_type;
 
21
 
 
22
--disable_warnings
 
23
drop table if exists t1,t2;
 
24
--enable_warnings
 
25
 
 
26
create table t1
 
27
(
 
28
  key1 int not null,
 
29
  key2 int not null,
 
30
 
 
31
  INDEX i1(key1),
 
32
  INDEX i2(key2)
 
33
);
 
34
 
 
35
--disable_query_log
 
36
let $1=200;
 
37
while ($1)
 
38
{
 
39
  eval insert into t1 values (200-$1, $1);
 
40
  dec $1;
 
41
}
 
42
--enable_query_log
 
43
 
 
44
# No primary key
 
45
explain select * from t1 where key1 < 5 or key2 > 197;
 
46
 
 
47
select * from t1 where key1 < 5 or key2 > 197;
 
48
 
 
49
explain select * from t1 where key1 < 3 or key2 > 195;
 
50
select * from t1 where key1 < 3 or key2 > 195;
 
51
 
 
52
# Primary key as case-sensitive string with \0s.
 
53
# also make primary key be longer then max. index length of MyISAM.
 
54
alter table t1 add str1 char (255) not null,
 
55
                add zeroval int not null default 0,
 
56
                add str2 char (255) not null,
 
57
                add str3 char (255) not null;
 
58
 
 
59
update t1 set str1='aaa', str2='bbb', str3=concat(key2, '-', key1 div 2, '_' ,if(key1 mod 2 = 0, 'a', 'A'));
 
60
 
 
61
alter table t1 add primary key (str1, zeroval, str2, str3);
 
62
 
 
63
explain select * from t1 where key1 < 5 or key2 > 197;
 
64
 
 
65
select * from t1 where key1 < 5 or key2 > 197;
 
66
 
 
67
explain select * from t1 where key1 < 3 or key2 > 195;
 
68
select * from t1 where key1 < 3 or key2 > 195;
 
69
 
 
70
# Test for BUG#5401
 
71
drop table t1;
 
72
create table t1 (
 
73
  pk    integer not null auto_increment primary key,
 
74
  key1  integer,
 
75
  key2  integer not null,
 
76
  filler char  (200),
 
77
  index (key1),
 
78
  index (key2)
 
79
);
 
80
show warnings;
 
81
--disable_query_log
 
82
let $1=30;
 
83
while ($1)
 
84
{
 
85
  eval insert into t1 (key1, key2, filler) values ($1/4, $1/8, 'filler-data');
 
86
  dec $1;
 
87
}
 
88
--enable_query_log
 
89
explain select pk from t1 where key1 = 1 and key2 = 1;
 
90
select pk from t1 where key2 = 1 and key1 = 1;
 
91
select pk from t1 ignore index(key1,key2) where key2 = 1 and key1 = 1;
 
92
 
 
93
# More tests for BUG#5401.
 
94
drop table t1;
 
95
create table t1 (
 
96
  pk int primary key auto_increment,
 
97
  key1a  int,
 
98
  key2a  int,
 
99
  key1b  int,
 
100
  key2b  int,
 
101
  dummy1 int,
 
102
  dummy2 int,
 
103
  dummy3 int,
 
104
  dummy4 int,
 
105
  key3a  int,
 
106
  key3b  int,
 
107
  filler1 char (200),
 
108
  index i1(key1a, key1b),
 
109
  index i2(key2a, key2b),
 
110
  index i3(key3a, key3b)
 
111
);
 
112
 
 
113
create table t2 (a int);
 
114
insert into t2 values (0),(1),(2),(3),(4),(NULL);
 
115
 
 
116
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
 
117
  select A.a, B.a, C.a, D.a, C.a, D.a from t2 A,t2 B,t2 C, t2 D;
 
118
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
 
119
  select key1a, key1b, key2a, key2b, key3a, key3b from t1;
 
120
insert into t1 (key1a, key1b, key2a, key2b, key3a, key3b)
 
121
  select key1a, key1b, key2a, key2b, key3a, key3b from t1;
 
122
analyze table t1;
 
123
select count(*) from t1;
 
124
 
 
125
explain select count(*) from t1 where
 
126
  key1a = 2 and key1b is null and  key2a = 2 and key2b is null;
 
127
 
 
128
select count(*) from t1 where
 
129
  key1a = 2 and key1b is null and key2a = 2 and key2b is null;
 
130
 
 
131
explain select count(*) from t1 where
 
132
  key1a = 2 and key1b is null and key3a = 2 and key3b is null;
 
133
 
 
134
select count(*) from t1 where
 
135
  key1a = 2 and key1b is null and key3a = 2 and key3b is null;
 
136
 
 
137
drop table t1,t2;
 
138
 
 
139
# Test for BUG#8441
 
140
create table t1 (
 
141
  id1 int,
 
142
  id2 date ,
 
143
  index idx2 (id1,id2),
 
144
  index idx1 (id2)
 
145
);
 
146
insert into t1 values(1,'20040101'), (2,'20040102');
 
147
select * from t1  where id1 = 1  and id2= '20040101';
 
148
drop table t1;
 
149
 
 
150
# BUG#21277: Index Merge/sort_union: wrong query results
 
151
create table t1
 
152
(
 
153
  key1 int not null, 
 
154
  key2 int not null default 0,
 
155
  key3 int not null default 0
 
156
);
 
157
 
 
158
insert into t1(key1) values (1),(2),(3),(4),(5),(6),(7),(8);
 
159
 
 
160
let $1=7;
 
161
set @d=8;
 
162
while ($1)
 
163
{
 
164
  eval insert into t1 (key1) select key1+@d from t1;
 
165
  eval set @d=@d*2;
 
166
  dec $1;
 
167
}
 
168
 
 
169
alter table t1 add index i2(key2);
 
170
alter table t1 add index i3(key3);
 
171
update t1 set key2=key1,key3=key1;
 
172
 
 
173
# to test the bug, the following must use "sort_union":
 
174
explain select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
 
175
select * from t1 where (key3 > 30 and key3<35) or (key2 >32 and key2 < 40);
 
176
drop table t1;