~drizzle-trunk/drizzle/development

1 by brian
clean slate
1
#
2
# Check for problems with delete
3
#
4
5
--disable_warnings
6
drop table if exists t1,t2,t3,t11,t12;
7
--enable_warnings
396 by Brian Aker
Cleanup tiny and small int.
8
CREATE TABLE t1 (a int, b int);
1 by brian
clean slate
9
INSERT INTO t1 VALUES (1,1);
10
INSERT LOW_PRIORITY INTO t1 VALUES (1,2);
11
INSERT INTO t1 VALUES (1,3);
12
DELETE from t1 where a=1 limit 1;
13
DELETE LOW_PRIORITY from t1 where a=1;
14
15
INSERT INTO t1 VALUES (1,1);
16
DELETE from t1;
17
LOCK TABLE t1 write;
18
INSERT INTO t1 VALUES (1,2);
19
DELETE from t1;
20
UNLOCK TABLES;
21
INSERT INTO t1 VALUES (1,2);
22
SET AUTOCOMMIT=0;
23
DELETE from t1;
24
SET AUTOCOMMIT=1;
25
drop table t1;
26
27
#
28
# Test of delete when the delete will cause a node to disappear and reappear
29
# (This assumes a block size of 1024)
30
#
31
32
create table t1 (
33
	a bigint not null,
34
	b bigint not null default 0,
35
	c bigint not null default 0,
36
	d bigint not null default 0,
37
	e bigint not null default 0,
38
	f bigint not null default 0,
39
	g bigint not null default 0,
40
	h bigint not null default 0,
41
	i bigint not null default 0,
42
	j bigint not null default 0,
43
	primary key (a,b,c,d,e,f,g,h,i,j));
44
insert into t1 (a) values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(26),(23);
45
delete from t1 where a=26;
46
drop table t1;
47
create table t1 (
48
	a bigint not null,
49
	b bigint not null default 0,
50
	c bigint not null default 0,
51
	d bigint not null default 0,
52
	e bigint not null default 0,
53
	f bigint not null default 0,
54
	g bigint not null default 0,
55
	h bigint not null default 0,
56
	i bigint not null default 0,
57
	j bigint not null default 0,
58
	primary key (a,b,c,d,e,f,g,h,i,j));
59
insert into t1 (a) values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(26),(23),(27);
60
delete from t1 where a=27;
61
drop table t1;
62
63
CREATE TABLE `t1` (
223 by Brian Aker
Cleanup int() work.
64
  `i` int NOT NULL default '0',
65
  `i2` int NOT NULL default '0',
1 by brian
clean slate
66
  PRIMARY KEY  (`i`)
67
);
68
-- error 1054
69
DELETE FROM t1 USING t1 WHERE post='1';
70
drop table t1;
71
72
#
73
# CHAR(0) bug - not actually DELETE bug, but anyway...
74
#
75
76
CREATE TABLE t1 (
77
  bool     char(0) default NULL,
78
  not_null varchar(20) binary NOT NULL default '',
79
  misc     integer not null,
80
  PRIMARY KEY  (not_null)
81
) ENGINE=MyISAM;
82
83
INSERT INTO t1 VALUES (NULL,'a',4), (NULL,'b',5), (NULL,'c',6), (NULL,'d',7);
84
85
select * from t1 where misc > 5 and bool is null;
86
delete   from t1 where misc > 5 and bool is null;
87
select * from t1 where misc > 5 and bool is null;
88
89
select count(*) from t1;
90
delete from t1 where 1 > 2;
91
select count(*) from t1;
92
delete from t1 where 3 > 2;
93
select count(*) from t1;
94
95
drop table t1;
96
#
97
# Bug #5733: Table handler error with self-join multi-table DELETE
98
#
99
100
create table t1 (a int not null auto_increment primary key, b char(32));
101
insert into t1 (b) values ('apple'), ('apple');
102
select * from t1;
103
delete t1 from t1, t1 as t2 where t1.b = t2.b and t1.a > t2.a;
104
select * from t1;
105
drop table t1;
106
107
#
108
# IGNORE option
109
#
110
create table t11 (a int NOT NULL, b int, primary key (a));
111
create table t12 (a int NOT NULL, b int, primary key (a));
112
create table t2 (a int NOT NULL, b int, primary key (a));
113
insert into t11 values (0, 10),(1, 11),(2, 12);
114
insert into t12 values (33, 10),(0, 11),(2, 12);
115
insert into t2 values (1, 21),(2, 12),(3, 23);
116
select * from t11;
496.1.2 by Paul McCullagh
Changes to .test files to run both PBXT and InnoDB
117
--sorted_result
1 by brian
clean slate
118
select * from t12;
119
select * from t2;
120
-- error 1242
121
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b <> (select b from t2 where t11.a < t2.a);
122
select * from t11;
496.1.2 by Paul McCullagh
Changes to .test files to run both PBXT and InnoDB
123
--sorted_result
1 by brian
clean slate
124
select * from t12;
496.1.2 by Paul McCullagh
Changes to .test files to run both PBXT and InnoDB
125
# PBXT: for some reason this returns 2 warnings instead of 1
1 by brian
clean slate
126
delete ignore t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b <> (select b from t2 where t11.a < t2.a);
127
select * from t11;
496.1.2 by Paul McCullagh
Changes to .test files to run both PBXT and InnoDB
128
--sorted_result
1 by brian
clean slate
129
select * from t12;
130
insert into t11 values (2, 12);
131
-- error 1242
132
delete from t11 where t11.b <> (select b from t2 where t11.a < t2.a);
133
select * from t11;
134
delete ignore from t11 where t11.b <> (select b from t2 where t11.a < t2.a);
135
select * from t11;
136
drop table t11, t12, t2;
137
138
#
139
# Bug #4198: deletion and KEYREAD
140
#
141
142
create table t1 (a int, b int, unique key (a), key (b));
143
insert into t1 values (3, 3), (7, 7);
144
delete t1 from t1 where a = 3;
145
check table t1;
146
select * from t1;
147
drop table t1;
148
149
#
150
# Bug #8392: delete with ORDER BY containing a direct reference to the table 
151
#
152
 
