mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 11:01:52 +01:00
Merge ssmith@bk-internal.mysql.com:/home/bk/mysql-4.1
into mysql.com:/home/stewart/Documents/MySQL/4.1/main
This commit is contained in:
commit
86374681f6
4 changed files with 50 additions and 2 deletions
|
@ -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();
|
||||||
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();
|
||||||
|
|
||||||
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
|
||||||
|
|
29
sql/item.cc
29
sql/item.cc
|
@ -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();
|
||||||
|
|
Loading…
Add table
Reference in a new issue