mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge spetrunia@bk-internal.mysql.com:/home/bk/mysql-5.0
into mysql.com:/home/psergey/mysql-5.0-bug12941
This commit is contained in:
@ -2151,3 +2151,29 @@ select * from v1;
|
||||
strcmp(f1,'a')
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
create table t1 (
|
||||
r_object_id char(16) NOT NULL,
|
||||
group_name varchar(32) NOT NULL
|
||||
) engine = InnoDB;
|
||||
create table t2 (
|
||||
r_object_id char(16) NOT NULL,
|
||||
i_position int(11) NOT NULL,
|
||||
users_names varchar(32) default NULL
|
||||
) Engine = InnoDB;
|
||||
create view v1 as select r_object_id, group_name from t1;
|
||||
create view v2 as select r_object_id, i_position, users_names from t2;
|
||||
create unique index r_object_id on t1(r_object_id);
|
||||
create index group_name on t1(group_name);
|
||||
create unique index r_object_id_i_position on t2(r_object_id,i_position);
|
||||
create index users_names on t2(users_names);
|
||||
insert into t1 values('120001a080000542','tstgroup1');
|
||||
insert into t2 values('120001a080000542',-1, 'guser01');
|
||||
insert into t2 values('120001a080000542',-2, 'guser02');
|
||||
select v1.r_object_id, v2.users_names from v1, v2
|
||||
where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
|
||||
order by users_names;
|
||||
r_object_id users_names
|
||||
120001a080000542 guser01
|
||||
120001a080000542 guser02
|
||||
drop view v1, v2;
|
||||
drop table t1, t2;
|
||||
|
@ -2018,3 +2018,36 @@ create view v1 as select strcmp(f1,'a') from t1;
|
||||
select * from v1;
|
||||
drop view v1;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# BUG#12941
|
||||
#
|
||||
create table t1 (
|
||||
r_object_id char(16) NOT NULL,
|
||||
group_name varchar(32) NOT NULL
|
||||
) engine = InnoDB;
|
||||
|
||||
create table t2 (
|
||||
r_object_id char(16) NOT NULL,
|
||||
i_position int(11) NOT NULL,
|
||||
users_names varchar(32) default NULL
|
||||
) Engine = InnoDB;
|
||||
|
||||
create view v1 as select r_object_id, group_name from t1;
|
||||
create view v2 as select r_object_id, i_position, users_names from t2;
|
||||
|
||||
create unique index r_object_id on t1(r_object_id);
|
||||
create index group_name on t1(group_name);
|
||||
create unique index r_object_id_i_position on t2(r_object_id,i_position);
|
||||
create index users_names on t2(users_names);
|
||||
|
||||
insert into t1 values('120001a080000542','tstgroup1');
|
||||
insert into t2 values('120001a080000542',-1, 'guser01');
|
||||
insert into t2 values('120001a080000542',-2, 'guser02');
|
||||
|
||||
select v1.r_object_id, v2.users_names from v1, v2
|
||||
where (v1.group_name='tstgroup1') and v2.r_object_id=v1.r_object_id
|
||||
order by users_names;
|
||||
|
||||
drop view v1, v2;
|
||||
drop table t1, t2;
|
||||
|
@ -8054,12 +8054,17 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
bool table_cant_handle_bit_fields,
|
||||
uint convert_blob_length)
|
||||
{
|
||||
Item::Type orig_type;
|
||||
Item *orig_item;
|
||||
|
||||
if (type != Item::FIELD_ITEM &&
|
||||
item->real_item()->type() == Item::FIELD_ITEM &&
|
||||
(item->type() != Item::REF_ITEM ||
|
||||
!((Item_ref *) item)->depended_from))
|
||||
{
|
||||
orig_item= item;
|
||||
item= item->real_item();
|
||||
orig_type= type;
|
||||
type= Item::FIELD_ITEM;
|
||||
}
|
||||
switch (type) {
|
||||
@ -8075,29 +8080,34 @@ Field *create_tmp_field(THD *thd, TABLE *table,Item *item, Item::Type type,
|
||||
case Item::DEFAULT_VALUE_ITEM:
|
||||
{
|
||||
Item_field *field= (Item_field*) item;
|
||||
bool orig_modify= modify_item;
|
||||
Field *result;
|
||||
if (orig_type == Item::REF_ITEM)
|
||||
modify_item= 0;
|
||||
/*
|
||||
If item have to be able to store NULLs but underlaid field can't do it,
|
||||
create_tmp_field_from_field() can't be used for tmp field creation.
|
||||
*/
|
||||
if (field->maybe_null && !field->field->maybe_null())
|
||||
{
|
||||
Field *res= create_tmp_field_from_item(thd, item, table, NULL,
|
||||
result= create_tmp_field_from_item(thd, item, table, NULL,
|
||||
modify_item, convert_blob_length);
|
||||
*from_field= field->field;
|
||||
if (res && modify_item)
|
||||
((Item_field*)item)->result_field= res;
|
||||
return res;
|
||||
}
|
||||
|
||||
if (table_cant_handle_bit_fields &&
|
||||
field->field->type() == FIELD_TYPE_BIT)
|
||||
return create_tmp_field_from_item(thd, item, table, copy_func,
|
||||
if (result && modify_item)
|
||||
((Item_field*)item)->result_field= result;
|
||||
}
|
||||
else if (table_cant_handle_bit_fields && field->field->type() == FIELD_TYPE_BIT)
|
||||
result= create_tmp_field_from_item(thd, item, table, copy_func,
|
||||
modify_item, convert_blob_length);
|
||||
return create_tmp_field_from_field(thd, (*from_field= field->field),
|
||||
else
|
||||
result= create_tmp_field_from_field(thd, (*from_field= field->field),
|
||||
item->name, table,
|
||||
modify_item ? (Item_field*) item :
|
||||
NULL,
|
||||
convert_blob_length);
|
||||
if (orig_type == Item::REF_ITEM && orig_modify)
|
||||
((Item_ref*)orig_item)->set_result_field(result);
|
||||
return result;
|
||||
}
|
||||
/* Fall through */
|
||||
case Item::FUNC_ITEM:
|
||||
|
Reference in New Issue
Block a user