Commit 22ad5163 authored by unknown's avatar unknown

item_func.h:

  Fix for a bug with LEAST() in WHERE clause
ha_innodb.cc:
  Fix for a configure bug
multi_update.result, multi_update.test:
  Fix for the update with NULL's in the result set
sql_update.cc:
  Fix for the update with NULL's in the result set
   Fix for the update with NULL's in the result set
   Fix for the update with NULL's in the result set


sql/sql_update.cc:
  Fix for the update with NULL's in the result set
   Fix for the update with NULL's in the result set
   Fix for the update with NULL's in the result set
mysql-test/t/multi_update.test:
  Fix for the update with NULL's in the result set
mysql-test/r/multi_update.result:
  Fix for the update with NULL's in the result set
sql/ha_innodb.cc:
  Fix for a configure bug
sql/item_func.h:
  Fix for a bug with LEAST() in WHERE clause
parent aa0d0d20
...@@ -318,3 +318,12 @@ create table t2(Z varchar(15)); ...@@ -318,3 +318,12 @@ create table t2(Z varchar(15));
insert into t2(Z) select concat(a.a,b.a,c.a,d.a) from t1 as a, t1 as b, t1 as c, t1 as d; insert into t2(Z) select concat(a.a,b.a,c.a,d.a) from t1 as a, t1 as b, t1 as c, t1 as d;
update t2,t3 set Z =param_scenario_costs; update t2,t3 set Z =param_scenario_costs;
drop table t1,t2,t3; drop table t1,t2,t3;
create table t1 (a int, b int);
create table t2 (a int, b int);
insert into t1 values (1,1),(2,1),(3,1);
insert into t2 values (1,1), (3,1);
update t1 left join t2 on t1.a=t2.a set t1.b=2, t2.b=2 where t1.b=1 and t2.b=1 or t2.a is NULL;
select t1.a, t1.b,t2.a, t2.b from t1 left join t2 on t1.a=t2.a where t1.b=1 and t2.b=1 or t2.a is NULL;
a b a b
2 2 NULL NULL
drop table t1,t2;
...@@ -260,3 +260,10 @@ create table t2(Z varchar(15)); ...@@ -260,3 +260,10 @@ create table t2(Z varchar(15));
insert into t2(Z) select concat(a.a,b.a,c.a,d.a) from t1 as a, t1 as b, t1 as c, t1 as d; insert into t2(Z) select concat(a.a,b.a,c.a,d.a) from t1 as a, t1 as b, t1 as c, t1 as d;
update t2,t3 set Z =param_scenario_costs; update t2,t3 set Z =param_scenario_costs;
drop table t1,t2,t3; drop table t1,t2,t3;
create table t1 (a int, b int);
create table t2 (a int, b int);
insert into t1 values (1,1),(2,1),(3,1);
insert into t2 values (1,1), (3,1);
update t1 left join t2 on t1.a=t2.a set t1.b=2, t2.b=2 where t1.b=1 and t2.b=1 or t2.a is NULL;
select t1.a, t1.b,t2.a, t2.b from t1 left join t2 on t1.a=t2.a where t1.b=1 and t2.b=1 or t2.a is NULL;
drop table t1,t2;
...@@ -28,7 +28,6 @@ InnoDB */ ...@@ -28,7 +28,6 @@ InnoDB */
#include "mysql_priv.h" #include "mysql_priv.h"
#include "slave.h" #include "slave.h"
#include "sql_cache.h"
#ifdef HAVE_INNOBASE_DB #ifdef HAVE_INNOBASE_DB
#include <m_ctype.h> #include <m_ctype.h>
......
...@@ -514,6 +514,7 @@ public: ...@@ -514,6 +514,7 @@ public:
void fix_length_and_dec(); void fix_length_and_dec();
enum Item_result result_type () const { return cmp_type; } enum Item_result result_type () const { return cmp_type; }
unsigned int size_of() { return sizeof(*this);} unsigned int size_of() { return sizeof(*this);}
table_map not_null_tables() const { return 0; }
}; };
class Item_func_min :public Item_func_min_max class Item_func_min :public Item_func_min_max
......
...@@ -575,6 +575,7 @@ multi_update::initialize_tables(JOIN *join) ...@@ -575,6 +575,7 @@ multi_update::initialize_tables(JOIN *join)
{ {
TABLE *table=table_ref->table; TABLE *table=table_ref->table;
uint cnt= table_ref->shared; uint cnt= table_ref->shared;
Item_field *If;
List<Item> temp_fields= *fields_for_table[cnt]; List<Item> temp_fields= *fields_for_table[cnt];
ORDER group; ORDER group;
...@@ -598,7 +599,10 @@ multi_update::initialize_tables(JOIN *join) ...@@ -598,7 +599,10 @@ multi_update::initialize_tables(JOIN *join)
/* ok to be on stack as this is not referenced outside of this func */ /* ok to be on stack as this is not referenced outside of this func */
Field_string offset(table->file->ref_length, 0, "offset", Field_string offset(table->file->ref_length, 0, "offset",
table, 1); table, 1);
if (temp_fields.push_front(new Item_field(((Field *) &offset)))) if (!(If=new Item_field(((Field *) &offset))))
DBUG_RETURN(1);
If->maybe_null=0;
if (temp_fields.push_front(If))
DBUG_RETURN(1); DBUG_RETURN(1);
/* Make an unique key over the first field to avoid duplicated updates */ /* Make an unique key over the first field to avoid duplicated updates */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment