Commit 44b35dbb authored by unknown's avatar unknown
Browse files

Merge bk-internal.mysql.com:/home/bk/mysql-5.0

into  neptunus.(none):/home/msvensson/mysql/mysql-5.0

parents 8628f2c8 027476e5
Loading
Loading
Loading
Loading
+26 −0
Original line number Diff line number Diff line
@@ -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;
+33 −0
Original line number Diff line number Diff line
@@ -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;
+20 −10
Original line number Diff line number Diff line
@@ -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 (result && modify_item)
        ((Item_field*)item)->result_field= result;
    } 

    if (table_cant_handle_bit_fields && 
        field->field->type() == FIELD_TYPE_BIT)
      return create_tmp_field_from_item(thd, item, table, copy_func,
    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: