mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1
into moonbone.local:/work/14186-bug-4.1-mysql
This commit is contained in:
commit
47059b89f5
5 changed files with 31 additions and 7 deletions
|
@ -337,3 +337,11 @@ a b
|
|||
22 3
|
||||
23 3
|
||||
drop table t1;
|
||||
create table t1 (f1 date not null);
|
||||
insert into t1 values('2000-01-01'),('0000-00-00');
|
||||
update t1 set f1='2002-02-02' where f1 is null;
|
||||
select * from t1;
|
||||
f1
|
||||
2000-01-01
|
||||
2002-02-02
|
||||
drop table t1;
|
||||
|
|
|
@ -260,5 +260,14 @@ update t1 set a=a+11,b=2 order by a limit 3;
|
|||
update t1 set a=a+12,b=3 order by a limit 3;
|
||||
select * from t1 order by a;
|
||||
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Bug#14186 select datefield is null not updated
|
||||
#
|
||||
create table t1 (f1 date not null);
|
||||
insert into t1 values('2000-01-01'),('0000-00-00');
|
||||
update t1 set f1='2002-02-02' where f1 is null;
|
||||
select * from t1;
|
||||
drop table t1;
|
||||
# End of 4.1 tests
|
||||
|
|
|
@ -69,8 +69,6 @@ static int return_zero_rows(JOIN *join, select_result *res,TABLE_LIST *tables,
|
|||
SELECT_LEX_UNIT *unit);
|
||||
static COND *optimize_cond(THD *thd, COND *conds,
|
||||
Item::cond_result *cond_value);
|
||||
static COND *remove_eq_conds(THD *thd, COND *cond,
|
||||
Item::cond_result *cond_value);
|
||||
static bool const_expression_in_where(COND *conds,Item *item, Item **comp_item);
|
||||
static bool open_tmp_table(TABLE *table);
|
||||
static bool create_myisam_tmp_table(TABLE *table,TMP_TABLE_PARAM *param,
|
||||
|
@ -4615,7 +4613,7 @@ optimize_cond(THD *thd, COND *conds, Item::cond_result *cond_value)
|
|||
COND_FALSE always false ( 1 = 2 )
|
||||
*/
|
||||
|
||||
static COND *
|
||||
COND *
|
||||
remove_eq_conds(THD *thd, COND *cond, Item::cond_result *cond_value)
|
||||
{
|
||||
if (cond->type() == Item::COND_ITEM)
|
||||
|
|
|
@ -457,3 +457,4 @@ bool cp_buffer_from_ref(THD *thd, TABLE_REF *ref);
|
|||
bool error_if_full_join(JOIN *join);
|
||||
int report_error(TABLE *table, int error);
|
||||
int safe_index_read(JOIN_TAB *tab);
|
||||
COND *remove_eq_conds(THD *thd, COND *cond, Item::cond_result *cond_value);
|
||||
|
|
|
@ -70,7 +70,7 @@ int mysql_update(THD *thd,
|
|||
ha_rows updated, found;
|
||||
key_map old_used_keys;
|
||||
TABLE *table;
|
||||
SQL_SELECT *select;
|
||||
SQL_SELECT *select= 0;
|
||||
READ_RECORD info;
|
||||
TABLE_LIST *update_table_list= ((TABLE_LIST*)
|
||||
thd->lex->select_lex.table_list.first);
|
||||
|
@ -131,11 +131,19 @@ int mysql_update(THD *thd,
|
|||
DBUG_RETURN(-1); /* purecov: inspected */
|
||||
}
|
||||
|
||||
if (conds)
|
||||
{
|
||||
Item::cond_result cond_value;
|
||||
conds= remove_eq_conds(thd, conds, &cond_value);
|
||||
if (cond_value == Item::COND_FALSE)
|
||||
limit= 0; // Impossible WHERE
|
||||
}
|
||||
// Don't count on usage of 'only index' when calculating which key to use
|
||||
table->used_keys.clear_all();
|
||||
select=make_select(table,0,0,conds,&error);
|
||||
if (error ||
|
||||
(select && select->check_quick(thd, safe_update, limit)) || !limit)
|
||||
if (limit)
|
||||
select=make_select(table,0,0,conds,&error);
|
||||
if (error || !limit ||
|
||||
(select && select->check_quick(thd, safe_update, limit)))
|
||||
{
|
||||
delete select;
|
||||
free_underlaid_joins(thd, &thd->lex->select_lex);
|
||||
|
|
Loading…
Reference in a new issue