Commit 03ed0d1d authored by unknown's avatar unknown
Browse files

Merge epotemkin@bk-internal.mysql.com:/home/bk/mysql-4.1

into moonbone.local:/work/14186-bug-4.1-mysql


sql/sql_select.cc:
  Auto merged
sql/sql_select.h:
  Auto merged
parents fffe7417 6020281e
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -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;
+9 −0
Original line number Diff line number Diff line
@@ -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
+1 −3
Original line number Diff line number Diff line
@@ -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)
+1 −0
Original line number Diff line number Diff line
@@ -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);
+12 −4
Original line number Diff line number Diff line
@@ -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();
  if (limit)
    select=make_select(table,0,0,conds,&error);
  if (error ||
      (select && select->check_quick(thd, safe_update, limit)) || !limit)
  if (error || !limit ||
      (select && select->check_quick(thd, safe_update, limit)))
  {
    delete select;
    free_underlaid_joins(thd, &thd->lex->select_lex);