Commit dc970f95 authored by unknown's avatar unknown
Browse files

multi_update.result:

  Test case for a #2996 bug fix
multi_update.test:
  test case for a #2996 bug fix
sql_select.cc:
  Fix for a bug #2996 involving multi-table updates over the const tables


sql/sql_select.cc:
  Fix for a bug #2996 involving multi-table updates over the const tables
mysql-test/t/multi_update.test:
  test case for a #2996 bug fix
mysql-test/r/multi_update.result:
  Test case for a #2996 bug fix
parent 27b6f283
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -386,3 +386,17 @@ SELECT * from t2;
a
1
DROP TABLE t1,t2;
create table `t1` (   `p_id` int(10) unsigned NOT NULL auto_increment,   `p_code` varchar(20) NOT NULL default '',   `p_created` datetime NOT NULL default '0000-00-00 00:00:00',   `p_active` tinyint(1) unsigned NOT NULL default '1',   PRIMARY KEY  (`p_id`) );
create table  `t2` (   `c2_id` int(10) unsigned  NULL auto_increment,   `c2_p_id` int(10) unsigned NOT NULL default '0',   `c2_note` text NOT NULL,   `c2_created` datetime NOT NULL default '0000-00-00 00:00:00',   `c2_active` tinyint(1) unsigned NOT NULL default '1',   PRIMARY KEY  (`c2_id`),   KEY `c2_p_id` (`c2_p_id`) );
insert into t1 values (0,'A01-Comp',now(),1);
insert into t1 values (0,'B01-Comp',now(),1);
insert into t2 values (0,1,'A Note',now(),1);
update t1 left join t2 on p_id = c2_p_id set c2_note = 'asdf-1' where p_id = 2;
select * from t1;
p_id	p_code	p_created	p_active
1	A01-Comp	2004-03-11 23:21:29	1
2	B01-Comp	2004-03-11 23:21:29	1
select * from t2;
c2_id	c2_p_id	c2_note	c2_created	c2_active
1	1	A Note	2004-03-11 23:21:29	1
drop table t1, t2;
+14 −0
Original line number Diff line number Diff line
@@ -325,3 +325,17 @@ DELETE t2 FROM t1 AS t2, t2 AS t1 where t1.a=t2.a and t1.a=2;
SELECT * from t1;
SELECT * from t2;
DROP TABLE t1,t2;

#
# Test update with const tables
#

create table `t1` (   `p_id` int(10) unsigned NOT NULL auto_increment,   `p_code` varchar(20) NOT NULL default '',   `p_created` datetime NOT NULL default '0000-00-00 00:00:00',   `p_active` tinyint(1) unsigned NOT NULL default '1',   PRIMARY KEY  (`p_id`) );
create table  `t2` (   `c2_id` int(10) unsigned  NULL auto_increment,   `c2_p_id` int(10) unsigned NOT NULL default '0',   `c2_note` text NOT NULL,   `c2_created` datetime NOT NULL default '0000-00-00 00:00:00',   `c2_active` tinyint(1) unsigned NOT NULL default '1',   PRIMARY KEY  (`c2_id`),   KEY `c2_p_id` (`c2_p_id`) );
insert into t1 values (0,'A01-Comp',now(),1);
insert into t1 values (0,'B01-Comp',now(),1);
insert into t2 values (0,1,'A Note',now(),1);
update t1 left join t2 on p_id = c2_p_id set c2_note = 'asdf-1' where p_id = 2; 
select * from t1;
select * from t2;
drop table t1, t2;
+2 −2
Original line number Diff line number Diff line
@@ -4897,7 +4897,7 @@ join_read_const_table(JOIN_TAB *tab, POSITION *pos)
  if (tab->on_expr && !table->null_row)
  {
    if ((table->null_row= test(tab->on_expr->val_int() == 0)))
      empty_record(table);
      mark_as_null_row(table);  
  }
  if (!table->null_row)
    table->maybe_null=0;