Commit f07bec65 authored by unknown's avatar unknown

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

into  mysql.com:/home/stewart/Documents/MySQL/4.1/main

parents b97acc5d 0559f1e0
...@@ -427,9 +427,9 @@ int init_embedded_server(int argc, char **argv, char **groups) ...@@ -427,9 +427,9 @@ int init_embedded_server(int argc, char **argv, char **groups)
acl_error= 0; acl_error= 0;
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
if (!(acl_error= acl_init((THD *)0, opt_noacl)) && if (!(acl_error= acl_init(opt_noacl)) &&
!opt_noacl) !opt_noacl)
(void) grant_init((THD *)0); (void) grant_init();
#endif #endif
if (acl_error || my_tz_init((THD *)0, default_tz_name, opt_bootstrap)) if (acl_error || my_tz_init((THD *)0, default_tz_name, opt_bootstrap))
{ {
......
...@@ -2617,3 +2617,12 @@ select found_rows(); ...@@ -2617,3 +2617,12 @@ select found_rows();
found_rows() found_rows()
1 1
DROP TABLE t1; 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;
...@@ -2164,4 +2164,14 @@ select found_rows(); ...@@ -2164,4 +2164,14 @@ select found_rows();
DROP TABLE t1; 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 # End of 4.1 tests
...@@ -2870,6 +2870,35 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item) ...@@ -2870,6 +2870,35 @@ void resolve_const_item(THD *thd, Item **ref, Item *comp_item)
new_item= (null_value ? (Item*) new Item_null(name) : new_item= (null_value ? (Item*) new Item_null(name) :
(Item*) new Item_int(name, result, length)); (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 else
{ // It must REAL_RESULT { // It must REAL_RESULT
double result=item->val(); double result=item->val();
......
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