Merge from mysql-5.5-bugteam to mysql-5.5-runtime

No conflicts
This commit is contained in:
Jon Olav Hauglid 2010-11-17 17:42:28 +01:00
commit b23c19e82f
16 changed files with 63 additions and 33 deletions

View File

@ -855,7 +855,7 @@ _rl_read_init_file (filename, include_level)
{ {
register int i; register int i;
char *buffer, *openname, *line, *end; char *buffer, *openname, *line, *end;
size_t file_size; size_t file_size = 0;
current_readline_init_file = filename; current_readline_init_file = filename;
current_readline_init_include_level = include_level; current_readline_init_include_level = include_level;

View File

@ -76,7 +76,9 @@ extern "C" {
extern void *(*my_str_malloc)(size_t); extern void *(*my_str_malloc)(size_t);
extern void (*my_str_free)(void *); extern void (*my_str_free)(void *);
#if defined(HAVE_STPCPY) #if defined(HAVE_STPCPY) && MY_GNUC_PREREQ(3, 4)
#define strmov(A,B) __builtin_stpcpy((A),(B))
#elif defined(HAVE_STPCPY)
#define strmov(A,B) stpcpy((A),(B)) #define strmov(A,B) stpcpy((A),(B))
#ifndef stpcpy #ifndef stpcpy
extern char *stpcpy(char *, const char *); /* For AIX with gcc 2.95.3 */ extern char *stpcpy(char *, const char *); /* For AIX with gcc 2.95.3 */

View File

@ -76,6 +76,11 @@
/** /**
Generic (compiler-independent) features. Generic (compiler-independent) features.
*/ */
#ifndef MY_GNUC_PREREQ
# define MY_GNUC_PREREQ(maj, min) (0)
#endif
#ifndef MY_ALIGNOF #ifndef MY_ALIGNOF
# ifdef __cplusplus # ifdef __cplusplus
template<typename type> struct my_alignof_helper { char m1; type m2; }; template<typename type> struct my_alignof_helper { char m1; type m2; };

View File

@ -607,3 +607,12 @@ SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821)))
as foo; as foo;
foo foo
2 2
#
# Bug #58137 char(0) column cause:
# my_gcvt: Assertion `width > 0 && to != ((void *)0)' failed
#
CREATE TABLE t1(a char(0));
INSERT INTO t1 (SELECT -pi());
Warnings:
Warning 1265 Data truncated for column 'a' at row 1
DROP TABLE t1;

View File

@ -464,3 +464,11 @@ SELECT -9223372036854775808 MOD -1;
--echo # --echo #
SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821))) SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821)))
as foo; as foo;
--echo #
--echo # Bug #58137 char(0) column cause:
--echo # my_gcvt: Assertion `width > 0 && to != ((void *)0)' failed
--echo #
CREATE TABLE t1(a char(0));
INSERT INTO t1 (SELECT -pi());
DROP TABLE t1;

View File

