1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Merge gleb.loc:/home/uchum/work/bk/5.0-opt-30287

into  gleb.loc:/home/uchum/work/bk/5.1-opt
This commit is contained in:
gshchepa/uchum@gleb.loc
2007-08-21 19:46:29 +05:00
3 changed files with 16 additions and 10 deletions

View File

@ -1801,6 +1801,8 @@ void Item_field::set_field(Field *field_par)
unsigned_flag=test(field_par->flags & UNSIGNED_FLAG); unsigned_flag=test(field_par->flags & UNSIGNED_FLAG);
collation.set(field_par->charset(), field_par->derivation()); collation.set(field_par->charset(), field_par->derivation());
fixed= 1; fixed= 1;
if (field->table->s->tmp_table == SYSTEM_TMP_TABLE)
any_privileges= 0;
} }

View File

@ -9404,7 +9404,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
bool using_unique_constraint= 0; bool using_unique_constraint= 0;
bool use_packed_rows= 0; bool use_packed_rows= 0;
bool not_all_columns= !(select_options & TMP_TABLE_ALL_COLUMNS); bool not_all_columns= !(select_options & TMP_TABLE_ALL_COLUMNS);
char *tmpname, *tmppath, path[FN_REFLEN], table_name[NAME_LEN+1]; char *tmpname,path[FN_REFLEN];
uchar *pos, *group_buff, *bitmaps; uchar *pos, *group_buff, *bitmaps;
uchar *null_flags; uchar *null_flags;
Field **reg_field, **from_field, **default_field; Field **reg_field, **from_field, **default_field;
@ -9428,12 +9428,12 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
temp_pool_slot = bitmap_lock_set_next(&temp_pool); temp_pool_slot = bitmap_lock_set_next(&temp_pool);
if (temp_pool_slot != MY_BIT_NONE) // we got a slot if (temp_pool_slot != MY_BIT_NONE) // we got a slot
sprintf(table_name, "%s_%lx_%i", tmp_file_prefix, sprintf(path, "%s_%lx_%i", tmp_file_prefix,
current_pid, temp_pool_slot); current_pid, temp_pool_slot);
else else
{ {
/* if we run out of slots or we are not using tempool */ /* if we run out of slots or we are not using tempool */
sprintf(table_name, "%s%lx_%lx_%x", tmp_file_prefix,current_pid, sprintf(path,"%s%lx_%lx_%x", tmp_file_prefix,current_pid,
thd->thread_id, thd->tmp_table++); thd->thread_id, thd->tmp_table++);
} }
@ -9441,8 +9441,8 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
No need to change table name to lower case as we are only creating No need to change table name to lower case as we are only creating
MyISAM or HEAP tables here MyISAM or HEAP tables here
*/ */
fn_format(path, table_name, mysql_tmpdir, "", fn_format(path, path, mysql_tmpdir, "", MY_REPLACE_EXT|MY_UNPACK_FILENAME);
MY_REPLACE_EXT|MY_UNPACK_FILENAME);
if (group) if (group)
{ {
@ -9488,8 +9488,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
sizeof(*key_part_info)*(param->group_parts+1), sizeof(*key_part_info)*(param->group_parts+1),
&param->start_recinfo, &param->start_recinfo,
sizeof(*param->recinfo)*(field_count*2+4), sizeof(*param->recinfo)*(field_count*2+4),
&tmppath, (uint) strlen(path)+1, &tmpname, (uint) strlen(path)+1,
&tmpname, (uint) strlen(table_name)+1,
&group_buff, (group && ! using_unique_constraint ? &group_buff, (group && ! using_unique_constraint ?
param->group_length : 0), param->group_length : 0),
&bitmaps, bitmap_buffer_size(field_count)*2, &bitmaps, bitmap_buffer_size(field_count)*2,
@ -9508,8 +9507,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
DBUG_RETURN(NULL); /* purecov: inspected */ DBUG_RETURN(NULL); /* purecov: inspected */
} }
param->items_to_copy= copy_func; param->items_to_copy= copy_func;
strmov(tmppath, path); strmov(tmpname,path);
strmov(tmpname, table_name);
/* make table according to fields */ /* make table according to fields */
bzero((char*) table,sizeof(*table)); bzero((char*) table,sizeof(*table));
@ -9534,7 +9532,7 @@ create_tmp_table(THD *thd,TMP_TABLE_PARAM *param,List<Item> &fields,
table->keys_in_use_for_query.init(); table->keys_in_use_for_query.init();
table->s= share; table->s= share;
init_tmp_table_share(share, "", 0, tmpname, tmppath); init_tmp_table_share(share, "", 0, tmpname, tmpname);
share->blob_field= blob_field; share->blob_field= blob_field;
share->blob_ptr_size= mi_portable_sizeof_char_ptr; share->blob_ptr_size= mi_portable_sizeof_char_ptr;
share->db_low_byte_first=1; // True for HEAP and MyISAM share->db_low_byte_first=1; // True for HEAP and MyISAM

View File

@ -397,7 +397,13 @@ bool mysql_create_view(THD *thd, TABLE_LIST *views,
{ {
Item_field *field; Item_field *field;
if ((field= item->filed_for_view_update())) if ((field= item->filed_for_view_update()))
{
/*
any_privileges may be reset later by the Item_field::set_field
method in case of a system temporary table.
*/
field->any_privileges= 1; field->any_privileges= 1;
}
} }
} }
#endif #endif