mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 13:02:28 +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
|
22 3
|
||||||
23 3
|
23 3
|
||||||
drop table t1;
|
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;
|
update t1 set a=a+12,b=3 order by a limit 3;
|
||||||
select * from t1 order by a;
|
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;
|
drop table t1;
|
||||||
# End of 4.1 tests
|
# 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);
|
SELECT_LEX_UNIT *unit);
|
||||||
static COND *optimize_cond(THD *thd, COND *conds,
|
static COND *optimize_cond(THD *thd, COND *conds,
|
||||||
Item::cond_result *cond_value);
|
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 const_expression_in_where(COND *conds,Item *item, Item **comp_item);
|
||||||
static bool open_tmp_table(TABLE *table);
|
static bool open_tmp_table(TABLE *table);
|
||||||
static bool create_myisam_tmp_table(TABLE *table,TMP_TABLE_PARAM *param,
|
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 )
|
COND_FALSE always false ( 1 = 2 )
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static COND *
|
COND *
|
||||||
remove_eq_conds(THD *thd, COND *cond, Item::cond_result *cond_value)
|
remove_eq_conds(THD *thd, COND *cond, Item::cond_result *cond_value)
|
||||||
{
|
{
|
||||||
if (cond->type() == Item::COND_ITEM)
|
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);
|
bool error_if_full_join(JOIN *join);
|
||||||
int report_error(TABLE *table, int error);
|
int report_error(TABLE *table, int error);
|
||||||
int safe_index_read(JOIN_TAB *tab);
|
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;
|
ha_rows updated, found;
|
||||||
key_map old_used_keys;
|
key_map old_used_keys;
|
||||||
TABLE *table;
|
TABLE *table;
|
||||||
SQL_SELECT *select;
|
SQL_SELECT *select= 0;
|
||||||
READ_RECORD info;
|
READ_RECORD info;
|
||||||
TABLE_LIST *update_table_list= ((TABLE_LIST*)
|
TABLE_LIST *update_table_list= ((TABLE_LIST*)
|
||||||
thd->lex->select_lex.table_list.first);
|
thd->lex->select_lex.table_list.first);
|
||||||
|
@ -131,11 +131,19 @@ int mysql_update(THD *thd,
|
||||||
DBUG_RETURN(-1); /* purecov: inspected */
|
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
|
// Don't count on usage of 'only index' when calculating which key to use
|
||||||
table->used_keys.clear_all();
|
table->used_keys.clear_all();
|
||||||
|
if (limit)
|
||||||
select=make_select(table,0,0,conds,&error);
|
select=make_select(table,0,0,conds,&error);
|
||||||
if (error ||
|
if (error || !limit ||
|
||||||
(select && select->check_quick(thd, safe_update, limit)) || !limit)
|
(select && select->check_quick(thd, safe_update, limit)))
|
||||||
{
|
{
|
||||||
delete select;
|
delete select;
|
||||||
free_underlaid_joins(thd, &thd->lex->select_lex);
|
free_underlaid_joins(thd, &thd->lex->select_lex);
|
||||||
|
|
Loading…
Reference in a new issue