@ -68,6 +68,9 @@ const char *my_defaults_file=0;
const char *my_defaults_group_suffix=0; const char *my_defaults_group_suffix=0;
const char *my_defaults_extra_file=0; const char *my_defaults_extra_file=0;
static char my_defaults_file_buffer[FN_REFLEN];
static char my_defaults_extra_file_buffer[FN_REFLEN];
static my_bool defaults_already_read= FALSE; static my_bool defaults_already_read= FALSE;
/* Which directories are searched for options (and in which order) */ /* Which directories are searched for options (and in which order) */
@ -152,22 +155,19 @@ static char *remove_end_comment(char *ptr);
*/ */
static int static int
fn_expand(const char *filename, const char **filename_var) fn_expand(const char *filename, char *result_buf)
{ {
char dir[FN_REFLEN], buf[FN_REFLEN]; char dir[FN_REFLEN];
const int flags= MY_UNPACK_FILENAME | MY_SAFE_PATH | MY_RELATIVE_PATH; const int flags= MY_UNPACK_FILENAME | MY_SAFE_PATH | MY_RELATIVE_PATH;
const char *result_path= NULL;
DBUG_ENTER("fn_expand"); DBUG_ENTER("fn_expand");
DBUG_PRINT("enter", ("filename: %s, buf: 0x%lx", filename, (unsigned long) buf)); DBUG_PRINT("enter", ("filename: %s, result_buf: 0x%lx",
filename, (unsigned long) result_buf));
if (my_getwd(dir, sizeof(dir), MYF(0))) if (my_getwd(dir, sizeof(dir), MYF(0)))
DBUG_RETURN(3); DBUG_RETURN(3);
DBUG_PRINT("debug", ("dir: %s", dir)); DBUG_PRINT("debug", ("dir: %s", dir));
if (fn_format(buf, filename, dir, NULL, flags) == NULL || if (fn_format(result_buf, filename, dir, NULL, flags) == NULL)
(result_path= my_strdup(buf, MYF(0))) == NULL)
DBUG_RETURN(2); DBUG_RETURN(2);
DBUG_PRINT("return", ("result: %s", result_path)); DBUG_PRINT("return", ("result: %s", result_buf));
DBUG_ASSERT(result_path != NULL);
*filename_var= result_path;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
@ -224,16 +224,18 @@ int my_search_option_files(const char *conf_file, int *argc, char ***argv,
if (forced_extra_defaults && !defaults_already_read) if (forced_extra_defaults && !defaults_already_read)
{ {
int error= fn_expand(forced_extra_defaults, &my_defaults_extra_file); int error= fn_expand(forced_extra_defaults, my_defaults_extra_file_buffer);
if (error) if (error)
DBUG_RETURN(error); DBUG_RETURN(error);
my_defaults_extra_file= my_defaults_extra_file_buffer;
} }
if (forced_default_file && !defaults_already_read) if (forced_default_file && !defaults_already_read)
{ {
int error= fn_expand(forced_default_file, &my_defaults_file); int error= fn_expand(forced_default_file, my_defaults_file_buffer);
if (error) if (error)
DBUG_RETURN(error); DBUG_RETURN(error);
my_defaults_file= my_defaults_file_buffer;
} }
defaults_already_read= TRUE; defaults_already_read= TRUE;

View File

@ -3963,11 +3963,11 @@ restart:
if (!(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH | if (!(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH |
BLOCK_REASSIGNED))) BLOCK_REASSIGNED)))
{ {
struct st_hash_link *next_hash_link; struct st_hash_link *UNINIT_VAR(next_hash_link);
my_off_t next_diskpos; my_off_t UNINIT_VAR(next_diskpos);
File next_file; File UNINIT_VAR(next_file);
uint next_status; uint UNINIT_VAR(next_status);
uint hash_requests; uint UNINIT_VAR(hash_requests);
total_found++; total_found++;
found++; found++;

View File

@ -117,6 +117,7 @@ size_t nmatch;
my_regmatch_t pmatch[]; my_regmatch_t pmatch[];
int eflags; int eflags;
{ {
char *pstr = (char *) str;
register struct re_guts *g = preg->re_g; register struct re_guts *g = preg->re_g;
#ifdef REDEBUG #ifdef REDEBUG
# define GOODFLAGS(f) (f) # define GOODFLAGS(f) (f)
@ -133,7 +134,7 @@ int eflags;
if ((size_t) g->nstates <= CHAR_BIT*sizeof(states1) && if ((size_t) g->nstates <= CHAR_BIT*sizeof(states1) &&
!(eflags&REG_LARGE)) !(eflags&REG_LARGE))
return(smatcher(preg->charset, g, (char *)str, nmatch, pmatch, eflags)); return(smatcher(preg->charset, g, pstr, nmatch, pmatch, eflags));
else else
return(lmatcher(preg->charset, g, (char *)str, nmatch, pmatch, eflags)); return(lmatcher(preg->charset, g, pstr, nmatch, pmatch, eflags));
} }

View File

@ -1691,7 +1691,7 @@ static void debug_sync_execute(THD *thd, st_debug_sync_action *action)
if (action->execute) if (action->execute)
{ {
const char *old_proc_info; const char *UNINIT_VAR(old_proc_info);
action->execute--; action->execute--;

View File

@ -6327,10 +6327,13 @@ int Field_str::store(double nr)
ASSERT_COLUMN_MARKED_FOR_WRITE; ASSERT_COLUMN_MARKED_FOR_WRITE;
char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE]; char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
uint local_char_length= field_length / charset()->mbmaxlen; uint local_char_length= field_length / charset()->mbmaxlen;
size_t length; size_t length= 0;
my_bool error; my_bool error= (local_char_length == 0);
// my_gcvt() requires width > 0, and we may have a CHAR(0) column.
if (!error)
length= my_gcvt(nr, MY_GCVT_ARG_DOUBLE, local_char_length, buff, &error);
length= my_gcvt(nr, MY_GCVT_ARG_DOUBLE, local_char_length, buff, &error);
if (error) if (error)
{ {
if (table->in_use->abort_on_warning) if (table->in_use->abort_on_warning)

View File

@ -4184,7 +4184,7 @@ int handler::read_multi_range_first(KEY_MULTI_RANGE **found_range_p,
*/ */
int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p) int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
{ {
int result; int UNINIT_VAR(result);
DBUG_ENTER("handler::read_multi_range_next"); DBUG_ENTER("handler::read_multi_range_next");
/* We should not be called after the last call returned EOF. */ /* We should not be called after the last call returned EOF. */

View File

@ -2521,7 +2521,7 @@ static int exec_relay_log_event(THD* thd, Relay_log_info* rli)
if (slave_trans_retries) if (slave_trans_retries)
{ {
int temp_err; int UNINIT_VAR(temp_err);
if (exec_res && (temp_err= has_temporary_error(thd))) if (exec_res && (temp_err= has_temporary_error(thd)))
{ {
const char *errmsg; const char *errmsg;

View File

@ -7484,8 +7484,8 @@ int get_part_iter_for_interval_via_mapping(partition_info *part_info,
PARTITION_ITERATOR *part_iter) PARTITION_ITERATOR *part_iter)
{ {
Field *field= part_info->part_field_array[0]; Field *field= part_info->part_field_array[0];
uint32 max_endpoint_val; uint32 UNINIT_VAR(max_endpoint_val);
get_endpoint_func get_endpoint; get_endpoint_func UNINIT_VAR(get_endpoint);
bool can_match_multiple_values; /* is not '=' */ bool can_match_multiple_values; /* is not '=' */
uint field_len= field->pack_length_in_rec(); uint field_len= field->pack_length_in_rec();
DBUG_ENTER("get_part_iter_for_interval_via_mapping"); DBUG_ENTER("get_part_iter_for_interval_via_mapping");

View File

@ -63,7 +63,7 @@ static int FT_SUPERDOC_cmp(void* cmp_arg __attribute__((unused)),
static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
{ {
int subkeys, r; int UNINIT_VAR(subkeys), r;
uint keylen, doc_cnt; uint keylen, doc_cnt;
FT_SUPERDOC sdoc, *sptr; FT_SUPERDOC sdoc, *sptr;
TREE_ELEMENT *selem; TREE_ELEMENT *selem;

View File

@ -220,7 +220,7 @@ MYRG_INFO *myrg_parent_open(const char *parent_name,
int (*callback)(void*, const char*), int (*callback)(void*, const char*),
void *callback_param) void *callback_param)
{ {
MYRG_INFO *m_info; MYRG_INFO *UNINIT_VAR(m_info);
int rc; int rc;
int errpos; int errpos;
int save_errno; int save_errno;

View File

@ -1199,7 +1199,7 @@ my_bool fetch_n(const char **query_list, unsigned query_count,
/* Separate thread query to test some cases */ /* Separate thread query to test some cases */
static my_bool thread_query(char *query) static my_bool thread_query(const char *query)
{ {
MYSQL *l_mysql; MYSQL *l_mysql;
my_bool error; my_bool error;
@ -1221,7 +1221,7 @@ static my_bool thread_query(char *query)
goto end; goto end;
} }
l_mysql->reconnect= 1; l_mysql->reconnect= 1;
if (mysql_query(l_mysql, (char *)query)) if (mysql_query(l_mysql, query))
{ {
fprintf(stderr, "Query failed (%s)\n", mysql_error(l_mysql)); fprintf(stderr, "Query failed (%s)\n", mysql_error(l_mysql));
error= 1; error= 1;
@ -6447,7 +6447,7 @@ static void test_prepare_alter()
rc= mysql_stmt_execute(stmt); rc= mysql_stmt_execute(stmt);
check_execute(stmt, rc); check_execute(stmt, rc);
if (thread_query((char *)"ALTER TABLE test_prep_alter change id id_new varchar(20)")) if (thread_query("ALTER TABLE test_prep_alter change id id_new varchar(20)"))
exit(1); exit(1);
is_null= 1; is_null= 1;