2000-12-28 02:56:38 +01:00
|
|
|
#
|
|
|
|
# Check for problems with delete
|
|
|
|
#
|
|
|
|
|
2016-12-19 23:32:45 +01:00
|
|
|
call mtr.add_suppression("Sort aborted.*");
|
|
|
|
|
2003-01-06 00:48:59 +01:00
|
|
|
--disable_warnings
|
2005-05-30 19:48:40 +02:00
|
|
|
drop table if exists t1,t2,t3,t11,t12;
|
2003-01-06 00:48:59 +01:00
|
|
|
--enable_warnings
|
2000-12-28 02:56:38 +01:00
|
|
|
CREATE TABLE t1 (a tinyint(3), b tinyint(5));
|
|
|
|
INSERT INTO t1 VALUES (1,1);
|
|
|
|
INSERT LOW_PRIORITY INTO t1 VALUES (1,2);
|
|
|
|
INSERT INTO t1 VALUES (1,3);
|
|
|
|
DELETE from t1 where a=1 limit 1;
|
|
|
|
DELETE LOW_PRIORITY from t1 where a=1;
|
|
|
|
|
|
|
|
INSERT INTO t1 VALUES (1,1);
|
|
|
|
DELETE from t1;
|
|
|
|
LOCK TABLE t1 write;
|
|
|
|
INSERT INTO t1 VALUES (1,2);
|
|
|
|
DELETE from t1;
|
|
|
|
UNLOCK TABLES;
|
|
|
|
INSERT INTO t1 VALUES (1,2);
|
|
|
|
SET AUTOCOMMIT=0;
|
|
|
|
DELETE from t1;
|
|
|
|
SET AUTOCOMMIT=1;
|
|
|
|
drop table t1;
|
2000-12-21 10:58:02 +01:00
|
|
|
|
2000-12-28 02:56:38 +01:00
|
|
|
#
|
|
|
|
# Test of delete when the delete will cause a node to disappear and reappear
|
|
|
|
# (This assumes a block size of 1024)
|
|
|
|
#
|
2000-12-21 10:58:02 +01:00
|
|
|
|
2004-11-22 19:07:04 +01:00
|
|
|
create table t1 (
|
|
|
|
a bigint not null,
|
|
|
|
b bigint not null default 0,
|
|
|
|
c bigint not null default 0,
|
|
|
|
d bigint not null default 0,
|
|
|
|
e bigint not null default 0,
|
|
|
|
f bigint not null default 0,
|
|
|
|
g bigint not null default 0,
|
|
|
|
h bigint not null default 0,
|
|
|
|
i bigint not null default 0,
|
|
|
|
j bigint not null default 0,
|
|
|
|
primary key (a,b,c,d,e,f,g,h,i,j));
|
|
|
|
insert into t1 (a) values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(26),(23);
|
2000-12-28 02:56:38 +01:00
|
|
|
delete from t1 where a=26;
|
|
|
|
drop table t1;
|
2004-11-22 19:07:04 +01:00
|
|
|
create table t1 (
|
|
|
|
a bigint not null,
|
|
|
|
b bigint not null default 0,
|
|
|
|
c bigint not null default 0,
|
|
|
|
d bigint not null default 0,
|
|
|
|
e bigint not null default 0,
|
|
|
|
f bigint not null default 0,
|
|
|
|
g bigint not null default 0,
|
|
|
|
h bigint not null default 0,
|
|
|
|
i bigint not null default 0,
|
|
|
|
j bigint not null default 0,
|
|
|
|
primary key (a,b,c,d,e,f,g,h,i,j));
|
|
|
|
insert into t1 (a) values (2),(4),(6),(8),(10),(12),(14),(16),(18),(20),(22),(24),(26),(23),(27);
|
2000-12-28 02:56:38 +01:00
|
|
|
delete from t1 where a=27;
|
2000-12-21 10:58:02 +01:00
|
|
|
drop table t1;
|
2002-12-15 21:01:09 +01:00
|
|
|
|
2003-03-17 14:05:04 +01:00
|
|
|
CREATE TABLE `t1` (
|
2002-12-15 21:01:09 +01:00
|
|
|
`i` int(10) NOT NULL default '0',
|
|
|
|
`i2` int(10) NOT NULL default '0',
|
|
|
|
PRIMARY KEY (`i`)
|
2003-03-17 14:05:04 +01:00
|
|
|
);
|
2002-12-15 21:01:09 +01:00
|
|
|
-- error 1054
|
2003-03-17 14:05:04 +01:00
|
|
|
DELETE FROM t1 USING t1 WHERE post='1';
|
|
|
|
drop table t1;
|
2003-03-16 18:17:54 +01:00
|
|
|
|
2003-03-04 18:02:56 +01:00
|
|
|
#
|
|
|
|
# CHAR(0) bug - not actually DELETE bug, but anyway...
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
bool char(0) default NULL,
|
|
|
|
not_null varchar(20) binary NOT NULL default '',
|
|
|
|
misc integer not null,
|
|
|
|
PRIMARY KEY (not_null)
|
2003-12-10 05:31:42 +01:00
|
|
|
) ENGINE=MyISAM;
|
2003-03-04 18:02:56 +01:00
|
|
|
|
|
|
|
INSERT INTO t1 VALUES (NULL,'a',4), (NULL,'b',5), (NULL,'c',6), (NULL,'d',7);
|
|
|
|
|
|
|
|
select * from t1 where misc > 5 and bool is null;
|
|
|
|
delete from t1 where misc > 5 and bool is null;
|
|
|
|
select * from t1 where misc > 5 and bool is null;
|
|
|
|
|
2003-05-03 18:08:11 +02:00
|
|
|
select count(*) from t1;
|
|
|
|
delete from t1 where 1 > 2;
|
|
|
|
select count(*) from t1;
|
|
|
|
delete from t1 where 3 > 2;
|
|
|
|
select count(*) from t1;
|
|
|
|
|
2003-03-04 18:02:56 +01:00
|
|
|
drop table t1;
|
2004-10-01 13:23:54 +02:00
|
|
|
#
|
|
|
|
# Bug #5733: Table handler error with self-join multi-table DELETE
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1 (a int not null auto_increment primary key, b char(32));
|
|
|
|
insert into t1 (b) values ('apple'), ('apple');
|
|
|
|
select * from t1;
|
|
|
|
delete t1 from t1, t1 as t2 where t1.b = t2.b and t1.a > t2.a;
|
|
|
|
select * from t1;
|
2003-03-04 18:02:56 +01:00
|
|
|
drop table t1;
|
2003-11-17 21:45:07 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# IGNORE option
|
|
|
|
#
|
|
|
|
create table t11 (a int NOT NULL, b int, primary key (a));
|
|
|
|
create table t12 (a int NOT NULL, b int, primary key (a));
|
|
|
|
create table t2 (a int NOT NULL, b int, primary key (a));
|
|
|
|
insert into t11 values (0, 10),(1, 11),(2, 12);
|
|
|
|
insert into t12 values (33, 10),(0, 11),(2, 12);
|
|
|
|
insert into t2 values (1, 21),(2, 12),(3, 23);
|
|
|
|
select * from t11;
|
|
|
|
select * from t12;
|
|
|
|
select * from t2;
|
After merge fixes
Added more DBUG statements
Ensure that we are comparing end space with BINARY strings
Use 'any_db' instead of '' to mean any database. (For HANDLER command)
Only strip ' ' when comparing CHAR, not other space-like characters (like \t)
BitKeeper/deleted/.del-ctype_tis620.result-old~3578ceb0b8284685:
Delete: mysql-test/r/ctype_tis620.result-old
BitKeeper/deleted/.del-ctype_tis620.test-old~ffb1bbd2935d1aba:
Delete: mysql-test/t/ctype_tis620.test-old
client/mysqlbinlog.cc:
Added DBUG statements
Added call of my_end() to free all used memory on exit
heap/hp_info.c:
After merge fixes
heap/hp_open.c:
After merge fixes
include/heap.h:
After merge fixes
include/m_ctype.h:
Use pchar instead of 'int' for character parameters.
Added 'my_binary_compare()'
include/m_string.h:
Fixed wrong define
innobase/ibuf/ibuf0ibuf.c:
After merge fixes
innobase/srv/srv0start.c:
After merge fixes
mysql-test/r/alter_table.result:
Fixed results after merge
mysql-test/r/auto_increment.result:
Fixed results after merge
mysql-test/r/bdb.result:
Fixed results after merge
mysql-test/r/binary.result:
Fixed results after merge
mysql-test/r/create.result:
Fixed results after merge
mysql-test/r/ctype_mb.result:
Fixed results after merge
mysql-test/r/ctype_tis620.result:
Fixed results after merge
mysql-test/r/ctype_utf8.result:
Fixed results after merge
mysql-test/r/delete.result:
Fixed results after merge
mysql-test/r/func_compress.result:
Fixed results after merge
mysql-test/r/func_gconcat.result:
Fixed results after merge
mysql-test/r/func_group.result:
Fixed results after merge
mysql-test/r/func_str.result:
Fixed results after merge
mysql-test/r/innodb.result:
Fixed results after merge
mysql-test/r/insert.result:
Fixed results after merge
mysql-test/r/insert_select.result:
Fixed results after merge
mysql-test/r/key.result:
Fixed results after merge
mysql-test/r/loaddata.result:
Fixed results after merge
mysql-test/r/lock.result:
Fixed results after merge
mysql-test/r/myisam.result:
Fixed results after merge
mysql-test/r/null.result:
Fixed results after merge
mysql-test/r/null_key.result:
Fixed results after merge
mysql-test/r/order_by.result:
Fixed results after merge
mysql-test/r/query_cache.result:
Fixed results after merge
mysql-test/r/range.result:
Fixed results after merge
mysql-test/r/rpl_multi_delete.result:
Fixed results after merge
mysql-test/r/rpl_until.result:
Fixed results after merge
mysql-test/r/subselect.result:
Fixed results after merge
mysql-test/r/subselect_innodb.result:
Fixed results after merge
mysql-test/r/type_blob.result:
Fixed results after merge
mysql-test/r/type_datetime.result:
Fixed results after merge
mysql-test/r/type_decimal.result:
Fixed results after merge
mysql-test/r/type_enum.result:
Fixed results after merge
mysql-test/r/type_float.result:
Fixed results after merge
mysql-test/r/type_ranges.result:
Fixed results after merge
mysql-test/r/type_time.result:
Fixed results after merge
mysql-test/r/type_timestamp.result:
Fixed results after merge
mysql-test/r/type_uint.result:
Fixed results after merge
mysql-test/r/type_year.result:
Fixed results after merge
mysql-test/r/variables.result:
Fixed results after merge
mysql-test/r/warnings.result:
Fixed results after merge
mysql-test/t/case.test:
Fixed shifted error messages
mysql-test/t/create.test:
Fixed shifted error messages
mysql-test/t/ctype_collate.test:
Fixed shifted error messages
mysql-test/t/ctype_tis620.test:
Merge with 4.0 ctype_tis620 test
mysql-test/t/delete.test:
Fixed shifted error messages
mysql-test/t/derived.test:
Fixed shifted error messages
mysql-test/t/fulltext.test:
Fixed shifted error messages
mysql-test/t/func_in.test:
Fixed shifted error messages
mysql-test/t/func_str.test:
Fixed shifted error messages
mysql-test/t/func_test.test:
Fixed shifted error messages
mysql-test/t/grant.test:
Fixed shifted error messages
mysql-test/t/innodb.test:
Change to 4.1 syntax
mysql-test/t/key_cache.test:
Fixed shifted error messages
mysql-test/t/myisam.test:
New test of blob and end space
mysql-test/t/row.test:
Fixed shifted error messages
mysql-test/t/rpl_until.test:
Fixed shifted error messages
mysql-test/t/subselect.test:
Fixed shifted error messages
mysql-test/t/subselect_innodb.test:
Fix test to take into account foreign key constraints
mysql-test/t/union.test:
Fixed shifted error messages
mysql-test/t/user_var.test:
Fixed shifted error messages
mysql-test/t/variables.test:
Fixed shifted error messages
mysys/my_handler.c:
Merge with 4.0 code
sql/ha_heap.cc:
After merge fixes
sql/handler.cc:
After merge fixes
sql/item.cc:
After merge fixes
sql/item_cmpfunc.cc:
Ensure that we are comparing end space with BINARY strings
sql/item_cmpfunc.h:
Ensure that we are comparing end space with BINARY strings
sql/log_event.cc:
More DBUG statements
Ensure that we use all options to LOAD DATA in replication
sql/opt_range.cc:
After merge fixes
sql/sql_db.cc:
After merge fixes
sql/sql_handler.cc:
After merge fixes
Use 'any_db' instead of '' to mean 'no database comparison'
sql/sql_parse.cc:
After merge fixes
sql/sql_select.cc:
After merge fixes
Added function comment for setup_group()
sql/sql_string.cc:
Added stringcmp() for binary comparison.
Added function comments for sortcmp() and stringcmp()
sql/sql_string.h:
Added stringcmp()
sql/sql_table.cc:
After merge fixes
sql/sql_update.cc:
After merge fixes
sql/sql_yacc.yy:
Use 'any_db' instead of '' to mean any database. Using "" causes a 'wrong db name' error.
strings/ctype-big5.c:
Strip only end space, not other space characters.
strings/ctype-bin.c:
Removed some not needed functions.
Added function comments
Don't remove end space in comparisons
Change my_wildcmp_bin() to be 'identical' with other similar code
strings/ctype-czech.c:
Strip only end space, not other space characters.
strings/ctype-gbk.c:
Strip only end space, not other space characters.
strings/ctype-latin1.c:
Strip only end space, not other space characters.
strings/ctype-mb.c:
Strip only end space, not other space characters.
strings/ctype-simple.c:
Strip only end space, not other space characters.
strings/ctype-sjis.c:
Strip only end space, not other space characters.
strings/ctype-tis620.c:
Added usage of my_instr_simple. This needs to be cleaned up!
strings/ctype-utf8.c:
Strip only end space, not other space characters.
strings/ctype-win1250ch.c:
Strip only end space, not other space characters.
Fixed indentation
strings/strto.c:
Code cleanup
2004-02-16 09:03:25 +01:00
|
|
|
-- error 1242
|
2003-11-17 21:45:07 +01:00
|
|
|
delete t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b <> (select b from t2 where t11.a < t2.a);
|
|
|
|
select * from t11;
|
|
|
|
select * from t12;
|
|
|
|
delete ignore t11.*, t12.* from t11,t12 where t11.a = t12.a and t11.b <> (select b from t2 where t11.a < t2.a);
|
|
|
|
select * from t11;
|
|
|
|
select * from t12;
|
|
|
|
insert into t11 values (2, 12);
|
After merge fixes
Added more DBUG statements
Ensure that we are comparing end space with BINARY strings
Use 'any_db' instead of '' to mean any database. (For HANDLER command)
Only strip ' ' when comparing CHAR, not other space-like characters (like \t)
BitKeeper/deleted/.del-ctype_tis620.result-old~3578ceb0b8284685:
Delete: mysql-test/r/ctype_tis620.result-old
BitKeeper/deleted/.del-ctype_tis620.test-old~ffb1bbd2935d1aba:
Delete: mysql-test/t/ctype_tis620.test-old
client/mysqlbinlog.cc:
Added DBUG statements
Added call of my_end() to free all used memory on exit
heap/hp_info.c:
After merge fixes
heap/hp_open.c:
After merge fixes
include/heap.h:
After merge fixes
include/m_ctype.h:
Use pchar instead of 'int' for character parameters.
Added 'my_binary_compare()'
include/m_string.h:
Fixed wrong define
innobase/ibuf/ibuf0ibuf.c:
After merge fixes
innobase/srv/srv0start.c:
After merge fixes
mysql-test/r/alter_table.result:
Fixed results after merge
mysql-test/r/auto_increment.result:
Fixed results after merge
mysql-test/r/bdb.result:
Fixed results after merge
mysql-test/r/binary.result:
Fixed results after merge
mysql-test/r/create.result:
Fixed results after merge
mysql-test/r/ctype_mb.result:
Fixed results after merge
mysql-test/r/ctype_tis620.result:
Fixed results after merge
mysql-test/r/ctype_utf8.result:
Fixed results after merge
mysql-test/r/delete.result:
Fixed results after merge
mysql-test/r/func_compress.result:
Fixed results after merge
mysql-test/r/func_gconcat.result:
Fixed results after merge
mysql-test/r/func_group.result:
Fixed results after merge
mysql-test/r/func_str.result:
Fixed results after merge
mysql-test/r/innodb.result:
Fixed results after merge
mysql-test/r/insert.result:
Fixed results after merge
mysql-test/r/insert_select.result:
Fixed results after merge
mysql-test/r/key.result:
Fixed results after merge
mysql-test/r/loaddata.result:
Fixed results after merge
mysql-test/r/lock.result:
Fixed results after merge
mysql-test/r/myisam.result:
Fixed results after merge
mysql-test/r/null.result:
Fixed results after merge
mysql-test/r/null_key.result:
Fixed results after merge
mysql-test/r/order_by.result:
Fixed results after merge
mysql-test/r/query_cache.result:
Fixed results after merge
mysql-test/r/range.result:
Fixed results after merge
mysql-test/r/rpl_multi_delete.result:
Fixed results after merge
mysql-test/r/rpl_until.result:
Fixed results after merge
mysql-test/r/subselect.result:
Fixed results after merge
mysql-test/r/subselect_innodb.result:
Fixed results after merge
mysql-test/r/type_blob.result:
Fixed results after merge
mysql-test/r/type_datetime.result:
Fixed results after merge
mysql-test/r/type_decimal.result:
Fixed results after merge
mysql-test/r/type_enum.result:
Fixed results after merge
mysql-test/r/type_float.result:
Fixed results after merge
mysql-test/r/type_ranges.result:
Fixed results after merge
mysql-test/r/type_time.result:
Fixed results after merge
mysql-test/r/type_timestamp.result:
Fixed results after merge
mysql-test/r/type_uint.result:
Fixed results after merge
mysql-test/r/type_year.result:
Fixed results after merge
mysql-test/r/variables.result:
Fixed results after merge
mysql-test/r/warnings.result:
Fixed results after merge
mysql-test/t/case.test:
Fixed shifted error messages
mysql-test/t/create.test:
Fixed shifted error messages
mysql-test/t/ctype_collate.test:
Fixed shifted error messages
mysql-test/t/ctype_tis620.test:
Merge with 4.0 ctype_tis620 test
mysql-test/t/delete.test:
Fixed shifted error messages
mysql-test/t/derived.test:
Fixed shifted error messages
mysql-test/t/fulltext.test:
Fixed shifted error messages
mysql-test/t/func_in.test:
Fixed shifted error messages
mysql-test/t/func_str.test:
Fixed shifted error messages
mysql-test/t/func_test.test:
Fixed shifted error messages
mysql-test/t/grant.test:
Fixed shifted error messages
mysql-test/t/innodb.test:
Change to 4.1 syntax
mysql-test/t/key_cache.test:
Fixed shifted error messages
mysql-test/t/myisam.test:
New test of blob and end space
mysql-test/t/row.test:
Fixed shifted error messages
mysql-test/t/rpl_until.test:
Fixed shifted error messages
mysql-test/t/subselect.test:
Fixed shifted error messages
mysql-test/t/subselect_innodb.test:
Fix test to take into account foreign key constraints
mysql-test/t/union.test:
Fixed shifted error messages
mysql-test/t/user_var.test:
Fixed shifted error messages
mysql-test/t/variables.test:
Fixed shifted error messages
mysys/my_handler.c:
Merge with 4.0 code
sql/ha_heap.cc:
After merge fixes
sql/handler.cc:
After merge fixes
sql/item.cc:
After merge fixes
sql/item_cmpfunc.cc:
Ensure that we are comparing end space with BINARY strings
sql/item_cmpfunc.h:
Ensure that we are comparing end space with BINARY strings
sql/log_event.cc:
More DBUG statements
Ensure that we use all options to LOAD DATA in replication
sql/opt_range.cc:
After merge fixes
sql/sql_db.cc:
After merge fixes
sql/sql_handler.cc:
After merge fixes
Use 'any_db' instead of '' to mean 'no database comparison'
sql/sql_parse.cc:
After merge fixes
sql/sql_select.cc:
After merge fixes
Added function comment for setup_group()
sql/sql_string.cc:
Added stringcmp() for binary comparison.
Added function comments for sortcmp() and stringcmp()
sql/sql_string.h:
Added stringcmp()
sql/sql_table.cc:
After merge fixes
sql/sql_update.cc:
After merge fixes
sql/sql_yacc.yy:
Use 'any_db' instead of '' to mean any database. Using "" causes a 'wrong db name' error.
strings/ctype-big5.c:
Strip only end space, not other space characters.
strings/ctype-bin.c:
Removed some not needed functions.
Added function comments
Don't remove end space in comparisons
Change my_wildcmp_bin() to be 'identical' with other similar code
strings/ctype-czech.c:
Strip only end space, not other space characters.
strings/ctype-gbk.c:
Strip only end space, not other space characters.
strings/ctype-latin1.c:
Strip only end space, not other space characters.
strings/ctype-mb.c:
Strip only end space, not other space characters.
strings/ctype-simple.c:
Strip only end space, not other space characters.
strings/ctype-sjis.c:
Strip only end space, not other space characters.
strings/ctype-tis620.c:
Added usage of my_instr_simple. This needs to be cleaned up!
strings/ctype-utf8.c:
Strip only end space, not other space characters.
strings/ctype-win1250ch.c:
Strip only end space, not other space characters.
Fixed indentation
strings/strto.c:
Code cleanup
2004-02-16 09:03:25 +01:00
|
|
|
-- error 1242
|
2003-11-17 21:45:07 +01:00
|
|
|
delete from t11 where t11.b <> (select b from t2 where t11.a < t2.a);
|
|
|
|
select * from t11;
|
|
|
|
delete ignore from t11 where t11.b <> (select b from t2 where t11.a < t2.a);
|
|
|
|
select * from t11;
|
|
|
|
drop table t11, t12, t2;
|
2004-06-21 12:17:07 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bug #4198: deletion and KEYREAD
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1 (a int, b int, unique key (a), key (b));
|
|
|
|
insert into t1 values (3, 3), (7, 7);
|
|
|
|
delete t1 from t1 where a = 3;
|
|
|
|
check table t1;
|
|
|
|
select * from t1;
|
|
|
|
drop table t1;
|
2005-02-16 06:03:17 +01:00
|
|
|
|
2005-02-16 03:45:42 +01:00
|
|
|
#
|
|
|
|
# Bug #8392: delete with ORDER BY containing a direct reference to the table
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE TABLE t1 ( a int PRIMARY KEY );
|
|
|
|
DELETE FROM t1 WHERE t1.a > 0 ORDER BY t1.a;
|
|
|
|
INSERT INTO t1 VALUES (0),(1),(2);
|
|
|
|
DELETE FROM t1 WHERE t1.a > 0 ORDER BY t1.a LIMIT 1;
|
|
|
|
SELECT * FROM t1;
|
|
|
|
DROP TABLE t1;
|
2005-05-30 19:48:40 +02:00
|
|
|
|
2006-09-04 17:40:30 +02:00
|
|
|
#
|
|
|
|
# Bug #21392: multi-table delete with alias table name fails with
|
|
|
|
# 1003: Incorrect table name
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1 (a int);
|
|
|
|
delete `4.t1` from t1 as `4.t1` where `4.t1`.a = 5;
|
|
|
|
delete FROM `4.t1` USING t1 as `4.t1` where `4.t1`.a = 5;
|
|
|
|
drop table t1;
|
|
|
|
|
2007-01-11 14:05:03 +01:00
|
|
|
#
|
|
|
|
# Bug#17711: DELETE doesn't use index when ORDER BY, LIMIT and
|
|
|
|
# non-restricting WHERE is present.
|
|
|
|
#
|
|
|
|
create table t1(f1 int primary key);
|
|
|
|
insert into t1 values (4),(3),(1),(2);
|
|
|
|
delete from t1 where (@a:= f1) order by f1 limit 1;
|
|
|
|
select @a;
|
|
|
|
drop table t1;
|
|
|
|
|
2007-09-10 14:26:51 +02:00
|
|
|
# BUG#30385 "Server crash when deleting with order by and limit"
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
`date` date ,
|
|
|
|
`time` time ,
|
|
|
|
`seq` int(10) unsigned NOT NULL auto_increment,
|
|
|
|
PRIMARY KEY (`seq`),
|
|
|
|
KEY `seq` (`seq`),
|
|
|
|
KEY `time` (`time`),
|
|
|
|
KEY `date` (`date`)
|
|
|
|
);
|
|
|
|
DELETE FROM t1 ORDER BY date ASC, time ASC LIMIT 1;
|
|
|
|
drop table t1;
|
|
|
|
|
2006-10-27 15:08:50 +02:00
|
|
|
--echo End of 4.1 tests
|
2005-07-28 16:09:54 +02:00
|
|
|
|
2005-05-30 19:48:40 +02:00
|
|
|
#
|
|
|
|
# Test of multi-delete where we are not scanning the first table
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE TABLE t1 (a int not null,b int not null);
|
|
|
|
CREATE TABLE t2 (a int not null, b int not null, primary key (a,b));
|
|
|
|
CREATE TABLE t3 (a int not null, b int not null, primary key (a,b));
|
|
|
|
insert into t1 values (1,1),(2,1),(1,3);
|
|
|
|
insert into t2 values (1,1),(2,2),(3,3);
|
|
|
|
insert into t3 values (1,1),(2,1),(1,3);
|
|
|
|
select * from t1,t2,t3 where t1.a=t2.a AND t2.b=t3.a and t1.b=t3.b;
|
|
|
|
explain select * from t1,t2,t3 where t1.a=t2.a AND t2.b=t3.a and t1.b=t3.b;
|
|
|
|
delete t2.*,t3.* from t1,t2,t3 where t1.a=t2.a AND t2.b=t3.a and t1.b=t3.b;
|
|
|
|
# This should be empty
|
|
|
|
select * from t3;
|
|
|
|
drop table t1,t2,t3;
|
2006-07-23 12:25:30 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bug #8143: deleting '0000-00-00' values using IS NULL
|
|
|
|
#
|
|
|
|
|
|
|
|
create table t1(a date not null);
|
|
|
|
insert into t1 values (0);
|
|
|
|
select * from t1 where a is null;
|
|
|
|
delete from t1 where a is null;
|
|
|
|
select count(*) from t1;
|
|
|
|
drop table t1;
|
2007-02-23 17:49:41 +01:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bug #26186: delete order by, sometimes accept unknown column
|
|
|
|
#
|
|
|
|
CREATE TABLE t1 (a INT); INSERT INTO t1 VALUES (1);
|
|
|
|
|
|
|
|
--error ER_BAD_FIELD_ERROR
|
|
|
|
DELETE FROM t1 ORDER BY x;
|
|
|
|
|
|
|
|
# even columns from a table not used in query (and not even existing)
|
|
|
|
--error ER_BAD_FIELD_ERROR
|
|
|
|
DELETE FROM t1 ORDER BY t2.x;
|
|
|
|
|
|
|
|
# subquery (as long as the subquery from is valid or DUAL)
|
|
|
|
--error ER_BAD_FIELD_ERROR
|
|
|
|
DELETE FROM t1 ORDER BY (SELECT x);
|
|
|
|
|
|
|
|
DROP TABLE t1;
|
2007-09-03 11:55:35 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bug #30234: Unexpected behavior using DELETE with AS and USING
|
|
|
|
# '
|
|
|
|
CREATE TABLE t1 (
|
|
|
|
a INT
|
|
|
|
);
|
|
|
|
|
|
|
|
CREATE TABLE t2 (
|
|
|
|
a INT
|
|
|
|
);
|
|
|
|
|
|
|
|
CREATE DATABASE db1;
|
|
|
|
CREATE TABLE db1.t1 (
|
|
|
|
a INT
|
|
|
|
);
|
|
|
|
INSERT INTO db1.t1 (a) SELECT * FROM t1;
|
|
|
|
|
|
|
|
CREATE DATABASE db2;
|
|
|
|
CREATE TABLE db2.t1 (
|
|
|
|
a INT
|
|
|
|
);
|
|
|
|
INSERT INTO db2.t1 (a) SELECT * FROM t2;
|
|
|
|
|
|
|
|
--error ER_PARSE_ERROR
|
|
|
|
DELETE FROM t1 alias USING t1, t2 alias WHERE t1.a = alias.a;
|
|
|
|
DELETE FROM alias USING t1, t2 alias WHERE t1.a = alias.a;
|
|
|
|
DELETE FROM t1, alias USING t1, t2 alias WHERE t1.a = alias.a;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE FROM t1, t2 USING t1, t2 alias WHERE t1.a = alias.a;
|
|
|
|
--error ER_PARSE_ERROR
|
|
|
|
DELETE FROM db1.t1 alias USING db1.t1, db2.t1 alias WHERE db1.t1.a = alias.a;
|
|
|
|
DELETE FROM alias USING db1.t1, db2.t1 alias WHERE db1.t1.a = alias.a;
|
Backport of Bug#27525 to mysql-next-mr
------------------------------------------------------------
revno: 2572.2.1
revision-id: sp1r-davi@mysql.com/endora.local-20080227225948-16317
parent: sp1r-anozdrin/alik@quad.-20080226165712-10409
committer: davi@mysql.com/endora.local
timestamp: Wed 2008-02-27 19:59:48 -0300
message:
Bug#27525 table not found when using multi-table-deletes with aliases over several databas
Bug#30234 Unexpected behavior using DELETE with AS and USING
The multi-delete statement has a documented limitation that
cross-database multiple-table deletes using aliases are not
supported because it fails to find the tables by alias if it
belongs to a different database. The problem is that when
building the list of tables to delete from, if a database
name is not specified (maybe an alias) it defaults to the
name of the current selected database, making impossible to
to properly resolve tables by alias later. Another problem
is a inconsistency of the multiple table delete syntax that
permits ambiguities in a delete statement (aliases that refer
to multiple different tables or vice-versa).
The first step for a solution and proper implementation of
the cross-databse multiple table delete is to get rid of any
ambiguities in a multiple table statement. Currently, the parser
is accepting multiple table delete statements that have no obvious
meaning, such as:
DELETE a1 FROM db1.t1 AS a1, db2.t2 AS a1;
DELETE a1 AS a1 FROM db1.t1 AS a1, db2.t2 AS a1;
The solution is to resolve the left part of a delete statement
using the right part, if the a table on right has an alias,
it must be referenced in the left using the given alias. Also,
each table on the left side must match unambiguously only one
table in the right side.
mysql-test/r/delete.result:
Add test case result for Bug#27525 and Bug#21148
mysql-test/r/derived.result:
Update error.
mysql-test/suite/rpl/r/rpl_multi_delete2.result:
Update syntax.
mysql-test/suite/rpl/t/rpl_multi_delete2.test:
Update syntax.
mysql-test/t/delete.test:
Add test case for Bug#27525 and Bug#21148
mysql-test/t/derived.test:
Update statement error, alias is properly resolved now.
sql/sql_parse.cc:
Implement new algorithm for the resolution of alias in
a multiple table delete statement.
sql/sql_yacc.yy:
Rework multi-delete parser rules to not accept table alias
for the table source list.
sql/table.h:
Add flag to signal that the table has a alias set or
that fully qualified table name was given.
2009-11-10 19:48:46 +01:00
|
|
|
--error ER_UNKNOWN_TABLE
|
2007-09-03 11:55:35 +02:00
|
|
|
DELETE FROM db2.alias USING db1.t1, db2.t1 alias WHERE db1.t1.a = alias.a;
|
|
|
|
DELETE FROM t1 USING t1 WHERE a = 1;
|
|
|
|
SELECT * FROM t1;
|
|
|
|
--error ER_PARSE_ERROR
|
|
|
|
DELETE FROM t1 alias USING t1 alias WHERE a = 2;
|
|
|
|
SELECT * FROM t1;
|
|
|
|
|
|
|
|
DROP TABLE t1, t2;
|
|
|
|
DROP DATABASE db1;
|
|
|
|
DROP DATABASE db2;
|
2007-10-22 14:10:08 +02:00
|
|
|
|
|
|
|
#
|
|
|
|
# Bug 31742: delete from ... order by function call that causes an error,
|
|
|
|
# asserts server
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE FUNCTION f1() RETURNS INT RETURN 1;
|
|
|
|
CREATE TABLE t1 (a INT);
|
|
|
|
INSERT INTO t1 VALUES (0);
|
|
|
|
--error 1318
|
|
|
|
DELETE FROM t1 ORDER BY (f1(10)) LIMIT 1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
DROP FUNCTION f1;
|
|
|
|
|
2010-02-25 15:57:15 +01:00
|
|
|
|
|
|
|
--echo #
|
|
|
|
--echo # Bug #49552 : sql_buffer_result cause crash + not found records
|
|
|
|
--echo # in multitable delete/subquery
|
|
|
|
--echo #
|
|
|
|
|
|
|
|
CREATE TABLE t1(a INT);
|
|
|
|
INSERT INTO t1 VALUES (1),(2),(3);
|
|
|
|
SET SESSION SQL_BUFFER_RESULT=1;
|
|
|
|
DELETE t1 FROM (SELECT SUM(a) a FROM t1) x,t1;
|
|
|
|
|
|
|
|
SET SESSION SQL_BUFFER_RESULT=DEFAULT;
|
|
|
|
SELECT * FROM t1;
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
2007-10-22 14:10:08 +02:00
|
|
|
--echo End of 5.0 tests
|
2009-09-28 12:48:52 +02:00
|
|
|
|
Backport of Bug#27525 to mysql-next-mr
------------------------------------------------------------
revno: 2572.2.1
revision-id: sp1r-davi@mysql.com/endora.local-20080227225948-16317
parent: sp1r-anozdrin/alik@quad.-20080226165712-10409
committer: davi@mysql.com/endora.local
timestamp: Wed 2008-02-27 19:59:48 -0300
message:
Bug#27525 table not found when using multi-table-deletes with aliases over several databas
Bug#30234 Unexpected behavior using DELETE with AS and USING
The multi-delete statement has a documented limitation that
cross-database multiple-table deletes using aliases are not
supported because it fails to find the tables by alias if it
belongs to a different database. The problem is that when
building the list of tables to delete from, if a database
name is not specified (maybe an alias) it defaults to the
name of the current selected database, making impossible to
to properly resolve tables by alias later. Another problem
is a inconsistency of the multiple table delete syntax that
permits ambiguities in a delete statement (aliases that refer
to multiple different tables or vice-versa).
The first step for a solution and proper implementation of
the cross-databse multiple table delete is to get rid of any
ambiguities in a multiple table statement. Currently, the parser
is accepting multiple table delete statements that have no obvious
meaning, such as:
DELETE a1 FROM db1.t1 AS a1, db2.t2 AS a1;
DELETE a1 AS a1 FROM db1.t1 AS a1, db2.t2 AS a1;
The solution is to resolve the left part of a delete statement
using the right part, if the a table on right has an alias,
it must be referenced in the left using the given alias. Also,
each table on the left side must match unambiguously only one
table in the right side.
mysql-test/r/delete.result:
Add test case result for Bug#27525 and Bug#21148
mysql-test/r/derived.result:
Update error.
mysql-test/suite/rpl/r/rpl_multi_delete2.result:
Update syntax.
mysql-test/suite/rpl/t/rpl_multi_delete2.test:
Update syntax.
mysql-test/t/delete.test:
Add test case for Bug#27525 and Bug#21148
mysql-test/t/derived.test:
Update statement error, alias is properly resolved now.
sql/sql_parse.cc:
Implement new algorithm for the resolution of alias in
a multiple table delete statement.
sql/sql_yacc.yy:
Rework multi-delete parser rules to not accept table alias
for the table source list.
sql/table.h:
Add flag to signal that the table has a alias set or
that fully qualified table name was given.
2009-11-10 19:48:46 +01:00
|
|
|
#
|
|
|
|
# Bug#27525: table not found when using multi-table-deletes with aliases over
|
|
|
|
# several databas
|
|
|
|
# Bug#21148: MULTI-DELETE fails to resolve a table by alias if it's from a
|
|
|
|
# different database
|
|
|
|
#
|
|
|
|
|
|
|
|
--disable_warnings
|
|
|
|
DROP DATABASE IF EXISTS db1;
|
|
|
|
DROP DATABASE IF EXISTS db2;
|
|
|
|
DROP DATABASE IF EXISTS db3;
|
|
|
|
DROP DATABASE IF EXISTS db4;
|
|
|
|
DROP TABLE IF EXISTS t1, t2;
|
|
|
|
DROP PROCEDURE IF EXISTS count;
|
|
|
|
--enable_warnings
|
|
|
|
USE test;
|
|
|
|
CREATE DATABASE db1;
|
|
|
|
CREATE DATABASE db2;
|
|
|
|
|
|
|
|
CREATE TABLE db1.t1 (a INT, b INT);
|
|
|
|
INSERT INTO db1.t1 VALUES (1,1),(2,2),(3,3);
|
|
|
|
CREATE TABLE db1.t2 AS SELECT * FROM db1.t1;
|
|
|
|
CREATE TABLE db2.t1 AS SELECT * FROM db1.t2;
|
|
|
|
CREATE TABLE db2.t2 AS SELECT * FROM db2.t1;
|
|
|
|
CREATE TABLE t1 AS SELECT * FROM db2.t2;
|
|
|
|
CREATE TABLE t2 AS SELECT * FROM t1;
|
|
|
|
|
|
|
|
delimiter |;
|
|
|
|
CREATE PROCEDURE count_rows()
|
|
|
|
BEGIN
|
|
|
|
SELECT COUNT(*) AS "COUNT(db1.t1)" FROM db1.t1;
|
|
|
|
SELECT COUNT(*) AS "COUNT(db1.t2)" FROM db1.t2;
|
|
|
|
SELECT COUNT(*) AS "COUNT(db2.t1)" FROM db2.t1;
|
|
|
|
SELECT COUNT(*) AS "COUNT(db2.t2)" FROM db2.t2;
|
|
|
|
SELECT COUNT(*) AS "COUNT(test.t1)" FROM test.t1;
|
|
|
|
SELECT COUNT(*) AS "COUNT(test.t2)" FROM test.t2;
|
|
|
|
END|
|
|
|
|
delimiter ;|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Testing without a selected database
|
|
|
|
#
|
|
|
|
|
|
|
|
CREATE DATABASE db3;
|
|
|
|
USE db3;
|
|
|
|
DROP DATABASE db3;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
SELECT * FROM t1;
|
|
|
|
|
|
|
|
# Detect missing table references
|
|
|
|
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1,a2 FROM db1.t1, db2.t2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1,a2 FROM db1.t1, db2.t2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1,a2 FROM db1.t1 AS a1, db2.t2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1,a2 FROM db1.t1, db2.t2 AS a2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1,a2 FROM db3.t1 AS a1, db4.t2 AS a2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1,a2 FROM db3.t1 AS a1, db4.t2 AS a2;
|
|
|
|
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE FROM a1,a2 USING db1.t1, db2.t2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE FROM a1,a2 USING db1.t1, db2.t2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE FROM a1,a2 USING db1.t1 AS a1, db2.t2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE FROM a1,a2 USING db1.t1, db2.t2 AS a2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE FROM a1,a2 USING db3.t1 AS a1, db4.t2 AS a2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE FROM a1,a2 USING db3.t1 AS a1, db4.t2 AS a2;
|
|
|
|
|
|
|
|
# Ambiguous table references
|
|
|
|
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1 FROM db1.t1 AS a1, db2.t2 AS a1;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1 FROM db1.a1, db2.t2 AS a1;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE a1 FROM a1, db1.t1 AS a1;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE t1 FROM db1.t1, db2.t1 AS a1;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE t1 FROM db1.t1 AS a1, db2.t1 AS a2;
|
|
|
|
--error ER_NO_DB_ERROR
|
|
|
|
DELETE t1 FROM db1.t1, db2.t1;
|
|
|
|
|
|
|
|
# Test all again, now with a selected database
|
|
|
|
|
|
|
|
USE test;
|
|
|
|
|
|
|
|
# Detect missing table references
|
|
|
|
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE a1,a2 FROM db1.t1, db2.t2;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE a1,a2 FROM db1.t1, db2.t2;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE a1,a2 FROM db1.t1 AS a1, db2.t2;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE a1,a2 FROM db1.t1, db2.t2 AS a2;
|
|
|
|
--error ER_NO_SUCH_TABLE
|
|
|
|
DELETE a1,a2 FROM db3.t1 AS a1, db4.t2 AS a2;
|
|
|
|
--error ER_NO_SUCH_TABLE
|
|
|
|
DELETE a1,a2 FROM db3.t1 AS a1, db4.t2 AS a2;
|
|
|
|
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE FROM a1,a2 USING db1.t1, db2.t2;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE FROM a1,a2 USING db1.t1, db2.t2;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE FROM a1,a2 USING db1.t1 AS a1, db2.t2;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE FROM a1,a2 USING db1.t1, db2.t2 AS a2;
|
|
|
|
--error ER_NO_SUCH_TABLE
|
|
|
|
DELETE FROM a1,a2 USING db3.t1 AS a1, db4.t2 AS a2;
|
|
|
|
--error ER_NO_SUCH_TABLE
|
|
|
|
DELETE FROM a1,a2 USING db3.t1 AS a1, db4.t2 AS a2;
|
|
|
|
|
|
|
|
# Ambiguous table references
|
|
|
|
|
|
|
|
--error ER_NONUNIQ_TABLE
|
|
|
|
DELETE a1 FROM db1.t1 AS a1, db2.t2 AS a1;
|
|
|
|
--error ER_NO_SUCH_TABLE
|
|
|
|
DELETE a1 FROM db1.a1, db2.t2 AS a1;
|
|
|
|
--error ER_NONUNIQ_TABLE
|
|
|
|
DELETE a1 FROM a1, db1.t1 AS a1;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE t1 FROM db1.t1, db2.t1 AS a1;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE t1 FROM db1.t1 AS a1, db2.t1 AS a2;
|
|
|
|
--error ER_UNKNOWN_TABLE
|
|
|
|
DELETE t1 FROM db1.t1, db2.t1;
|
|
|
|
|
|
|
|
# Test multiple-table cross database deletes
|
|
|
|
|
|
|
|
DELETE t1 FROM db1.t2 AS t1, db2.t2 AS t2 WHERE t2.a = 1 AND t1.a = t2.a;
|
|
|
|
SELECT ROW_COUNT();
|
|
|
|
CALL count_rows();
|
|
|
|
DELETE a1, a2 FROM db2.t1 AS a1, t2 AS a2 WHERE a1.a = 2 AND a2.a = 2;
|
|
|
|
SELECT ROW_COUNT();
|
|
|
|
CALL count_rows();
|
|
|
|
|
|
|
|
DROP DATABASE db1;
|
|
|
|
DROP DATABASE db2;
|
|
|
|
DROP PROCEDURE count_rows;
|
|
|
|
DROP TABLE t1, t2;
|
|
|
|
|
2009-09-28 12:48:52 +02:00
|
|
|
--echo #
|
|
|
|
--echo # Bug#46958: Assertion in Diagnostics_area::set_ok_status, trigger,
|
|
|
|
--echo # merge table
|
|
|
|
--echo #
|
|
|
|
CREATE TABLE t1 ( a INT );
|
|
|
|
CREATE TABLE t2 ( a INT );
|
|
|
|
CREATE TABLE t3 ( a INT );
|
|
|
|
|
|
|
|
INSERT INTO t1 VALUES (1), (2);
|
|
|
|
INSERT INTO t2 VALUES (1), (2);
|
|
|
|
INSERT INTO t3 VALUES (1), (2);
|
|
|
|
|
|
|
|
CREATE TRIGGER tr1 BEFORE DELETE ON t2
|
|
|
|
FOR EACH ROW INSERT INTO no_such_table VALUES (1);
|
|
|
|
|
|
|
|
--error ER_NO_SUCH_TABLE
|
|
|
|
DELETE t1, t2, t3 FROM t1, t2, t3;
|
|
|
|
|
|
|
|
SELECT * FROM t1;
|
|
|
|
SELECT * FROM t2;
|
|
|
|
SELECT * FROM t3;
|
|
|
|
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
|
|
|
|
CREATE TABLE t1 ( a INT );
|
|
|
|
CREATE TABLE t2 ( a INT );
|
|
|
|
CREATE TABLE t3 ( a INT );
|
|
|
|
|
|
|
|
INSERT INTO t1 VALUES (1), (2);
|
|
|
|
INSERT INTO t2 VALUES (1), (2);
|
|
|
|
INSERT INTO t3 VALUES (1), (2);
|
|
|
|
|
|
|
|
CREATE TRIGGER tr1 AFTER DELETE ON t2
|
|
|
|
FOR EACH ROW INSERT INTO no_such_table VALUES (1);
|
|
|
|
|
|
|
|
--error ER_NO_SUCH_TABLE
|
|
|
|
DELETE t1, t2, t3 FROM t1, t2, t3;
|
|
|
|
|
|
|
|
SELECT * FROM t1;
|
|
|
|
SELECT * FROM t2;
|
|
|
|
SELECT * FROM t3;
|
|
|
|
|
|
|
|
DROP TABLE t1, t2, t3;
|
2009-11-18 10:32:03 +01:00
|
|
|
|
|
|
|
--echo #
|
|
|
|
--echo # Bug #46425 crash in Diagnostics_area::set_ok_status,
|
|
|
|
--echo # empty statement, DELETE IGNORE
|
|
|
|
--echo #
|
|
|
|
|
|
|
|
CREATE table t1 (i INTEGER);
|
|
|
|
|
|
|
|
INSERT INTO t1 VALUES (1);
|
|
|
|
|
|
|
|
--delimiter |
|
|
|
|
|
|
|
|
CREATE TRIGGER tr1 AFTER DELETE ON t1 FOR EACH ROW
|
|
|
|
BEGIN
|
|
|
|
INSERT INTO t1 SELECT * FROM t1 AS A;
|
|
|
|
END |
|
|
|
|
|
|
|
|
--delimiter ;
|
|
|
|
--error ER_CANT_UPDATE_USED_TABLE_IN_SF_OR_TRG
|
|
|
|
DELETE IGNORE FROM t1;
|
|
|
|
|
2010-01-29 10:36:28 +01:00
|
|
|
DROP TABLE t1;
|
|
|
|
|
2010-05-14 13:36:27 +02:00
|
|
|
--echo #
|
|
|
|
--echo # Bug #53450: Crash/assertion
|
|
|
|
--echo # "virtual int ha_myisam::index_first(uchar*)") at assert.c:81
|
|
|
|
--echo #
|
|
|
|
|
|
|
|
CREATE TABLE t1 (a INT, b INT, c INT,
|
|
|
|
INDEX(a), INDEX(b), INDEX(c));
|
|
|
|
INSERT INTO t1 VALUES (1,2,3), (4,5,6), (7,8,9);
|
|
|
|
|
|
|
|
DELETE FROM t1 WHERE a = 10 OR b = 20 ORDER BY c LIMIT 1;
|
|
|
|
|
|
|
|
DROP TABLE t1;
|
2010-01-29 10:36:28 +01:00
|
|
|
|
2010-08-31 00:16:38 +02:00
|
|
|
--echo #
|
|
|
|
--echo # Bug #53034: Multiple-table DELETE statements not accepting
|
|
|
|
--echo # "Access compatibility" syntax
|
|
|
|
--echo #
|
|
|
|
|
|
|
|
CREATE TABLE t1 (id INT);
|
|
|
|
CREATE TABLE t2 LIKE t1;
|
|
|
|
CREATE TABLE t3 LIKE t1;
|
|
|
|
|
|
|
|
DELETE FROM t1.*, test.t2.*, a.* USING t1, t2, t3 AS a;
|
|
|
|
|
|
|
|
DROP TABLE t1, t2, t3;
|
|
|
|
|
2010-01-29 10:36:28 +01:00
|
|
|
--echo End of 5.1 tests
|
2010-10-04 10:25:04 +02:00
|
|
|
|
|
|
|
|
|
|
|
--echo #
|
|
|
|
--echo # Bug#51099 Assertion in mysql_multi_delete_prepare()
|
|
|
|
--echo #
|
|
|
|
|
|
|
|
--disable_warnings
|
|
|
|
DROP TABLE IF EXISTS t1, t2;
|
|
|
|
DROP VIEW IF EXISTS v1, v2;
|
|
|
|
--enable_warnings
|
|
|
|
|
|
|
|
CREATE TABLE t1(a INT);
|
|
|
|
CREATE TABLE t2(b INT);
|
|
|
|
CREATE VIEW v1 AS SELECT a, b FROM t1, t2;
|
|
|
|
CREATE VIEW v2 AS SELECT a FROM v1;
|
|
|
|
|
|
|
|
# This is a normal delete
|
|
|
|
--error ER_VIEW_DELETE_MERGE_VIEW
|
|
|
|
DELETE FROM v2;
|
|
|
|
# This is a multi table delete, check that we get the same error
|
|
|
|
# This caused the assertion.
|
|
|
|
--error ER_VIEW_DELETE_MERGE_VIEW
|
|
|
|
DELETE v2 FROM v2;
|
|
|
|
|
|
|
|
DROP VIEW v2, v1;
|
|
|
|
DROP TABLE t1, t2;
|