153
CREATE TABLE t1 ( a int PRIMARY KEY );
154
DELETE FROM t1 WHERE t1.a > 0 ORDER BY t1.a;
155
INSERT INTO t1 VALUES (0),(1),(2);
156
DELETE FROM t1 WHERE t1.a > 0 ORDER BY t1.a LIMIT 1;
157
SELECT * FROM t1;
158
DROP TABLE t1;
159
160
#
161
# Bug #21392: multi-table delete with alias table name fails with 
162
# 1003: Incorrect table name
163
#
164
165
create table t1 (a int);
166
delete `4.t1` from t1 as `4.t1` where `4.t1`.a = 5;
167
delete FROM `4.t1` USING t1 as `4.t1` where `4.t1`.a = 5;
168
drop table t1;
169
170
#
171
# Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and
172
#            non-restricting WHERE is present.
173
#
496.1.2 by Paul McCullagh
Changes to .test files to run both PBXT and InnoDB
174
# PBXT is different here. @a = 2 instead of 1. I think the
175
# reason is because an index is not used, as done with
176
# InnoDB. This may be due to lack of cluster index. If the
177
# delete below is based on a secondary index then the
178
# index is not used
1 by brian
clean slate
179
create table t1(f1 int primary key);
180
insert into t1 values (4),(3),(1),(2);
181
delete from t1 where (@a:= f1) order by f1 limit 1;
182
select @a;
183
drop table t1;
184
185
# BUG#30385 "Server crash when deleting with order by and limit"
186
CREATE TABLE t1 (
187
  `date` date ,
188
  `time` time ,
413.2.2 by Brian Aker
Removed UNSIGNED from parser.
189
  `seq` int NOT NULL auto_increment,
1 by brian
clean slate
190
  PRIMARY KEY  (`seq`),
191
  KEY `seq` (`seq`),
192
  KEY `time` (`time`),
193
  KEY `date` (`date`)
194
);
195
DELETE FROM t1 ORDER BY date ASC, time ASC LIMIT 1;
196
drop table t1;
197
198
--echo End of 4.1 tests
199
200
#
201
# Test of multi-delete where we are not scanning the first table
202
#
203
204
CREATE TABLE t1 (a int not null,b int not null);
205
CREATE TABLE t2 (a int not null, b int not null, primary key (a,b));
206
CREATE TABLE t3 (a int not null, b int not null, primary key (a,b));
207
insert into t1 values (1,1),(2,1),(1,3);
208
insert into t2 values (1,1),(2,2),(3,3);
209
insert into t3 values (1,1),(2,1),(1,3);
210
select * from t1,t2,t3 where t1.a=t2.a AND t2.b=t3.a and t1.b=t3.b;
211
explain select * from t1,t2,t3 where t1.a=t2.a AND t2.b=t3.a and t1.b=t3.b;
212
delete t2.*,t3.* from t1,t2,t3 where t1.a=t2.a AND t2.b=t3.a and t1.b=t3.b;
213
# This should be empty
214
select * from t3;
215
drop table t1,t2,t3;
216
217
#
218
# Bug #8143: deleting '0000-00-00' values using IS NULL
219
#
220
221
create table t1(a date not null);
222
insert into t1 values (0);
223
select * from t1 where a is null;
224
delete from t1 where a is null;
225
select count(*) from t1;
226
drop table t1;
227
228
#
229
# Bug #26186: delete order by, sometimes accept unknown column
230
#
231
CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1);
232
233
--error ER_BAD_FIELD_ERROR
234
DELETE FROM t1 ORDER BY x;
235
236
# even columns from a table not used in query (and not even existing)
237
--error ER_BAD_FIELD_ERROR
238
DELETE FROM t1 ORDER BY t2.x;
239
240
# subquery (as long as the subquery from is valid or DUAL)
241
--error ER_BAD_FIELD_ERROR
242
DELETE FROM t1 ORDER BY (SELECT x);
243
244
DROP TABLE t1;
245
246
#
247
# Bug #30234: Unexpected behavior using DELETE with AS and USING
248
# '
249
CREATE TABLE t1 (
250
  a INT
251
);
252
253
CREATE TABLE t2 (
254
  a INT
255
);
256
257
CREATE DATABASE db1;
258
CREATE TABLE db1.t1 (
259
  a INT
260
);
261
INSERT INTO db1.t1 (a) SELECT * FROM t1;
262
263
CREATE DATABASE db2;
264
CREATE TABLE db2.t1 (
265
  a INT
266
);
267
INSERT INTO db2.t1 (a) SELECT * FROM t2;
268
269
--error ER_PARSE_ERROR
270
DELETE FROM t1 alias USING t1, t2 alias WHERE t1.a = alias.a;
271
DELETE FROM alias USING t1, t2 alias WHERE t1.a = alias.a;
272
DELETE FROM t1, alias USING t1, t2 alias WHERE t1.a = alias.a;
273
--error ER_UNKNOWN_TABLE
274
DELETE FROM t1, t2 USING t1, t2 alias WHERE t1.a = alias.a;
275
--error ER_PARSE_ERROR
276
DELETE FROM db1.t1 alias USING db1.t1, db2.t1 alias WHERE db1.t1.a = alias.a;
277
DELETE FROM alias USING db1.t1, db2.t1 alias WHERE db1.t1.a = alias.a;
278
--error ER_UNKNOWN_TABLE
279
DELETE FROM db2.alias USING db1.t1, db2.t1 alias WHERE db1.t1.a = alias.a;
280
DELETE FROM t1 USING t1 WHERE a = 1;
281
SELECT * FROM t1;
282
--error ER_PARSE_ERROR
283
DELETE FROM t1 alias USING t1 alias WHERE a = 2;
284
SELECT * FROM t1;
285
286
DROP TABLE t1, t2;
287
DROP DATABASE db1;
288
DROP DATABASE db2;
289
290
--echo End of 5.0 tests
291
292
#
293
# Bug#27525: table not found when using multi-table-deletes with aliases over
294
#            several databas
295
# Bug#21148: MULTI-DELETE fails to resolve a table by alias if it's from a
296
#            different database
297
#
298
299
--disable_warnings
300
DROP DATABASE IF EXISTS db1;
301
DROP DATABASE IF EXISTS db2;
302
DROP DATABASE IF EXISTS db3;
303
DROP DATABASE IF EXISTS db4;
304
DROP TABLE IF EXISTS t1, t2;
305
--enable_warnings
306
USE test;
307
CREATE DATABASE db1;
308
CREATE DATABASE db2;
309
310
CREATE TABLE db1.t1 (a INT, b INT);
311
INSERT INTO db1.t1 VALUES (1,1),(2,2),(3,3);
312
CREATE TABLE db1.t2 AS SELECT * FROM db1.t1;
313
CREATE TABLE db2.t1 AS SELECT * FROM db1.t2;
314
CREATE TABLE db2.t2 AS SELECT * FROM db2.t1;
315
CREATE TABLE t1 AS SELECT * FROM db2.t2;
316
CREATE TABLE t2 AS SELECT * FROM t1;
317
318
#
319
# Testing without a selected database
320
#
321
322
CREATE DATABASE db3;
323
USE db3;
324
DROP DATABASE db3;
325
--error ER_NO_DB_ERROR
326
SELECT * FROM t1;
327
328
# Detect missing table references
329
330
--error ER_NO_DB_ERROR
331
DELETE a1,a2 FROM db1.t1, db2.t2;
332
--error ER_NO_DB_ERROR
333
DELETE a1,a2 FROM db1.t1, db2.t2;
334
--error ER_NO_DB_ERROR
335
DELETE a1,a2 FROM db1.t1 AS a1, db2.t2;
336
--error ER_NO_DB_ERROR
337
DELETE a1,a2 FROM db1.t1, db2.t2 AS a2;
338
--error ER_NO_DB_ERROR
339
DELETE a1,a2 FROM db3.t1 AS a1, db4.t2 AS a2;
340
--error ER_NO_DB_ERROR
341
DELETE a1,a2 FROM db3.t1 AS a1, db4.t2 AS a2;
342
343
--error ER_NO_DB_ERROR
344
DELETE FROM a1,a2 USING db1.t1, db2.t2;
345
--error ER_NO_DB_ERROR
346
DELETE FROM a1,a2 USING db1.t1, db2.t2;
347
--error ER_NO_DB_ERROR
348
DELETE FROM a1,a2 USING db1.t1 AS a1, db2.t2;
349
--error ER_NO_DB_ERROR
350
DELETE FROM a1,a2 USING db1.t1, db2.t2 AS a2;
351
--error ER_NO_DB_ERROR
352
DELETE FROM a1,a2 USING db3.t1 AS a1, db4.t2 AS a2;
353
--error ER_NO_DB_ERROR
354
DELETE FROM a1,a2 USING db3.t1 AS a1, db4.t2 AS a2;
355
356
# Ambiguous table references
357
358
--error ER_NO_DB_ERROR
359
DELETE a1 FROM db1.t1 AS a1, db2.t2 AS a1;
360
--error ER_NO_DB_ERROR
361
DELETE a1 FROM db1.a1, db2.t2 AS a1;
362
--error ER_NO_DB_ERROR
363
DELETE a1 FROM a1, db1.t1 AS a1;
364
--error ER_NO_DB_ERROR
365
DELETE t1 FROM db1.t1, db2.t1 AS a1;
366
--error ER_NO_DB_ERROR
367
DELETE t1 FROM db1.t1 AS a1, db2.t1 AS a2;
368
--error ER_NO_DB_ERROR
369
DELETE t1 FROM db1.t1, db2.t1;
370
371
# Test all again, now with a selected database
372
373
USE test;
374
375
# Detect missing table references
376
377
--error ER_UNKNOWN_TABLE
378
DELETE a1,a2 FROM db1.t1, db2.t2;
379
--error ER_UNKNOWN_TABLE
380
DELETE a1,a2 FROM db1.t1, db2.t2;
381
--error ER_UNKNOWN_TABLE
382
DELETE a1,a2 FROM db1.t1 AS a1, db2.t2;
383
--error ER_UNKNOWN_TABLE
384
DELETE a1,a2 FROM db1.t1, db2.t2 AS a2;
385
--error ER_NO_SUCH_TABLE
386
DELETE a1,a2 FROM db3.t1 AS a1, db4.t2 AS a2;
387
--error ER_NO_SUCH_TABLE
388
DELETE a1,a2 FROM db3.t1 AS a1, db4.t2 AS a2;
389
390
--error ER_UNKNOWN_TABLE
391
DELETE FROM a1,a2 USING db1.t1, db2.t2;
392
--error ER_UNKNOWN_TABLE
393
DELETE FROM a1,a2 USING db1.t1, db2.t2;
394
--error ER_UNKNOWN_TABLE
395
DELETE FROM a1,a2 USING db1.t1 AS a1, db2.t2;
396
--error ER_UNKNOWN_TABLE
397
DELETE FROM a1,a2 USING db1.t1, db2.t2 AS a2;
398
--error ER_NO_SUCH_TABLE
399
DELETE FROM a1,a2 USING db3.t1 AS a1, db4.t2 AS a2;
400
--error ER_NO_SUCH_TABLE
401
DELETE FROM a1,a2 USING db3.t1 AS a1, db4.t2 AS a2;
402
403
# Ambiguous table references
404
405
--error ER_NONUNIQ_TABLE
406
DELETE a1 FROM db1.t1 AS a1, db2.t2 AS a1;
407
--error ER_NO_SUCH_TABLE
408
DELETE a1 FROM db1.a1, db2.t2 AS a1;
409
--error ER_NONUNIQ_TABLE
410
DELETE a1 FROM a1, db1.t1 AS a1;
411
--error ER_UNKNOWN_TABLE
412
DELETE t1 FROM db1.t1, db2.t1 AS a1;
413
--error ER_UNKNOWN_TABLE
414
DELETE t1 FROM db1.t1 AS a1, db2.t1 AS a2;
415
--error ER_UNKNOWN_TABLE
416
DELETE t1 FROM db1.t1, db2.t1;
417
418
# Test multiple-table cross database deletes
419
420
DELETE t1 FROM db1.t2 AS t1, db2.t2 AS t2 WHERE t2.a = 1 AND t1.a = t2.a;
421
SELECT ROW_COUNT();
422
DELETE a1, a2 FROM db2.t1 AS a1, t2 AS a2 WHERE a1.a = 2 AND a2.a = 2;
423
SELECT ROW_COUNT();
424
425
DROP DATABASE db1;
426
DROP DATABASE db2;
427
DROP TABLE t1, t2;