Loading mysql-test/r/select.result +9 −0 Original line number Diff line number Diff line Loading @@ -2617,3 +2617,12 @@ select found_rows(); found_rows() 1 DROP TABLE t1; create table t1(f1 int, f2 int); create table t2(f3 int); select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,1)); f1 select f1 from t1,t2 where f1=f2 and (f1,NULL) = ((1,1)); f1 select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL)); f1 drop table t1,t2; mysql-test/t/select.test +10 −0 Original line number Diff line number Diff line Loading @@ -2164,4 +2164,14 @@ select found_rows(); DROP TABLE t1; # # Bug #13356 assertion failed in resolve_const_item() # create table t1(f1 int, f2 int); create table t2(f3 int); select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,1)); select f1 from t1,t2 where f1=f2 and (f1,NULL) = ((1,1)); select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL)); drop table t1,t2; # End of 4.1 tests sql/item.cc +29 −0 Original line number Diff line number Diff line Loading @@ -2870,6 +2870,35 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item) new_item= (null_value ? (Item*) new Item_null(name) : (Item*) new Item_int(name, result, length)); } else if (res_type == ROW_RESULT) { new_item= 0; /* If item and comp_item are both Item_rows and have same number of cols then process items in Item_row one by one. If Item_row contain nulls substitute it by Item_null. Otherwise just return. */ if (item->result_type() == comp_item->result_type() && ((Item_row*)item)->cols() == ((Item_row*)comp_item)->cols()) { Item_row *item_row= (Item_row*)item,*comp_item_row= (Item_row*)comp_item; if (item_row->null_inside()) new_item= (Item*) new Item_null(name); else { int i= item_row->cols() - 1; for (; i >= 0; i--) { if (item_row->maybe_null && item_row->el(i)->is_null()) { new_item= (Item*) new Item_null(name); break; } resolve_const_item(thd, item_row->addr(i), comp_item_row->el(i)); } } } } else { // It must REAL_RESULT double result=item->val(); Loading Loading
mysql-test/r/select.result +9 −0 Original line number Diff line number Diff line Loading @@ -2617,3 +2617,12 @@ select found_rows(); found_rows() 1 DROP TABLE t1; create table t1(f1 int, f2 int); create table t2(f3 int); select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,1)); f1 select f1 from t1,t2 where f1=f2 and (f1,NULL) = ((1,1)); f1 select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL)); f1 drop table t1,t2;
mysql-test/t/select.test +10 −0 Original line number Diff line number Diff line Loading @@ -2164,4 +2164,14 @@ select found_rows(); DROP TABLE t1; # # Bug #13356 assertion failed in resolve_const_item() # create table t1(f1 int, f2 int); create table t2(f3 int); select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,1)); select f1 from t1,t2 where f1=f2 and (f1,NULL) = ((1,1)); select f1 from t1,t2 where f1=f2 and (f1,f2) = ((1,NULL)); drop table t1,t2; # End of 4.1 tests
sql/item.cc +29 −0 Original line number Diff line number Diff line Loading @@ -2870,6 +2870,35 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item) new_item= (null_value ? (Item*) new Item_null(name) : (Item*) new Item_int(name, result, length)); } else if (res_type == ROW_RESULT) { new_item= 0; /* If item and comp_item are both Item_rows and have same number of cols then process items in Item_row one by one. If Item_row contain nulls substitute it by Item_null. Otherwise just return. */ if (item->result_type() == comp_item->result_type() && ((Item_row*)item)->cols() == ((Item_row*)comp_item)->cols()) { Item_row *item_row= (Item_row*)item,*comp_item_row= (Item_row*)comp_item; if (item_row->null_inside()) new_item= (Item*) new Item_null(name); else { int i= item_row->cols() - 1; for (; i >= 0; i--) { if (item_row->maybe_null && item_row->el(i)->is_null()) { new_item= (Item*) new Item_null(name); break; } resolve_const_item(thd, item_row->addr(i), comp_item_row->el(i)); } } } } else { // It must REAL_RESULT double result=item->val(); Loading