mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into magare.gmz:/home/kgeorge/mysql/autopush/B26186-5.0-opt sql/sql_delete.cc: Auto merged
This commit is contained in:
@ -214,3 +214,12 @@ select count(*) from t1;
|
|||||||
count(*)
|
count(*)
|
||||||
0
|
0
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (a INT);
|
||||||
|
INSERT INTO t1 VALUES (1);
|
||||||
|
DELETE FROM t1 ORDER BY x;
|
||||||
|
ERROR 42S22: Unknown column 'x' in 'order clause'
|
||||||
|
DELETE FROM t1 ORDER BY t2.x;
|
||||||
|
ERROR 42S22: Unknown column 't2.x' in 'order clause'
|
||||||
|
DELETE FROM t1 ORDER BY (SELECT x);
|
||||||
|
ERROR 42S22: Unknown column 'x' in 'field list'
|
||||||
|
DROP TABLE t1;
|
||||||
|
@ -203,3 +203,21 @@ select * from t1 where a is null;
|
|||||||
delete from t1 where a is null;
|
delete from t1 where a is null;
|
||||||
select count(*) from t1;
|
select count(*) from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# 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;
|
||||||
|
@ -60,6 +60,27 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
|
|||||||
if (mysql_prepare_delete(thd, table_list, &conds))
|
if (mysql_prepare_delete(thd, table_list, &conds))
|
||||||
DBUG_RETURN(TRUE);
|
DBUG_RETURN(TRUE);
|
||||||
|
|
||||||
|
/* check ORDER BY even if it can be ignored */
|
||||||
|
if (order && order->elements)
|
||||||
|
{
|
||||||
|
TABLE_LIST tables;
|
||||||
|
List<Item> fields;
|
||||||
|
List<Item> all_fields;
|
||||||
|
|
||||||
|
bzero((char*) &tables,sizeof(tables));
|
||||||
|
tables.table = table;
|
||||||
|
tables.alias = table_list->alias;
|
||||||
|
|
||||||
|
if (select_lex->setup_ref_array(thd, order->elements) ||
|
||||||
|
setup_order(thd, select_lex->ref_pointer_array, &tables,
|
||||||
|
fields, all_fields, (ORDER*) order->first))
|
||||||
|
{
|
||||||
|
delete select;
|
||||||
|
free_underlaid_joins(thd, &thd->lex->select_lex);
|
||||||
|
DBUG_RETURN(TRUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const_cond= (!conds || conds->const_item());
|
const_cond= (!conds || conds->const_item());
|
||||||
safe_update=test(thd->options & OPTION_SAFE_UPDATES);
|
safe_update=test(thd->options & OPTION_SAFE_UPDATES);
|
||||||
if (safe_update && const_cond)
|
if (safe_update && const_cond)
|
||||||
@ -148,23 +169,7 @@ bool mysql_delete(THD *thd, TABLE_LIST *table_list, COND *conds,
|
|||||||
{
|
{
|
||||||
uint length= 0;
|
uint length= 0;
|
||||||
SORT_FIELD *sortorder;
|
SORT_FIELD *sortorder;
|
||||||
TABLE_LIST tables;
|
|
||||||
List<Item> fields;
|
|
||||||
List<Item> all_fields;
|
|
||||||
ha_rows examined_rows;
|
ha_rows examined_rows;
|
||||||
|
|
||||||
bzero((char*) &tables,sizeof(tables));
|
|
||||||
tables.table = table;
|
|
||||||
tables.alias = table_list->alias;
|
|
||||||
|
|
||||||
if (select_lex->setup_ref_array(thd, order->elements) ||
|
|
||||||
setup_order(thd, select_lex->ref_pointer_array, &tables,
|
|
||||||
fields, all_fields, (ORDER*) order->first))
|
|
||||||
{
|
|
||||||
delete select;
|
|
||||||
free_underlaid_joins(thd, &thd->lex->select_lex);
|
|
||||||
DBUG_RETURN(TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((!select || table->quick_keys.is_clear_all()) && limit != HA_POS_ERROR)
|
if ((!select || table->quick_keys.is_clear_all()) && limit != HA_POS_ERROR)
|
||||||
usable_index= get_index_for_order(table, (ORDER*)(order->first), limit);
|
usable_index= get_index_for_order(table, (ORDER*)(order->first), limit);
|
||||||
|
Reference in New Issue
Block a user