diff options
author | bell@sanja.is.com.ua <> | 2002-11-25 21:27:14 +0200 |
---|---|---|
committer | bell@sanja.is.com.ua <> | 2002-11-25 21:27:14 +0200 |
commit | b8f5fc3a139c1411aa6ecd6f727864a0c0016789 (patch) | |
tree | f7de0958810c8e567d83564ff9a09bbaf6b694ac | |
parent | f5dab36a63c4eda2a0492f33a56f195af1199ea4 (diff) | |
download | mariadb-git-b8f5fc3a139c1411aa6ecd6f727864a0c0016789.tar.gz |
subselet in delete (SCRUM)
-rw-r--r-- | mysql-test/r/subselect.result | 19 | ||||
-rw-r--r-- | mysql-test/t/subselect.test | 11 | ||||
-rw-r--r-- | sql/sql_delete.cc | 8 |
3 files changed, 36 insertions, 2 deletions
diff --git a/mysql-test/r/subselect.result b/mysql-test/r/subselect.result index a2d29b1c0cf..02f05ce50d6 100644 --- a/mysql-test/r/subselect.result +++ b/mysql-test/r/subselect.result @@ -335,3 +335,22 @@ a b 1 21 2 22 drop table t1, t2; +drop table if exists t1, t2; +create table t1 (a int NOT NULL, b int, primary key (a)); +create table t2 (a int NOT NULL, b int, primary key (a)); +insert into t1 values (0, 10),(1, 11),(2, 12); +insert into t2 values (1, 21),(2, 12),(3, 23); +select * from t1; +a b +0 10 +1 11 +2 12 +select * from t1 where b = (select b from t2 where t1.a = t2.a); +a b +2 12 +delete from t1 where b = (select b from t2 where t1.a = t2.a); +select * from t1; +a b +0 10 +1 11 +drop table t1, t2; diff --git a/mysql-test/t/subselect.test b/mysql-test/t/subselect.test index 6bba9d4f3cd..3f20abe803a 100644 --- a/mysql-test/t/subselect.test +++ b/mysql-test/t/subselect.test @@ -215,3 +215,14 @@ update t1 set b= (select b from t2 where t1.a = t2.a); select * from t1; drop table t1, t2; +#delete with subselects +drop table if exists t1, t2; +create table t1 (a int NOT NULL, b int, primary key (a)); +create table t2 (a int NOT NULL, b int, primary key (a)); +insert into t1 values (0, 10),(1, 11),(2, 12); +insert into t2 values (1, 21),(2, 12),(3, 23); +select * from t1; +select * from t1 where b = (select b from t2 where t1.a = t2.a); +delete from t1 where b = (select b from t2 where t1.a = t2.a); +select * from t1; +drop table t1, t2; diff --git a/sql/sql_delete.cc b/sql/sql_delete.cc index 16d6b6d4631..5b97b2f7750 100644 --- a/sql/sql_delete.cc +++ b/sql/sql_delete.cc @@ -37,14 +37,18 @@ int mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds, ORDER *order, bool using_limit=limit != HA_POS_ERROR; bool transactional_table, log_delayed, safe_update, const_cond; ha_rows deleted; + TABLE_LIST *delete_table_list= (TABLE_LIST*) + thd->lex.select_lex.table_list.first; DBUG_ENTER("mysql_delete"); - if (!(table = open_ltable(thd, table_list, table_list->lock_type))) + if ((open_and_lock_tables(thd, table_list))) DBUG_RETURN(-1); + fix_tables_pointers(&thd->lex.select_lex); + table= table_list->table; table->file->info(HA_STATUS_VARIABLE | HA_STATUS_NO_LOCK); thd->proc_info="init"; table->map=1; - if (setup_conds(thd,table_list,&conds) || + if (setup_conds(thd, delete_table_list, &conds) || setup_ftfuncs(&thd->lex.select_lex)) DBUG_RETURN(-1); |