BitKeeper/deleted/.del-sort.c~e2e56b5a37ce86f4:
  Auto merged
client/mysql.cc:
  Auto merged
client/mysqlbinlog.cc:
  Auto merged
client/mysqldump.c:
  Auto merged
client/mysqltest.c:
  Auto merged
myisam/ft_boolean_search.c:
  Auto merged
myisam/mi_packrec.c:
  Auto merged
myisam/sort.c:
  Auto merged
mysql-test/r/fulltext.result:
  Auto merged
sql/item_create.cc:
  Auto merged
sql/item_strfunc.cc:
  Auto merged
sql/item_timefunc.cc:
  Auto merged
sql/log.cc:
  Auto merged
sql/set_var.cc:
  Auto merged
sql/slave.cc:
  Auto merged
sql/sql_acl.h:
  Auto merged
sql/sql_analyse.cc:
  Auto merged
sql/sql_cache.cc:
  Auto merged
sql/sql_db.cc:
  Auto merged
sql/tztime.cc:
  Auto merged
tests/client_test.c:
  Auto merged
This commit is contained in:
unknown 2005-01-24 19:41:42 +01:00
commit a82fd1eaec
33 changed files with 157 additions and 145 deletions

View File

@ -1430,12 +1430,6 @@ static void build_completion_hash(bool rehash, bool write_info)
if (status.batch || quick || !current_db) if (status.batch || quick || !current_db)
DBUG_VOID_RETURN; // We don't need completion in batches DBUG_VOID_RETURN; // We don't need completion in batches
if (tables)
{
mysql_free_result(tables);
tables=0;
}
/* hash SQL commands */ /* hash SQL commands */
while (cmd->name) { while (cmd->name) {
add_word(&ht,(char*) cmd->name); add_word(&ht,(char*) cmd->name);
@ -1681,7 +1675,7 @@ static int com_server_help(String *buffer __attribute__((unused)),
else if (num_fields >= 2 && num_rows) else if (num_fields >= 2 && num_rows)
{ {
init_pager(); init_pager();
char last_char; char last_char= 0;
int num_name= 0, num_cat= 0; int num_name= 0, num_cat= 0;
LINT_INIT(num_name); LINT_INIT(num_name);
@ -1693,7 +1687,6 @@ static int com_server_help(String *buffer __attribute__((unused)),
put_info("To make a more specific request, please type 'help <item>',\nwhere <item> is one of the following", INFO_INFO); put_info("To make a more specific request, please type 'help <item>',\nwhere <item> is one of the following", INFO_INFO);
num_name= 0; num_name= 0;
num_cat= 1; num_cat= 1;
last_char= '_';
} }
else if ((cur= mysql_fetch_row(result))) else if ((cur= mysql_fetch_row(result)))
{ {

View File

@ -780,11 +780,7 @@ static int check_master_version(MYSQL* mysql,
if (mysql_query(mysql, "SELECT VERSION()") || if (mysql_query(mysql, "SELECT VERSION()") ||
!(res = mysql_store_result(mysql))) !(res = mysql_store_result(mysql)))
{ die("Error checking master version: %s", mysql_error(mysql));
mysql_close(mysql);
die("Error checking master version: %s",
mysql_error(mysql));
}
if (!(row = mysql_fetch_row(res))) if (!(row = mysql_fetch_row(res)))
{ {
mysql_free_result(res); mysql_free_result(res);

View File

@ -2436,7 +2436,6 @@ static const char *check_if_ignore_table(const char *table_name)
fprintf(stderr, fprintf(stderr,
"Error: Couldn't read status information for table %s (%s)\n", "Error: Couldn't read status information for table %s (%s)\n",
table_name, mysql_error(sock)); table_name, mysql_error(sock));
if (res)
mysql_free_result(res); mysql_free_result(res);
return 0; /* assume table is ok */ return 0; /* assume table is ok */
} }

View File

@ -733,9 +733,10 @@ VAR* var_get(const char* var_name, const char** var_name_end, my_bool raw,
die("Empty variable"); die("Empty variable");
} }
length= (uint) (var_name - save_var_name); length= (uint) (var_name - save_var_name);
if (length >= MAX_VAR_NAME)
die("Too long variable name: %s", save_var_name);
if (!(v = (VAR*) hash_search(&var_hash, save_var_name, length)) && if (!(v = (VAR*) hash_search(&var_hash, save_var_name, length)))
length < MAX_VAR_NAME)
{ {
char buff[MAX_VAR_NAME+1]; char buff[MAX_VAR_NAME+1];
strmake(buff, save_var_name, length); strmake(buff, save_var_name, length);

View File

@ -346,11 +346,12 @@ static void _ftb_init_index_search(FT_INFO *ftb)
if (ftbe->flags & FTB_FLAG_NO || /* 2 */ if (ftbe->flags & FTB_FLAG_NO || /* 2 */
ftbe->up->ythresh - ftbe->up->yweaks >1) /* 1 */ ftbe->up->ythresh - ftbe->up->yweaks >1) /* 1 */
{ {
FTB_EXPR *top_ftbe=ftbe->up->up; FTB_EXPR *top_ftbe=ftbe->up;
ftbw->docid[0]=HA_OFFSET_ERROR; ftbw->docid[0]=HA_OFFSET_ERROR;
for (ftbe=ftbw->up; ftbe != top_ftbe; ftbe=ftbe->up) for (ftbe=(FTB_EXPR *)ftbw;
if (!(ftbe->flags & FTB_FLAG_NO)) ftbe != top_ftbe && !(ftbe->flags & FTB_FLAG_NO);
ftbe->yweaks++; ftbe=ftbe->up)
ftbe->up->yweaks++;
ftbe=0; ftbe=0;
break; break;
} }

View File

@ -184,21 +184,14 @@ my_bool _mi_read_pack_info(MI_INFO *info, pbool fix_keys)
my_malloc((length+OFFSET_TABLE_SIZE)*sizeof(uint16)+ my_malloc((length+OFFSET_TABLE_SIZE)*sizeof(uint16)+
(uint) (share->pack.header_length+7), (uint) (share->pack.header_length+7),
MYF(MY_WME | MY_ZEROFILL)))) MYF(MY_WME | MY_ZEROFILL))))
{
my_free((gptr) share->decode_trees,MYF(0));
goto err1; goto err1;
}
tmp_buff=share->decode_tables+length; tmp_buff=share->decode_tables+length;
disk_cache=(byte*) (tmp_buff+OFFSET_TABLE_SIZE); disk_cache=(byte*) (tmp_buff+OFFSET_TABLE_SIZE);
if (my_read(file,disk_cache, if (my_read(file,disk_cache,
(uint) (share->pack.header_length-sizeof(header)), (uint) (share->pack.header_length-sizeof(header)),
MYF(MY_NABP))) MYF(MY_NABP)))
{
my_free((gptr) share->decode_trees,MYF(0));
my_free((gptr) share->decode_tables,MYF(0));
goto err2; goto err2;
}
huff_tree_bits=max_bit(trees ? trees-1 : 0); huff_tree_bits=max_bit(trees ? trees-1 : 0);
init_bit_buffer(&bit_buff, (uchar*) disk_cache, init_bit_buffer(&bit_buff, (uchar*) disk_cache,

View File

@ -953,8 +953,7 @@ int rtree_delete(MI_INFO *info, uint keynr, uchar *key, uint key_length)
goto err1; goto err1;
nod_flag = mi_test_if_nod(info->buff); nod_flag = mi_test_if_nod(info->buff);
page_size = mi_getint(info->buff); page_size = mi_getint(info->buff);
if (nod_flag && (page_size == 2 + key_length + if (nod_flag && (page_size == 2 + key_length + nod_flag))
(nod_flag ? nod_flag : info->s->base.rec_reflength)))
{ {
my_off_t new_root = _mi_kpos(nod_flag, my_off_t new_root = _mi_kpos(nod_flag,
rt_PAGE_FIRST_KEY(info->buff, nod_flag)); rt_PAGE_FIRST_KEY(info->buff, nod_flag));

View File

@ -162,7 +162,10 @@ int _create_index_by_sort(MI_SORT_PARAM *info,my_bool no_messages,
{ {
if (my_init_dynamic_array(&buffpek, sizeof(BUFFPEK), maxbuffer, if (my_init_dynamic_array(&buffpek, sizeof(BUFFPEK), maxbuffer,
maxbuffer/2)) maxbuffer/2))
{
my_free((gptr) sort_keys,MYF(0)); my_free((gptr) sort_keys,MYF(0));
sort_keys= 0;
}
else else
break; break;
} }

View File

@ -148,6 +148,9 @@ select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN B
a b a b
select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE);
a b a b
select * from t1 where MATCH a,b AGAINST ('+collections -supp* -foobar*' IN BOOLEAN MODE);
a b
Full-text indexes are called collections
select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
a b a b
select * from t1 where MATCH a,b AGAINST('"space model' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST('"space model' IN BOOLEAN MODE);

View File

@ -67,6 +67,7 @@ select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(support collections) +foobar*' IN BOOLEAN MODE);
select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('+(+(support collections)) +foobar*' IN BOOLEAN MODE);
select * from t1 where MATCH a,b AGAINST ('+collections -supp* -foobar*' IN BOOLEAN MODE);
select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE); select * from t1 where MATCH a,b AGAINST ('"xt indexes"' IN BOOLEAN MODE);
# bug#2708, bug#3870 crash # bug#2708, bug#3870 crash

View File

@ -352,6 +352,7 @@ int init_key_cache(KEY_CACHE *keycache, uint key_cache_block_size,
MYF(0)))) MYF(0))))
break; break;
my_large_free(keycache->block_mem, MYF(0)); my_large_free(keycache->block_mem, MYF(0));
keycache->block_mem= 0;
} }
if (blocks < 8) if (blocks < 8)
{ {

View File

@ -275,7 +275,11 @@ static void safe_hash_change(SAFE_HASH *hash, byte *old_data, byte *new_data)
if (entry->data == old_data) if (entry->data == old_data)
{ {
if (new_data == hash->default_value) if (new_data == hash->default_value)
{
if ((*entry->prev= entry->next))
entry->next->prev= entry->prev;
hash_delete(&hash->hash, (byte*) entry); hash_delete(&hash->hash, (byte*) entry);
}
else else
entry->data= new_data; entry->data= new_data;
} }

View File

@ -248,7 +248,7 @@ void thr_end_alarm(thr_alarm_t *alarmed)
if (alarm_data->malloced) if (alarm_data->malloced)
my_free((gptr) alarm_data,MYF(0)); my_free((gptr) alarm_data,MYF(0));
found++; found++;
#ifndef DBUG_OFF #ifdef DBUG_OFF
break; break;
#endif #endif
} }

View File

@ -21,7 +21,7 @@
char * char *
strdup(const char *s){ strdup(const char *s){
void *p2; void *p2;
p2 = malloc(strlen(s)+1); if ((p2 = malloc(strlen(s)+1)))
strcpy(p2, s); strcpy(p2, s);
return p2; return p2;
} }

View File

@ -367,14 +367,11 @@ Item *create_func_space(Item *a)
Item *sp; Item *sp;
if (cs->mbminlen > 1) if (cs->mbminlen > 1)
{
sp= new Item_string("",0,cs);
if (sp)
{ {
uint dummy_errors; uint dummy_errors;
sp= new Item_string("",0,cs);
sp->str_value.copy(" ", 1, &my_charset_latin1, cs, &dummy_errors); sp->str_value.copy(" ", 1, &my_charset_latin1, cs, &dummy_errors);
} }
}
else else
{ {
sp= new Item_string(" ",1,cs); sp= new Item_string(" ",1,cs);

View File

@ -2519,6 +2519,9 @@ String* Item_func_export_set::val_str(String* str)
case 3: case 3:
sep_buf.set(",", 1, default_charset()); sep_buf.set(",", 1, default_charset());
sep = &sep_buf; sep = &sep_buf;
break;
default:
DBUG_ASSERT(0); // cannot happen
} }
null_value=0; null_value=0;

View File

@ -2131,20 +2131,25 @@ void Item_char_typecast::print(String *str)
String *Item_char_typecast::val_str(String *str) String *Item_char_typecast::val_str(String *str)
{ {
DBUG_ASSERT(fixed == 1); DBUG_ASSERT(fixed == 1);
String *res, *res1; String *res;
uint32 length; uint32 length;
if (!charset_conversion && !(res= args[0]->val_str(str))) #if 0
if (!charset_conversion)
{
if (!(res= args[0]->val_str(str)))
{ {
null_value= 1; null_value= 1;
return 0; return 0;
} }
}
else else
#endif
{ {
// Convert character set if differ // Convert character set if differ
uint dummy_errors; uint dummy_errors;
if (!(res1= args[0]->val_str(&tmp_value)) || if (!(res= args[0]->val_str(&tmp_value)) ||
str->copy(res1->ptr(), res1->length(), res1->charset(), str->copy(res->ptr(), res->length(), res->charset(),
cast_cs, &dummy_errors)) cast_cs, &dummy_errors))
{ {
null_value= 1; null_value= 1;

View File

@ -2257,9 +2257,9 @@ void print_buffer_to_nt_eventlog(enum loglevel level, char *buff,
DBUG_ENTER("print_buffer_to_nt_eventlog"); DBUG_ENTER("print_buffer_to_nt_eventlog");
buffptr= buff; buffptr= buff;
if (length > (uint)(buffLen-4)) if (length > (uint)(buffLen-5))
{ {
char *newBuff= new char[length + 4]; char *newBuff= new char[length + 5];
strcpy(newBuff, buff); strcpy(newBuff, buff);
buffptr= newBuff; buffptr= newBuff;
} }

View File

@ -3033,8 +3033,8 @@ int set_var_password::check(THD *thd)
if (!user->host.str) if (!user->host.str)
user->host.str= (char*) thd->host_or_ip; user->host.str= (char*) thd->host_or_ip;
/* Returns 1 as the function sends error to client */ /* Returns 1 as the function sends error to client */
return check_change_password(thd, user->host.str, user->user.str, password) ? return check_change_password(thd, user->host.str, user->user.str,
1 : 0; password, strlen(password)) ? 1 : 0;
#else #else
return 0; return 0;
#endif #endif

View File

@ -2617,8 +2617,9 @@ int st_relay_log_info::wait_for_pos(THD* thd, String* log_name,
*/ */
ulong log_name_extension; ulong log_name_extension;
char log_name_tmp[FN_REFLEN]; //make a char[] from String char log_name_tmp[FN_REFLEN]; //make a char[] from String
char *end= strmake(log_name_tmp, log_name->ptr(), min(log_name->length(),
FN_REFLEN-1)); strmake(log_name_tmp, log_name->ptr(), min(log_name->length(), FN_REFLEN-1));
char *p= fn_ext(log_name_tmp); char *p= fn_ext(log_name_tmp);
char *p_end; char *p_end;
if (!*p || log_pos<0) if (!*p || log_pos<0)

View File

@ -1240,6 +1240,10 @@ bool acl_check_host(const char *host, const char *ip)
thd THD thd THD
host hostname for the user host hostname for the user
user user name user user name
new_password new password
NOTE:
new_password cannot be NULL
RETURN VALUE RETURN VALUE
0 OK 0 OK
@ -1247,7 +1251,7 @@ bool acl_check_host(const char *host, const char *ip)
*/ */
bool check_change_password(THD *thd, const char *host, const char *user, bool check_change_password(THD *thd, const char *host, const char *user,
char *new_password) char *new_password, uint new_password_len)
{ {
if (!initialized) if (!initialized)
{ {
@ -1296,12 +1300,13 @@ bool check_change_password(THD *thd, const char *host, const char *user,
bool change_password(THD *thd, const char *host, const char *user, bool change_password(THD *thd, const char *host, const char *user,
char *new_password) char *new_password)
{ {
uint new_password_len= strlen(new_password);
DBUG_ENTER("change_password"); DBUG_ENTER("change_password");
DBUG_PRINT("enter",("host: '%s' user: '%s' new_password: '%s'", DBUG_PRINT("enter",("host: '%s' user: '%s' new_password: '%s'",
host,user,new_password)); host,user,new_password));
DBUG_ASSERT(host != 0); // Ensured by parent DBUG_ASSERT(host != 0); // Ensured by parent
if (check_change_password(thd, host, user, new_password)) if (check_change_password(thd, host, user, new_password, new_password_len))
DBUG_RETURN(1); DBUG_RETURN(1);
VOID(pthread_mutex_lock(&acl_cache->lock)); VOID(pthread_mutex_lock(&acl_cache->lock));
@ -1313,7 +1318,6 @@ bool change_password(THD *thd, const char *host, const char *user,
DBUG_RETURN(1); DBUG_RETURN(1);
} }
/* update loaded acl entry: */ /* update loaded acl entry: */
uint new_password_len= new_password ? strlen(new_password) : 0;
set_user_salt(acl_user, new_password, new_password_len); set_user_salt(acl_user, new_password, new_password_len);
if (update_user_table(thd, if (update_user_table(thd,
@ -3241,7 +3245,7 @@ end:
SYNOPSIS SYNOPSIS
grant_reload() grant_reload()
thd Thread handler thd Thread handler (can be NULL)
NOTES NOTES
Locked tables are checked by acl_init and doesn't have to be checked here Locked tables are checked by acl_init and doesn't have to be checked here

View File

@ -176,7 +176,7 @@ int acl_getroot(THD *thd, USER_RESOURCES *mqh, const char *passwd,
int acl_getroot_no_password(THD *thd); int acl_getroot_no_password(THD *thd);
bool acl_check_host(const char *host, const char *ip); bool acl_check_host(const char *host, const char *ip);
bool check_change_password(THD *thd, const char *host, const char *user, bool check_change_password(THD *thd, const char *host, const char *user,
char *password); char *password, uint password_len);
bool change_password(THD *thd, const char *host, const char *user, bool change_password(THD *thd, const char *host, const char *user,
char *password); char *password);
bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &user_list, bool mysql_grant(THD *thd, const char *db, List <LEX_USER> &user_list,

View File

@ -70,6 +70,9 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
field_info **f_info; field_info **f_info;
DBUG_ENTER("proc_analyse_init"); DBUG_ENTER("proc_analyse_init");
if (!pc)
DBUG_RETURN(0);
if (!(param = param->next)) if (!(param = param->next))
{ {
pc->max_tree_elements = MAX_TREE_ELEMENTS; pc->max_tree_elements = MAX_TREE_ELEMENTS;
@ -81,33 +84,30 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
if ((*param->item)->type() != Item::INT_ITEM || if ((*param->item)->type() != Item::INT_ITEM ||
(*param->item)->val_real() < 0) (*param->item)->val_real() < 0)
{ {
delete pc;
my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name); my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name);
DBUG_RETURN(0); goto err;
} }
pc->max_tree_elements = (uint) (*param->item)->val_int(); pc->max_tree_elements = (uint) (*param->item)->val_int();
param = param->next; param = param->next;
if (param->next) // no third parameter possible if (param->next) // no third parameter possible
{ {
my_error(ER_WRONG_PARAMCOUNT_TO_PROCEDURE, MYF(0), proc_name); my_error(ER_WRONG_PARAMCOUNT_TO_PROCEDURE, MYF(0), proc_name);
DBUG_RETURN(0); goto err;
} }
// second parameter // second parameter
if ((*param->item)->type() != Item::INT_ITEM || if ((*param->item)->type() != Item::INT_ITEM ||
(*param->item)->val_real() < 0) (*param->item)->val_real() < 0)
{ {
delete pc;
my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name); my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name);
DBUG_RETURN(0); goto err;
} }
pc->max_treemem = (uint) (*param->item)->val_int(); pc->max_treemem = (uint) (*param->item)->val_int();
} }
else if ((*param->item)->type() != Item::INT_ITEM || else if ((*param->item)->type() != Item::INT_ITEM ||
(*param->item)->val_real() < 0) (*param->item)->val_real() < 0)
{ {
delete pc;
my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name); my_error(ER_WRONG_PARAMETERS_TO_PROCEDURE, MYF(0), proc_name);
DBUG_RETURN(0); goto err;
} }
// if only one parameter was given, it will be the value of max_tree_elements // if only one parameter was given, it will be the value of max_tree_elements
else else
@ -116,12 +116,13 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
pc->max_treemem = MAX_TREEMEM; pc->max_treemem = MAX_TREEMEM;
} }
if (!pc || !(pc->f_info = (field_info**) if (!(pc->f_info=
sql_alloc(sizeof(field_info*)*field_list.elements))) (field_info**)sql_alloc(sizeof(field_info*)*field_list.elements)))
DBUG_RETURN(0); goto err;
pc->f_end = pc->f_info + field_list.elements; pc->f_end = pc->f_info + field_list.elements;
pc->fields = field_list; pc->fields = field_list;
{
List_iterator_fast<Item> it(pc->fields); List_iterator_fast<Item> it(pc->fields);
f_info = pc->f_info; f_info = pc->f_info;
@ -143,7 +144,11 @@ proc_analyse_init(THD *thd, ORDER *param, select_result *result,
if (item->result_type() == STRING_RESULT) if (item->result_type() == STRING_RESULT)
*f_info++ = new field_str(item, pc); *f_info++ = new field_str(item, pc);
} }
}
DBUG_RETURN(pc); DBUG_RETURN(pc);
err:
delete pc;
DBUG_RETURN(0);
} }

View File

@ -261,13 +261,19 @@ void free_io_cache(TABLE *table)
DBUG_VOID_RETURN; DBUG_VOID_RETURN;
} }
/* Close all tables which aren't in use by any thread */ /*
Close all tables which aren't in use by any thread
THD can be NULL, but then if_wait_for_refresh must be FALSE
and tables must be NULL.
*/
bool close_cached_tables(THD *thd, bool if_wait_for_refresh, bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
TABLE_LIST *tables) TABLE_LIST *tables)
{ {
bool result=0; bool result=0;
DBUG_ENTER("close_cached_tables"); DBUG_ENTER("close_cached_tables");
DBUG_ASSERT(thd || (!if_wait_for_refresh && !tables));
VOID(pthread_mutex_lock(&LOCK_open)); VOID(pthread_mutex_lock(&LOCK_open));
if (!tables) if (!tables)
@ -343,7 +349,6 @@ bool close_cached_tables(THD *thd, bool if_wait_for_refresh,
VOID(pthread_mutex_unlock(&LOCK_open)); VOID(pthread_mutex_unlock(&LOCK_open));
if (if_wait_for_refresh) if (if_wait_for_refresh)
{ {
THD *thd=current_thd;
pthread_mutex_lock(&thd->mysys_var->mutex); pthread_mutex_lock(&thd->mysys_var->mutex);
thd->mysys_var->current_mutex= 0; thd->mysys_var->current_mutex= 0;
thd->mysys_var->current_cond= 0; thd->mysys_var->current_cond= 0;
@ -2401,11 +2406,7 @@ find_field_in_tables(THD *thd, Item_ident *item, TABLE_LIST *tables,
strxnmov(buff,sizeof(buff)-1,db,".",table_name,NullS); strxnmov(buff,sizeof(buff)-1,db,".",table_name,NullS);
table_name=buff; table_name=buff;
} }
if (report_error == REPORT_ALL_ERRORS ||
report_error == REPORT_EXCEPT_NON_UNIQUE)
my_error(ER_UNKNOWN_TABLE, MYF(0), table_name, thd->where); my_error(ER_UNKNOWN_TABLE, MYF(0), table_name, thd->where);
else
return (Field*) not_found_field;
} }
else else
if (report_error == REPORT_ALL_ERRORS || if (report_error == REPORT_ALL_ERRORS ||

View File

@ -1217,7 +1217,7 @@ void Query_cache::invalidate(CHANGED_TABLE_LIST *tables_used)
*/ */
void Query_cache::invalidate_locked_for_write(TABLE_LIST *tables_used) void Query_cache::invalidate_locked_for_write(TABLE_LIST *tables_used)
{ {
DBUG_ENTER("Query_cache::invalidate (changed table list)"); DBUG_ENTER("Query_cache::invalidate_locked_for_write");
if (query_cache_size > 0 && tables_used) if (query_cache_size > 0 && tables_used)
{ {
STRUCT_LOCK(&structure_guard_mutex); STRUCT_LOCK(&structure_guard_mutex);

View File

@ -537,7 +537,7 @@ bool mysql_alter_db(THD *thd, const char *db, HA_CREATE_INFO *create_info)
*/ */
if (thd->db && !strcmp(thd->db,db)) if (thd->db && !strcmp(thd->db,db))
{ {
thd->db_charset= (create_info && create_info->default_table_charset) ? thd->db_charset= create_info->default_table_charset ?
create_info->default_table_charset : create_info->default_table_charset :
thd->variables.collation_server; thd->variables.collation_server;
thd->variables.collation_database= thd->db_charset; thd->variables.collation_database= thd->db_charset;
@ -643,7 +643,7 @@ bool mysql_rm_db(THD *thd,char *db,bool if_exists, bool silent)
my_casedn_str(files_charset_info, tmp_db); my_casedn_str(files_charset_info, tmp_db);
db= tmp_db; db= tmp_db;
} }
if (!silent && deleted>=0 && thd) if (!silent && deleted>=0)
{ {
const char *query; const char *query;
ulong query_length; ulong query_length;

View File

@ -1603,9 +1603,6 @@ void st_select_lex::print_limit(THD *thd, String *str)
return; return;
} }
if (!thd)
thd= current_thd;
if (explicit_limit) if (explicit_limit)
{ {
str->append(" limit ", 7); str->append(" limit ", 7);

View File

@ -899,6 +899,8 @@ static int check_connection(THD *thd)
char *db= passwd; char *db= passwd;
char db_buff[NAME_LEN+1]; // buffer to store db in utf8 char db_buff[NAME_LEN+1]; // buffer to store db in utf8
char user_buff[USERNAME_LENGTH+1]; // buffer to store user in utf8 char user_buff[USERNAME_LENGTH+1]; // buffer to store user in utf8
uint dummy_errors;
/* /*
Old clients send null-terminated string as password; new clients send Old clients send null-terminated string as password; new clients send
the size (1 byte) + string (not null-terminated). Hence in case of empty the size (1 byte) + string (not null-terminated). Hence in case of empty
@ -912,7 +914,6 @@ static int check_connection(THD *thd)
/* Since 4.1 all database names are stored in utf8 */ /* Since 4.1 all database names are stored in utf8 */
if (db) if (db)
{ {
uint dummy_errors;
db_buff[copy_and_convert(db_buff, sizeof(db_buff)-1, db_buff[copy_and_convert(db_buff, sizeof(db_buff)-1,
system_charset_info, system_charset_info,
db, strlen(db), db, strlen(db),
@ -920,14 +921,10 @@ static int check_connection(THD *thd)
db= db_buff; db= db_buff;
} }
if (user)
{
uint dummy_errors;
user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1, user_buff[copy_and_convert(user_buff, sizeof(user_buff)-1,
system_charset_info, user, strlen(user), system_charset_info, user, strlen(user),
thd->charset(), &dummy_errors)]= '\0'; thd->charset(), &dummy_errors)]= '\0';
user= user_buff; user= user_buff;
}
if (thd->user) if (thd->user)
x_free(thd->user); x_free(thd->user);
@ -3467,8 +3464,7 @@ unsent_create_error:
case SQLCOM_GRANT: case SQLCOM_GRANT:
{ {
if (check_access(thd, lex->grant | lex->grant_tot_col | GRANT_ACL, if (check_access(thd, lex->grant | lex->grant_tot_col | GRANT_ACL,
((first_table && first_table->db) ? first_table ? first_table->db : select_lex->db,
first_table->db : select_lex->db),
first_table ? &first_table->grant.privilege : 0, first_table ? &first_table->grant.privilege : 0,
first_table ? 0 : 1, 0)) first_table ? 0 : 1, 0))
goto error; goto error;

View File

@ -1977,10 +1977,10 @@ static bool mysql_admin_table(THD* thd, TABLE_LIST* tables,
for (table= tables; table; table= table->next_local) for (table= tables; table; table= table->next_local)
{ {
char table_name[NAME_LEN*2+2]; char table_name[NAME_LEN*2+2];
char* db = (table->db) ? table->db : thd->db; char* db = table->db;
bool fatal_error=0; bool fatal_error=0;
strxmov(table_name,db ? db : "",".",table->table_name,NullS);
strxmov(table_name, db, ".", table->table_name, NullS);
thd->open_options|= extra_open_options; thd->open_options|= extra_open_options;
table->lock_type= lock_type; table->lock_type= lock_type;
/* open only one table from local list of command */ /* open only one table from local list of command */

View File

@ -120,7 +120,7 @@ int mysql_update(THD *thd,
bool used_key_is_modified, transactional_table, log_delayed; bool used_key_is_modified, transactional_table, log_delayed;
int res; int res;
int error=0; int error=0;
uint used_index; uint used_index= MAX_KEY;
#ifndef NO_EMBEDDED_ACCESS_CHECKS #ifndef NO_EMBEDDED_ACCESS_CHECKS
uint want_privilege; uint want_privilege;
#endif #endif
@ -134,7 +134,6 @@ int mysql_update(THD *thd,
SELECT_LEX *select_lex= &thd->lex->select_lex; SELECT_LEX *select_lex= &thd->lex->select_lex;
DBUG_ENTER("mysql_update"); DBUG_ENTER("mysql_update");
LINT_INIT(used_index);
LINT_INIT(timestamp_query_id); LINT_INIT(timestamp_query_id);
if (open_tables(thd, table_list, &table_count)) if (open_tables(thd, table_list, &table_count))
@ -273,7 +272,7 @@ int mysql_update(THD *thd,
matching rows before updating the table! matching rows before updating the table!
*/ */
table->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS); table->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS);
if ( (used_index != MAX_KEY) && old_used_keys.is_set(used_index)) if (used_index < MAX_KEY && old_used_keys.is_set(used_index))
{ {
table->key_read=1; table->key_read=1;
table->file->extra(HA_EXTRA_KEYREAD); table->file->extra(HA_EXTRA_KEYREAD);

View File

@ -342,12 +342,14 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
VOID(my_seek(file,pos,MY_SEEK_SET,MYF(0))); VOID(my_seek(file,pos,MY_SEEK_SET,MYF(0)));
if (my_read(file,(byte*) head,288,MYF(MY_NABP))) if (my_read(file,(byte*) head,288,MYF(MY_NABP)))
goto err; goto err;
#ifdef HAVE_CRYPTED_FRM
if (crypted) if (crypted)
{ {
crypted->decode((char*) head+256,288-256); crypted->decode((char*) head+256,288-256);
if (sint2korr(head+284) != 0) // Should be 0 if (sint2korr(head+284) != 0) // Should be 0
goto err; // Wrong password goto err; // Wrong password
} }
#endif
share->fields= uint2korr(head+258); share->fields= uint2korr(head+258);
pos= uint2korr(head+260); /* Length of all screens */ pos= uint2korr(head+260); /* Length of all screens */
@ -375,12 +377,14 @@ int openfrm(THD *thd, const char *name, const char *alias, uint db_stat,
pos+ (uint) (n_length+int_length+com_length)); pos+ (uint) (n_length+int_length+com_length));
if (read_string(file,(gptr*) &disk_buff,read_length)) if (read_string(file,(gptr*) &disk_buff,read_length))
goto err; /* purecov: inspected */ goto err; /* purecov: inspected */
#ifdef HAVE_CRYPTED_FRM
if (crypted) if (crypted)
{ {
crypted->decode((char*) disk_buff,read_length); crypted->decode((char*) disk_buff,read_length);
delete crypted; delete crypted;
crypted=0; crypted=0;
} }
#endif
strpos= disk_buff+pos; strpos= disk_buff+pos;
share->intervals= (TYPELIB*) (field_ptr+share->fields+1); share->intervals= (TYPELIB*) (field_ptr+share->fields+1);

View File

@ -1861,7 +1861,7 @@ tz_load_from_open_tables(const String *tz_name, TABLE_LIST *tz_tables)
{ {
ttid= (uint)table->field[1]->val_int(); ttid= (uint)table->field[1]->val_int();
if (ttid > TZ_MAX_TYPES) if (ttid >= TZ_MAX_TYPES)
{ {
sql_print_error("Error while loading time zone description from " sql_print_error("Error while loading time zone description from "
"mysql.time_zone_transition_type table: too big " "mysql.time_zone_transition_type table: too big "

View File

@ -11406,6 +11406,12 @@ static void test_bug5194()
if (bind == 0 || query == 0 || param_str == 0) if (bind == 0 || query == 0 || param_str == 0)
{ {
fprintf(stderr, "Can't allocate enough memory for query structs\n"); fprintf(stderr, "Can't allocate enough memory for query structs\n");
if (bind)
free(bind);
if (query)
free(query);
if (param_str)
free(param_str);
return; return;
} }