Automatic merge

This commit is contained in:
Michael Widenius 2009-11-30 13:13:02 +02:00
commit 5d9c3014ce
59 changed files with 254 additions and 214 deletions

View file

@ -1922,3 +1922,4 @@ libmysqld/examples/mysqltest.cc
extra/libevent/event-config.h extra/libevent/event-config.h
libmysqld/opt_table_elimination.cc libmysqld/opt_table_elimination.cc
libmysqld/ha_federatedx.cc libmysqld/ha_federatedx.cc
tmp

View file

@ -4,7 +4,7 @@ path=`dirname $0`
. "$path/SETUP.sh" . "$path/SETUP.sh"
extra_flags="$pentium_cflags $fast_cflags" extra_flags="$pentium_cflags $fast_cflags"
extra_configs="$pentium_configs $static_link" extra_configs="$pentium_configs"
strip=yes strip=yes
. "$path/FINISH.sh" . "$path/FINISH.sh"

View file

@ -552,7 +552,6 @@ static int upgrade_already_done(void)
FILE *in; FILE *in;
char upgrade_info_file[FN_REFLEN]= {0}; char upgrade_info_file[FN_REFLEN]= {0};
char buf[sizeof(MYSQL_SERVER_VERSION)+1]; char buf[sizeof(MYSQL_SERVER_VERSION)+1];
char *res;
if (get_upgrade_info_file_name(upgrade_info_file)) if (get_upgrade_info_file_name(upgrade_info_file))
return 0; /* Could not get filename => not sure */ return 0; /* Could not get filename => not sure */

View file

@ -7,6 +7,11 @@
# include <config.h> # include <config.h>
#endif #endif
/* to get wcwidth() defined */
#define _XOPEN_SOURCE 600
#define _XOPEN_SOURCE_EXTENDED
#define _XOPEN_
/* /*
Ultrix botches type-ahead when switching from canonical to Ultrix botches type-ahead when switching from canonical to
non-canonical mode, at least through version 4.3 non-canonical mode, at least through version 4.3

View file

@ -461,12 +461,12 @@ rl_redisplay ()
register char *line; register char *line;
int inv_botlin, lb_linenum, o_cpos; int inv_botlin, lb_linenum, o_cpos;
int newlines, lpos, temp, modmark; int newlines, lpos, temp, modmark;
char *prompt_this_line; const char *prompt_this_line;
#if defined (HANDLE_MULTIBYTE) #if defined (HANDLE_MULTIBYTE)
int num, n0; int num, n0= 0;
wchar_t wc; wchar_t wc;
size_t wc_bytes; size_t wc_bytes;
int wc_width; int wc_width= 0;
mbstate_t ps; mbstate_t ps;
int _rl_wrapped_multicolumn = 0; int _rl_wrapped_multicolumn = 0;
#endif #endif
@ -824,7 +824,7 @@ rl_redisplay ()
cpos_buffer_position = out; cpos_buffer_position = out;
lb_linenum = newlines; lb_linenum = newlines;
} }
for (i = in; i < in+wc_bytes; i++) for (i = in; (size_t) i < in+wc_bytes; i++)
line[out++] = rl_line_buffer[i]; line[out++] = rl_line_buffer[i];
for (i = 0; i < wc_width; i++) for (i = 0; i < wc_width; i++)
CHECK_LPOS(); CHECK_LPOS();

View file

@ -211,14 +211,14 @@ history_get (offset)
HIST_ENTRY * HIST_ENTRY *
alloc_history_entry (string, ts) alloc_history_entry (string, ts)
char *string; const char *string;
char *ts; char *ts;
{ {
HIST_ENTRY *temp; HIST_ENTRY *temp;
temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY)); temp = (HIST_ENTRY *)xmalloc (sizeof (HIST_ENTRY));
temp->line = string ? savestring (string) : string; temp->line = string ? savestring ((char*) string) : (char*) string;
temp->data = (char *)NULL; temp->data = (char *)NULL;
temp->timestamp = ts; temp->timestamp = ts;

View file

@ -109,8 +109,8 @@ extern int _rl_is_mbchar_matched PARAMS((char *, int, int, char *, int));
extern wchar_t _rl_char_value PARAMS((char *, int)); extern wchar_t _rl_char_value PARAMS((char *, int));
extern int _rl_walphabetic PARAMS((wchar_t)); extern int _rl_walphabetic PARAMS((wchar_t));
#define _rl_to_wupper(wc) (iswlower (wc) ? towupper (wc) : (wc)) #define _rl_to_wupper(wc) (iswlower (wc) ? (wchar_t) towupper (wc) : (wc))
#define _rl_to_wlower(wc) (iswupper (wc) ? towlower (wc) : (wc)) #define _rl_to_wlower(wc) (iswupper (wc) ? (wchar_t) towlower (wc) : (wc))
#define MB_NEXTCHAR(b,s,c,f) \ #define MB_NEXTCHAR(b,s,c,f) \
((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \ ((MB_CUR_MAX > 1 && rl_byte_oriented == 0) \

View file

@ -614,7 +614,7 @@ rl_arrow_keys (count, c)
#ifdef HANDLE_MULTIBYTE #ifdef HANDLE_MULTIBYTE
static char pending_bytes[MB_LEN_MAX]; static char pending_bytes[MB_LEN_MAX];
static int pending_bytes_length = 0; static int pending_bytes_length = 0;
static mbstate_t ps = {0}; static mbstate_t ps;
#endif #endif
/* Insert the character C at the current location, moving point forward. /* Insert the character C at the current location, moving point forward.

View file

@ -42,7 +42,7 @@
static void static void
memory_error_and_abort (fname) memory_error_and_abort (fname)
char *fname; const char *fname;
{ {
fprintf (stderr, "%s: out of virtual memory\n", fname); fprintf (stderr, "%s: out of virtual memory\n", fname);
exit (2); exit (2);

View file

@ -15,7 +15,7 @@ AC_CANONICAL_SYSTEM
# MySQL version number. # MySQL version number.
# #
# Note: the following line must be parseable by win/configure.js:GetVersion() # Note: the following line must be parseable by win/configure.js:GetVersion()
AM_INIT_AUTOMAKE(mysql, 5.1.39-maria-beta) AM_INIT_AUTOMAKE(mysql, 5.1.39-MariaDB-beta)
AM_CONFIG_HEADER([include/config.h:config.h.in]) AM_CONFIG_HEADER([include/config.h:config.h.in])
PROTOCOL_VERSION=10 PROTOCOL_VERSION=10

View file

@ -567,9 +567,9 @@ typedef struct st_mysql_ftparser_boolean_info
typedef struct st_mysql_ftparser_param typedef struct st_mysql_ftparser_param
{ {
int (*mysql_parse)(struct st_mysql_ftparser_param *, int (*mysql_parse)(struct st_mysql_ftparser_param *,
char *doc, int doc_len); const unsigned char *doc, size_t doc_len);
int (*mysql_add_word)(struct st_mysql_ftparser_param *, int (*mysql_add_word)(struct st_mysql_ftparser_param *,
char *word, int word_len, const unsigned char *word, size_t word_len,
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info);
void *ftparser_state; void *ftparser_state;
void *mysql_ftparam; void *mysql_ftparam;

View file

@ -73,9 +73,9 @@ typedef struct st_mysql_ftparser_boolean_info
typedef struct st_mysql_ftparser_param typedef struct st_mysql_ftparser_param
{ {
int (*mysql_parse)(struct st_mysql_ftparser_param *, int (*mysql_parse)(struct st_mysql_ftparser_param *,
char *doc, int doc_len); const unsigned char *doc, size_t doc_len);
int (*mysql_add_word)(struct st_mysql_ftparser_param *, int (*mysql_add_word)(struct st_mysql_ftparser_param *,
char *word, int word_len, const unsigned char *word, size_t word_len,
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info); MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info);
void *ftparser_state; void *ftparser_state;
void *mysql_ftparam; void *mysql_ftparam;

View file

@ -2284,7 +2284,7 @@ mysql_stmt_param_metadata(MYSQL_STMT *stmt)
/* Store type of parameter in network buffer. */ /* Store type of parameter in network buffer. */
static void store_param_type(char **pos, MYSQL_BIND *param) static void store_param_type(uchar **pos, MYSQL_BIND *param)
{ {
uint typecode= param->buffer_type | (param->is_unsigned ? 32768 : 0); uint typecode= param->buffer_type | (param->is_unsigned ? 32768 : 0);
int2store(*pos, typecode); int2store(*pos, typecode);
@ -2564,7 +2564,7 @@ int cli_stmt_execute(MYSQL_STMT *stmt)
that is sent to the server. that is sent to the server.
*/ */
for (param= stmt->params; param < param_end ; param++) for (param= stmt->params; param < param_end ; param++)
store_param_type((char**) &net->write_pos, param); store_param_type(&net->write_pos, param);
} }
for (param= stmt->params; param < param_end; param++) for (param= stmt->params; param < param_end; param++)

View file

@ -5,6 +5,9 @@
# on the presence of the log tables (which are CSV-based). # on the presence of the log tables (which are CSV-based).
--source include/have_csv.inc --source include/have_csv.inc
# Check that innodb/xtradb is incompiled in as result depends on it
-- source include/have_innodb.inc
# Save the initial number of concurrent sessions # Save the initial number of concurrent sessions
--source include/count_sessions.inc --source include/count_sessions.inc

View file

@ -15,7 +15,7 @@ let $MYSQLD_DATADIR= `SELECT @@datadir`;
# Bug#39893: Crash if select on a partitioned table, # Bug#39893: Crash if select on a partitioned table,
# when partitioning is disabled # when partitioning is disabled
FLUSH TABLES; FLUSH TABLES;
--copy_file $MYSQLTEST_VARDIR/std_data_ln/parts/t1.frm $MYSQLD_DATADIR/test/t1.frm --copy_file $MYSQLTEST_VARDIR/std_data/parts/t1.frm $MYSQLD_DATADIR/test/t1.frm
SELECT * FROM t1; SELECT * FROM t1;
TRUNCATE TABLE t1; TRUNCATE TABLE t1;
ANALYZE TABLE t1; ANALYZE TABLE t1;

View file

@ -124,8 +124,8 @@ retry:
we found a deleted node - be nice, help the other thread we found a deleted node - be nice, help the other thread
and remove this deleted node and remove this deleted node
*/ */
if (my_atomic_casptr((void **)cursor->prev, if (my_atomic_casptr((void **) cursor->prev,
(void **)&cursor->curr, cursor->next)) (void **)(char*) &cursor->curr, cursor->next))
_lf_alloc_free(pins, cursor->curr); _lf_alloc_free(pins, cursor->curr);
else else
{ {
@ -171,7 +171,8 @@ static LF_SLIST *linsert(LF_SLIST * volatile *head, CHARSET_INFO *cs,
node->link= (intptr)cursor.curr; node->link= (intptr)cursor.curr;
DBUG_ASSERT(node->link != (intptr)node); /* no circular references */ DBUG_ASSERT(node->link != (intptr)node); /* no circular references */
DBUG_ASSERT(cursor.prev != &node->link); /* no circular references */ DBUG_ASSERT(cursor.prev != &node->link); /* no circular references */
if (my_atomic_casptr((void **)cursor.prev, (void **)&cursor.curr, node)) if (my_atomic_casptr((void **) cursor.prev,
(void **)(char*) &cursor.curr, node))
{ {
res= 1; /* inserted ok */ res= 1; /* inserted ok */
break; break;
@ -218,13 +219,13 @@ static int ldelete(LF_SLIST * volatile *head, CHARSET_INFO *cs, uint32 hashnr,
else else
{ {
/* mark the node deleted */ /* mark the node deleted */
if (my_atomic_casptr((void **)&(cursor.curr->link), if (my_atomic_casptr((void **) (char*) &(cursor.curr->link),
(void **)&cursor.next, (void **) (char*) &cursor.next,
(void *)(((intptr)cursor.next) | 1))) (void *)(((intptr)cursor.next) | 1)))
{ {
/* and remove it from the list */ /* and remove it from the list */
if (my_atomic_casptr((void **)cursor.prev, if (my_atomic_casptr((void **)cursor.prev,
(void **)&cursor.curr, cursor.next)) (void **)(char*)&cursor.curr, cursor.next))
_lf_alloc_free(pins, cursor.curr); _lf_alloc_free(pins, cursor.curr);
else else
{ {
@ -493,7 +494,7 @@ static int initialize_bucket(LF_HASH *hash, LF_SLIST * volatile *node,
my_free((void *)dummy, MYF(0)); my_free((void *)dummy, MYF(0));
dummy= cur; dummy= cur;
} }
my_atomic_casptr((void **)node, (void **)&tmp, dummy); my_atomic_casptr((void **)node, (void **)(char*) &tmp, dummy);
/* /*
note that if the CAS above failed (after linsert() succeeded), note that if the CAS above failed (after linsert() succeeded),
it would mean that some other thread has executed linsert() for it would mean that some other thread has executed linsert() for

View file

@ -77,9 +77,6 @@ end:
int my_copystat(const char *from, const char *to, int MyFlags) int my_copystat(const char *from, const char *to, int MyFlags)
{ {
struct stat statbuf; struct stat statbuf;
#if !defined(__WIN__) && !defined(__NETWARE__)
int res;
#endif
if (stat((char*) from, &statbuf)) if (stat((char*) from, &statbuf))
{ {

View file

@ -33,11 +33,11 @@ struct match {
struct re_guts *g; struct re_guts *g;
int eflags; int eflags;
my_regmatch_t *pmatch; /* [nsub+1] (0 element unused) */ my_regmatch_t *pmatch; /* [nsub+1] (0 element unused) */
char *offp; /* offsets work from here */ const char *offp; /* offsets work from here */
char *beginp; /* start of string -- virtual NUL precedes */ const char *beginp; /* start of string -- virtual NUL precedes */
char *endp; /* end of string -- virtual NUL here */ const char *endp; /* end of string -- virtual NUL here */
char *coldp; /* can be no match starting before here */ const char *coldp; /* can be no match starting before here */
char **lastpos; /* [nplus+1] */ const char **lastpos; /* [nplus+1] */
STATEVARS; STATEVARS;
states st; /* current states */ states st; /* current states */
states fresh; /* states for a fresh start */ states fresh; /* states for a fresh start */
@ -66,20 +66,20 @@ static int /* 0 success, REG_NOMATCH failure */
matcher(charset,g, str, nmatch, pmatch, eflags) matcher(charset,g, str, nmatch, pmatch, eflags)
CHARSET_INFO *charset; CHARSET_INFO *charset;
register struct re_guts *g; register struct re_guts *g;
char *str; const char *str;
size_t nmatch; size_t nmatch;
my_regmatch_t pmatch[]; my_regmatch_t pmatch[];
int eflags; int eflags;
{ {
register char *endp; register const char *endp;
register uint i; register uint i;
struct match mv; struct match mv;
register struct match *m = &mv; register struct match *m = &mv;
register char *dp; register const char *dp;
register const sopno gf = g->firststate+1; /* +1 for OEND */ register const sopno gf = g->firststate+1; /* +1 for OEND */
register const sopno gl = g->laststate; register const sopno gl = g->laststate;
char *start; const char *start;
char *stop; const char *stop;
/* simplify the situation where possible */ /* simplify the situation where possible */
if (g->cflags&REG_NOSUB) if (g->cflags&REG_NOSUB)
@ -163,7 +163,7 @@ int eflags;
dp = dissect(charset, m, m->coldp, endp, gf, gl); dp = dissect(charset, m, m->coldp, endp, gf, gl);
} else { } else {
if (g->nplus > 0 && m->lastpos == NULL) if (g->nplus > 0 && m->lastpos == NULL)
m->lastpos = (char **)malloc((g->nplus+1) * m->lastpos = (const char **)malloc((g->nplus+1) *
sizeof(char *)); sizeof(char *));
if (g->nplus > 0 && m->lastpos == NULL) { if (g->nplus > 0 && m->lastpos == NULL) {
free(m->pmatch); free(m->pmatch);
@ -235,28 +235,28 @@ int eflags;
== static char *dissect(register struct match *m, char *start, \ == static char *dissect(register struct match *m, char *start, \
== char *stop, sopno startst, sopno stopst); == char *stop, sopno startst, sopno stopst);
*/ */
static char * /* == stop (success) always */ static const char * /* == stop (success) always */
dissect(charset, m, start, stop, startst, stopst) dissect(charset, m, start, stop, startst, stopst)
CHARSET_INFO *charset; CHARSET_INFO *charset;
register struct match *m; register struct match *m;
char *start; const char *start;
char *stop; const char *stop;
sopno startst; sopno startst;
sopno stopst; sopno stopst;
{ {
register uint i; register uint i;
register sopno ss; /* start sop of current subRE */ register sopno ss; /* start sop of current subRE */
register sopno es; /* end sop of current subRE */ register sopno es; /* end sop of current subRE */
register char *sp; /* start of string matched by it */ register const char *sp; /* start of string matched by it */
register char *stp; /* string matched by it cannot pass here */ register const char *stp; /* string matched by it cannot pass here */
register char *rest; /* start of rest of string */ register const char *rest; /* start of rest of string */
register char *tail; /* string unmatched by rest of RE */ register const char *tail; /* string unmatched by rest of RE */
register sopno ssub; /* start sop of subsubRE */ register sopno ssub; /* start sop of subsubRE */
register sopno esub; /* end sop of subsubRE */ register sopno esub; /* end sop of subsubRE */
register char *ssp; /* start of string matched by subsubRE */ register const char *ssp; /* start of string matched by subsubRE */
register char *sep; /* end of string matched by subsubRE */ register const char *sep; /* end of string matched by subsubRE */
register char *oldssp; /* previous ssp */ register const char *oldssp; /* previous ssp */
register char *dp; /* used in debug mode to check asserts */ register const char *dp; /* used in debug mode to check asserts */
AT("diss", start, stop, startst, stopst); AT("diss", start, stop, startst, stopst);
sp = start; sp = start;
@ -424,23 +424,23 @@ sopno stopst;
== static char *backref(register struct match *m, char *start, \ == static char *backref(register struct match *m, char *start, \
== char *stop, sopno startst, sopno stopst, sopno lev); == char *stop, sopno startst, sopno stopst, sopno lev);
*/ */
static char * /* == stop (success) or NULL (failure) */ static const char * /* == stop (success) or NULL (failure) */
backref(charset,m, start, stop, startst, stopst, lev) backref(charset,m, start, stop, startst, stopst, lev)
CHARSET_INFO *charset; CHARSET_INFO *charset;
register struct match *m; register struct match *m;
char *start; const char *start;
char *stop; const char *stop;
sopno startst; sopno startst;
sopno stopst; sopno stopst;
sopno lev; /* PLUS nesting level */ sopno lev; /* PLUS nesting level */
{ {
register uint i; register uint i;
register sopno ss; /* start sop of current subRE */ register sopno ss; /* start sop of current subRE */
register char *sp; /* start of string matched by it */ register const char *sp; /* start of string matched by it */
register sopno ssub; /* start sop of subsubRE */ register sopno ssub; /* start sop of subsubRE */
register sopno esub; /* end sop of subsubRE */ register sopno esub; /* end sop of subsubRE */
register char *ssp; /* start of string matched by subsubRE */ register const char *ssp; /* start of string matched by subsubRE */
register char *dp; register const char *dp;
register size_t len; register size_t len;
register int hard; register int hard;
register sop s; register sop s;
@ -630,24 +630,24 @@ sopno lev; /* PLUS nesting level */
== static char *fast(register struct match *m, char *start, \ == static char *fast(register struct match *m, char *start, \
== char *stop, sopno startst, sopno stopst); == char *stop, sopno startst, sopno stopst);
*/ */
static char * /* where tentative match ended, or NULL */ static const char * /* where tentative match ended, or NULL */
fast(charset, m, start, stop, startst, stopst) fast(charset, m, start, stop, startst, stopst)
CHARSET_INFO *charset; CHARSET_INFO *charset;
register struct match *m; register struct match *m;
char *start; const char *start;
char *stop; const char *stop;
sopno startst; sopno startst;
sopno stopst; sopno stopst;
{ {
register states st = m->st; register states st = m->st;
register states fresh = m->fresh; register states fresh = m->fresh;
register states tmp = m->tmp; register states tmp = m->tmp;
register char *p = start; register const char *p = start;
register int c = (start == m->beginp) ? OUT : *(start-1); register int c = (start == m->beginp) ? OUT : *(start-1);
register int lastc; /* previous c */ register int lastc; /* previous c */
register int flagch; register int flagch;
register int i; register int i;
register char *coldp; /* last p after which no match was underway */ register const char *coldp; /* last p after which no match was underway */
CLEAR(st); CLEAR(st);
SET1(st, startst); SET1(st, startst);
@ -722,24 +722,24 @@ sopno stopst;
== static char *slow(register struct match *m, char *start, \ == static char *slow(register struct match *m, char *start, \
== char *stop, sopno startst, sopno stopst); == char *stop, sopno startst, sopno stopst);
*/ */
static char * /* where it ended */ static const char * /* where it ended */
slow(charset, m, start, stop, startst, stopst) slow(charset, m, start, stop, startst, stopst)
CHARSET_INFO *charset; CHARSET_INFO *charset;
register struct match *m; register struct match *m;
char *start; const char *start;
char *stop; const char *stop;
sopno startst; sopno startst;
sopno stopst; sopno stopst;
{ {
register states st = m->st; register states st = m->st;
register states empty = m->empty; register states empty = m->empty;
register states tmp = m->tmp; register states tmp = m->tmp;
register char *p = start; register const char *p = start;
register int c = (start == m->beginp) ? OUT : *(start-1); register int c = (start == m->beginp) ? OUT : *(start-1);
register int lastc; /* previous c */ register int lastc; /* previous c */
register int flagch; register int flagch;
register int i; register int i;
register char *matchp; /* last p at which a match ended */ register const char *matchp; /* last p at which a match ended */
AT("slow", start, stop, startst, stopst); AT("slow", start, stop, startst, stopst);
CLEAR(st); CLEAR(st);

View file

@ -4,11 +4,11 @@ extern "C" {
#endif #endif
/* === engine.c === */ /* === engine.c === */
static int matcher(CHARSET_INFO *charset,register struct re_guts *g, char *string, size_t nmatch, my_regmatch_t pmatch[], int eflags); static int matcher(CHARSET_INFO *charset,register struct re_guts *g, const char *string, size_t nmatch, my_regmatch_t pmatch[], int eflags);
static char *dissect(CHARSET_INFO *charset,register struct match *m, char *start, char *stop, sopno startst, sopno stopst); static const char *dissect(CHARSET_INFO *charset,register struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
static char *backref(CHARSET_INFO *charset, register struct match *m, char *start, char *stop, sopno startst, sopno stopst, sopno lev); static const char *backref(CHARSET_INFO *charset, register struct match *m, const char *start, const char *stop, sopno startst, sopno stopst, sopno lev);
static char *fast(CHARSET_INFO *charset, register struct match *m, char *start, char *stop, sopno startst, sopno stopst); static const char *fast(CHARSET_INFO *charset, register struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
static char *slow(CHARSET_INFO *charset, register struct match *m, char *start, char *stop, sopno startst, sopno stopst); static const char *slow(CHARSET_INFO *charset, register struct match *m, const char *start, const char *stop, sopno startst, sopno stopst);
static states step(register struct re_guts *g, sopno start, sopno stop, register states bef, int ch, register states aft); static states step(register struct re_guts *g, sopno start, sopno stop, register states bef, int ch, register states aft);
#define BOL (OUT+1) #define BOL (OUT+1)
#define EOL (BOL+1) #define EOL (BOL+1)

View file

@ -2142,7 +2142,7 @@ static void write_str_with_code_and_len(uchar **dst, const char *src,
*/ */
DBUG_ASSERT(len <= 255); DBUG_ASSERT(len <= 255);
DBUG_ASSERT(src); DBUG_ASSERT(src);
*((*dst)++)= code; *((*dst)++)= (uchar) code;
*((*dst)++)= (uchar) len; *((*dst)++)= (uchar) len;
bmove(*dst, src, len); bmove(*dst, src, len);
(*dst)+= len; (*dst)+= len;

View file

@ -957,6 +957,7 @@ static void close_connections(void)
tmp->killed= THD::KILL_CONNECTION; tmp->killed= THD::KILL_CONNECTION;
thread_scheduler.post_kill_notification(tmp); thread_scheduler.post_kill_notification(tmp);
pthread_mutex_lock(&tmp->LOCK_thd_data);
if (tmp->mysys_var) if (tmp->mysys_var)
{ {
tmp->mysys_var->abort=1; tmp->mysys_var->abort=1;
@ -979,6 +980,7 @@ static void close_connections(void)
} }
pthread_mutex_unlock(&tmp->mysys_var->mutex); pthread_mutex_unlock(&tmp->mysys_var->mutex);
} }
pthread_mutex_unlock(&tmp->LOCK_thd_data);
} }
(void) pthread_mutex_unlock(&LOCK_thread_count); // For unlink from list (void) pthread_mutex_unlock(&LOCK_thread_count); // For unlink from list

View file

@ -235,9 +235,7 @@ void thd_scheduler::thread_detach()
if (thread_attached) if (thread_attached)
{ {
THD* thd = (THD*)list.data; THD* thd = (THD*)list.data;
pthread_mutex_lock(&thd->LOCK_thd_data); thd->reset_globals();
thd->mysys_var= NULL;
pthread_mutex_unlock(&thd->LOCK_thd_data);
thread_attached= FALSE; thread_attached= FALSE;
#ifndef DBUG_OFF #ifndef DBUG_OFF
/* /*

View file

@ -1924,9 +1924,10 @@ sp_head::execute_procedure(THD *thd, List<Item> *args)
if (spvar->mode == sp_param_out) if (spvar->mode == sp_param_out)
{ {
Item_null *null_item= new Item_null(); Item_null *null_item= new Item_null();
Item *tmp_item= (Item*) null_item;
if (!null_item || if (!null_item ||
nctx->set_variable(thd, i, (Item **)&null_item)) nctx->set_variable(thd, i, &tmp_item))
{ {
err_status= TRUE; err_status= TRUE;
break; break;

View file

@ -5823,6 +5823,7 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name,
{ {
/* This is a base table. */ /* This is a base table. */
DBUG_ASSERT(nj_col->view_field == NULL); DBUG_ASSERT(nj_col->view_field == NULL);
Item *ref= 0;
/* /*
This fix_fields is not necessary (initially this item is fixed by This fix_fields is not necessary (initially this item is fixed by
the Item_field constructor; after reopen_tables the Item_func_eq the Item_field constructor; after reopen_tables the Item_func_eq
@ -5830,12 +5831,13 @@ find_field_in_natural_join(THD *thd, TABLE_LIST *table_ref, const char *name,
reopening for columns that was dropped by the concurrent connection. reopening for columns that was dropped by the concurrent connection.
*/ */
if (!nj_col->table_field->fixed && if (!nj_col->table_field->fixed &&
nj_col->table_field->fix_fields(thd, (Item **)&nj_col->table_field)) nj_col->table_field->fix_fields(thd, &ref))
{ {
DBUG_PRINT("info", ("column '%s' was dropped by the concurrent connection", DBUG_PRINT("info", ("column '%s' was dropped by the concurrent connection",
nj_col->table_field->name)); nj_col->table_field->name));
DBUG_RETURN(NULL); DBUG_RETURN(NULL);
} }
DBUG_ASSERT(ref == 0); // Should not have changed
DBUG_ASSERT(nj_col->table_ref->table == nj_col->table_field->field->table); DBUG_ASSERT(nj_col->table_ref->table == nj_col->table_field->field->table);
found_field= nj_col->table_field->field; found_field= nj_col->table_field->field;
update_field_dependencies(thd, found_field, nj_col->table_ref->table); update_field_dependencies(thd, found_field, nj_col->table_ref->table);

View file

@ -13,6 +13,7 @@
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
#include <my_global.h>
#include <mysql/plugin.h> #include <mysql/plugin.h>
typedef struct st_mysql_plugin builtin_plugin[]; typedef struct st_mysql_plugin builtin_plugin[];

View file

@ -1166,6 +1166,19 @@ bool THD::store_globals()
} }
/**
Untie THD from current thread
Used when using --thread-handling=pool-of-threads
*/
void THD::reset_globals()
{
pthread_mutex_lock(&LOCK_thd_data);
mysys_var= 0;
pthread_mutex_unlock(&LOCK_thd_data);
}
/* /*
Cleanup after query. Cleanup after query.

View file

@ -1906,6 +1906,7 @@ public:
void cleanup(void); void cleanup(void);
void cleanup_after_query(); void cleanup_after_query();
bool store_globals(); bool store_globals();
void reset_globals();
#ifdef SIGNAL_WITH_VIO_CLOSE #ifdef SIGNAL_WITH_VIO_CLOSE
inline void set_active_vio(Vio* vio) inline void set_active_vio(Vio* vio)
{ {

View file

@ -2279,6 +2279,7 @@ void kill_delayed_threads(void)
while ((di= it++)) while ((di= it++))
{ {
di->thd.killed= THD::KILL_CONNECTION; di->thd.killed= THD::KILL_CONNECTION;
pthread_mutex_lock(&di->thd.LOCK_thd_data);
if (di->thd.mysys_var) if (di->thd.mysys_var)
{ {
pthread_mutex_lock(&di->thd.mysys_var->mutex); pthread_mutex_lock(&di->thd.mysys_var->mutex);
@ -2297,6 +2298,7 @@ void kill_delayed_threads(void)
} }
pthread_mutex_unlock(&di->thd.mysys_var->mutex); pthread_mutex_unlock(&di->thd.mysys_var->mutex);
} }
pthread_mutex_unlock(&di->thd.LOCK_thd_data);
} }
VOID(pthread_mutex_unlock(&LOCK_delayed_insert)); // For unlink from list VOID(pthread_mutex_unlock(&LOCK_delayed_insert)); // For unlink from list
} }

View file

@ -464,7 +464,7 @@ pthread_handler_t handle_bootstrap(void *arg)
thd->init_for_queries(); thd->init_for_queries();
while (fgets(buff, thd->net.max_packet, file)) while (fgets(buff, thd->net.max_packet, file))
{ {
char *query, *res; char *query;
/* strlen() can't be deleted because fgets() doesn't return length */ /* strlen() can't be deleted because fgets() doesn't return length */
ulong length= (ulong) strlen(buff); ulong length= (ulong) strlen(buff);
while (buff[length-1] != '\n' && !feof(file)) while (buff[length-1] != '\n' && !feof(file))

View file

@ -3586,8 +3586,9 @@ add_key_fields(JOIN *join, KEY_FIELD **key_fields, uint *and_level,
{ {
if (!field->eq(item->field)) if (!field->eq(item->field))
{ {
Item *tmp_item= (Item*) item;
add_key_field(key_fields, *and_level, cond_func, field, add_key_field(key_fields, *and_level, cond_func, field,
TRUE, (Item **) &item, 1, usable_tables, TRUE, &tmp_item, 1, usable_tables,
sargables); sargables);
} }
} }
@ -15748,7 +15749,11 @@ static bool add_ref_to_table_cond(THD *thd, JOIN_TAB *join_tab)
DBUG_RETURN(TRUE); DBUG_RETURN(TRUE);
if (!cond->fixed) if (!cond->fixed)
cond->fix_fields(thd, (Item**)&cond); {
Item *tmp_item= (Item*) cond;
cond->fix_fields(thd, &tmp_item);
DBUG_ASSERT(cond == tmp_item);
}
if (join_tab->select) if (join_tab->select)
{ {
error=(int) cond->add(join_tab->select->cond); error=(int) cond->add(join_tab->select->cond);

View file

@ -1747,6 +1747,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
if ((thd_info->db=tmp->db)) // Safe test if ((thd_info->db=tmp->db)) // Safe test
thd_info->db=thd->strdup(thd_info->db); thd_info->db=thd->strdup(thd_info->db);
thd_info->command=(int) tmp->command; thd_info->command=(int) tmp->command;
pthread_mutex_lock(&tmp->LOCK_thd_data);
if ((mysys_var= tmp->mysys_var)) if ((mysys_var= tmp->mysys_var))
pthread_mutex_lock(&mysys_var->mutex); pthread_mutex_lock(&mysys_var->mutex);
thd_info->proc_info= (char*) (tmp->killed == THD::KILL_CONNECTION? "Killed" : 0); thd_info->proc_info= (char*) (tmp->killed == THD::KILL_CONNECTION? "Killed" : 0);
@ -1766,6 +1767,7 @@ void mysqld_list_processes(THD *thd,const char *user, bool verbose)
#endif #endif
if (mysys_var) if (mysys_var)
pthread_mutex_unlock(&mysys_var->mutex); pthread_mutex_unlock(&mysys_var->mutex);
pthread_mutex_unlock(&tmp->LOCK_thd_data);
thd_info->start_time= tmp->start_time; thd_info->start_time= tmp->start_time;
thd_info->query=0; thd_info->query=0;
@ -3549,7 +3551,9 @@ static int get_schema_tables_record(THD *thd, TABLE_LIST *tables,
TABLE_SHARE *share= show_table->s; TABLE_SHARE *share= show_table->s;
handler *file= show_table->file; handler *file= show_table->file;
handlerton *tmp_db_type= share->db_type(); handlerton *tmp_db_type= share->db_type();
#ifdef WITH_PARTITION_STORAGE_ENGINE
bool is_partitioned= FALSE; bool is_partitioned= FALSE;
#endif
if (share->tmp_table == SYSTEM_TMP_TABLE) if (share->tmp_table == SYSTEM_TMP_TABLE)
table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs); table->field[3]->store(STRING_WITH_LEN("SYSTEM VIEW"), cs);
else if (share->tmp_table) else if (share->tmp_table)

View file

@ -2077,8 +2077,9 @@ ulong get_form_pos(File file, uchar *head, TYPELIB *save_names)
else else
{ {
char *str; char *str;
const char **tmp = (const char**) (char*) buf;
str=(char *) (buf+a_length); str=(char *) (buf+a_length);
fix_type_pointers((const char ***) &buf,save_names,1,&str); fix_type_pointers(&tmp, save_names, 1, &str);
} }
DBUG_RETURN(ret_value); DBUG_RETURN(ret_value);
} }

View file

@ -665,10 +665,9 @@ int maria_check_definition(MARIA_KEYDEF *t1_keyinfo,
extern "C" { extern "C" {
volatile int *_ma_killed_ptr(HA_CHECK *param) int _ma_killed_ptr(HA_CHECK *param)
{ {
/* In theory Unsafe conversion, but should be ok for now */ return thd_killed((THD*)param->thd);
return (int*) &(((THD *) (param->thd))->killed);
} }

View file

@ -360,7 +360,7 @@ retry:
else else
{ {
if (my_atomic_casptr((void **)cursor->prev, if (my_atomic_casptr((void **)cursor->prev,
(void **)&cursor->curr, cursor->next)) (void **)(char*) &cursor->curr, cursor->next))
_lf_alloc_free(pins, cursor->curr); _lf_alloc_free(pins, cursor->curr);
else else
{ {
@ -421,7 +421,8 @@ static int lockinsert(LOCK * volatile *head, LOCK *node, LF_PINS *pins,
node->link= (intptr)cursor.curr; node->link= (intptr)cursor.curr;
DBUG_ASSERT(node->link != (intptr)node); DBUG_ASSERT(node->link != (intptr)node);
DBUG_ASSERT(cursor.prev != &node->link); DBUG_ASSERT(cursor.prev != &node->link);
if (!my_atomic_casptr((void **)cursor.prev, (void **)&cursor.curr, node)) if (!my_atomic_casptr((void **)cursor.prev,
(void **)(char*) &cursor.curr, node))
{ {
res= REPEAT_ONCE_MORE; res= REPEAT_ONCE_MORE;
node->flags&= ~ACTIVE; node->flags&= ~ACTIVE;
@ -498,11 +499,11 @@ static int lockdelete(LOCK * volatile *head, LOCK *node, LF_PINS *pins)
then we can delete. Good news is - this is only required when rolling then we can delete. Good news is - this is only required when rolling
back a savepoint. back a savepoint.
*/ */
if (my_atomic_casptr((void **)&(cursor.curr->link), if (my_atomic_casptr((void **)(char*)&(cursor.curr->link),
(void **)&cursor.next, 1+(char *)cursor.next)) (void **)(char*)&cursor.next, 1+(char *)cursor.next))
{ {
if (my_atomic_casptr((void **)cursor.prev, if (my_atomic_casptr((void **)cursor.prev,
(void **)&cursor.curr, cursor.next)) (void **)(char*)&cursor.curr, cursor.next))
_lf_alloc_free(pins, cursor.curr); _lf_alloc_free(pins, cursor.curr);
else else
lockfind(head, node, &cursor, pins); lockfind(head, node, &cursor, pins);
@ -573,7 +574,7 @@ static void initialize_bucket(LOCKMAN *lm, LOCK * volatile *node,
my_free((void *)dummy, MYF(0)); my_free((void *)dummy, MYF(0));
dummy= cur; dummy= cur;
} }
my_atomic_casptr((void **)node, (void **)&tmp, dummy); my_atomic_casptr((void **)node, (void **)(char*) &tmp, dummy);
} }
static inline uint calc_hash(uint64 resource) static inline uint calc_hash(uint64 resource)

View file

@ -215,7 +215,7 @@ int maria_chk_del(HA_CHECK *param, register MARIA_HA *info,
empty=0; empty=0;
for (i= share->state.state.del ; i > 0L && next_link != HA_OFFSET_ERROR ; i--) for (i= share->state.state.del ; i > 0L && next_link != HA_OFFSET_ERROR ; i--)
{ {
if (*_ma_killed_ptr(param)) if (_ma_killed_ptr(param))
DBUG_RETURN(1); DBUG_RETURN(1);
if (test_flag & T_VERBOSE) if (test_flag & T_VERBOSE)
printf(" %9s",llstr(next_link,buff)); printf(" %9s",llstr(next_link,buff));
@ -310,7 +310,7 @@ static int check_k_link(HA_CHECK *param, register MARIA_HA *info,
records= (ha_rows) (share->state.state.key_file_length / block_size); records= (ha_rows) (share->state.state.key_file_length / block_size);
while (next_link != HA_OFFSET_ERROR && records > 0) while (next_link != HA_OFFSET_ERROR && records > 0)
{ {
if (*_ma_killed_ptr(param)) if (_ma_killed_ptr(param))
DBUG_RETURN(1); DBUG_RETURN(1);
if (param->testflag & T_VERBOSE) if (param->testflag & T_VERBOSE)
printf("%16s",llstr(next_link,llbuff)); printf("%16s",llstr(next_link,llbuff));
@ -876,10 +876,10 @@ static int chk_index(HA_CHECK *param, MARIA_HA *info, MARIA_KEYDEF *keyinfo,
tmp_key.data= tmp_key_buff; tmp_key.data= tmp_key_buff;
for ( ;; ) for ( ;; )
{ {
if (*_ma_killed_ptr(param))
goto err;
if (nod_flag) if (nod_flag)
{ {
if (_ma_killed_ptr(param))
goto err;
next_page= _ma_kpos(nod_flag,keypos); next_page= _ma_kpos(nod_flag,keypos);
if (chk_index_down(param,info,keyinfo,next_page, if (chk_index_down(param,info,keyinfo,next_page,
temp_buff,keys,key_checksum,level+1)) temp_buff,keys,key_checksum,level+1))
@ -1180,7 +1180,7 @@ static int check_static_record(HA_CHECK *param, MARIA_HA *info, int extend,
pos= 0; pos= 0;
while (pos < share->state.state.data_file_length) while (pos < share->state.state.data_file_length)
{ {
if (*_ma_killed_ptr(param)) if (_ma_killed_ptr(param))
return -1; return -1;
if (my_b_read(&param->read_cache, record, if (my_b_read(&param->read_cache, record,
share->base.pack_reclength)) share->base.pack_reclength))
@ -1230,7 +1230,7 @@ static int check_dynamic_record(HA_CHECK *param, MARIA_HA *info, int extend,
{ {
my_bool got_error= 0; my_bool got_error= 0;
int flag; int flag;
if (*_ma_killed_ptr(param)) if (_ma_killed_ptr(param))
DBUG_RETURN(-1); DBUG_RETURN(-1);
flag= block_info.second_read=0; flag= block_info.second_read=0;
@ -1451,7 +1451,7 @@ static int check_compressed_record(HA_CHECK *param, MARIA_HA *info, int extend,
pos= share->pack.header_length; /* Skip header */ pos= share->pack.header_length; /* Skip header */
while (pos < share->state.state.data_file_length) while (pos < share->state.state.data_file_length)
{ {
if (*_ma_killed_ptr(param)) if (_ma_killed_ptr(param))
DBUG_RETURN(-1); DBUG_RETURN(-1);
if (_ma_read_cache(&param->read_cache, block_info.header, pos, if (_ma_read_cache(&param->read_cache, block_info.header, pos,
@ -1815,7 +1815,7 @@ static int check_block_record(HA_CHECK *param, MARIA_HA *info, int extend,
LINT_INIT(row_count); LINT_INIT(row_count);
LINT_INIT(empty_space); LINT_INIT(empty_space);
if (*_ma_killed_ptr(param)) if (_ma_killed_ptr(param))
{ {
_ma_scan_end_block_record(info); _ma_scan_end_block_record(info);
return -1; return -1;
@ -4631,7 +4631,7 @@ static int sort_get_next_record(MARIA_SORT_PARAM *sort_param)
char llbuff[22],llbuff2[22]; char llbuff[22],llbuff2[22];
DBUG_ENTER("sort_get_next_record"); DBUG_ENTER("sort_get_next_record");
if (*_ma_killed_ptr(param)) if (_ma_killed_ptr(param))
DBUG_RETURN(1); DBUG_RETURN(1);
switch (sort_info->org_data_file_type) { switch (sort_info->org_data_file_type) {

View file

@ -30,11 +30,9 @@
Check if check/repair operation was killed by a signal Check if check/repair operation was killed by a signal
*/ */
static int not_killed= 0; int _ma_killed_ptr(HA_CHECK *param __attribute__((unused)))
volatile int *_ma_killed_ptr(HA_CHECK *param __attribute__((unused)))
{ {
return &not_killed; /* always NULL */ return 0;
} }
/* print warnings and errors */ /* print warnings and errors */

View file

@ -180,7 +180,7 @@ typedef struct st_my_ftb_param
static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param,
char *word, int word_len, const uchar *word, size_t word_len,
MYSQL_FTPARSER_BOOLEAN_INFO *info) MYSQL_FTPARSER_BOOLEAN_INFO *info)
{ {
MY_FTB_PARAM *ftb_param= param->mysql_ftparam; MY_FTB_PARAM *ftb_param= param->mysql_ftparam;
@ -282,19 +282,19 @@ static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param,
static int ftb_parse_query_internal(MYSQL_FTPARSER_PARAM *param, static int ftb_parse_query_internal(MYSQL_FTPARSER_PARAM *param,
char *query, int len) const uchar *query, size_t len)
{ {
MY_FTB_PARAM *ftb_param= param->mysql_ftparam; MY_FTB_PARAM *ftb_param= param->mysql_ftparam;
MYSQL_FTPARSER_BOOLEAN_INFO info; MYSQL_FTPARSER_BOOLEAN_INFO info;
CHARSET_INFO *cs= ftb_param->ftb->charset; CHARSET_INFO *cs= ftb_param->ftb->charset;
uchar **start= (uchar**) &query; const uchar **start= &query;
uchar *end= (uchar*) query + len; const uchar *end= query + len;
FT_WORD w; FT_WORD w;
info.prev= ' '; info.prev= ' ';
info.quot= 0; info.quot= 0;
while (maria_ft_get_word(cs, start, end, &w, &info)) while (maria_ft_get_word(cs, start, end, &w, &info))
param->mysql_add_word(param, (char *) w.pos, w.len, &info); param->mysql_add_word(param, w.pos, w.len, &info);
return(0); return(0);
} }
@ -615,7 +615,7 @@ typedef struct st_my_ftb_phrase_param
static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param,
char *word, int word_len, const uchar *word, size_t word_len,
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused)))
{ {
MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam;
@ -647,15 +647,15 @@ static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param,
static int ftb_check_phrase_internal(MYSQL_FTPARSER_PARAM *param, static int ftb_check_phrase_internal(MYSQL_FTPARSER_PARAM *param,
char *document, int len) const uchar *document, size_t len)
{ {
FT_WORD word; FT_WORD word;
MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam;
const uchar *docend= (uchar*) document + len; const uchar *docend= document + len;
while (maria_ft_simple_get_word(phrase_param->cs, (uchar**) &document, while (maria_ft_simple_get_word(phrase_param->cs, &document,
docend, &word, FALSE)) docend, &word, FALSE))
{ {
param->mysql_add_word(param, (char*) word.pos, word.len, 0); param->mysql_add_word(param, word.pos, word.len, 0);
if (phrase_param->match) if (phrase_param->match)
break; break;
} }
@ -872,7 +872,7 @@ typedef struct st_my_ftb_find_param
static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param,
char *word, int len, const uchar *word, size_t len,
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused)))
{ {
MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam;
@ -933,15 +933,14 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param,
static int ftb_find_relevance_parse(MYSQL_FTPARSER_PARAM *param, static int ftb_find_relevance_parse(MYSQL_FTPARSER_PARAM *param,
char *doc, int len) const uchar *doc, size_t len)
{ {
MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam;
FT_INFO *ftb= ftb_param->ftb; FT_INFO *ftb= ftb_param->ftb;
uchar *end= (uchar*) doc + len; const uchar *end= doc + len;
FT_WORD w; FT_WORD w;
while (maria_ft_simple_get_word(ftb->charset, (uchar**) &doc, while (maria_ft_simple_get_word(ftb->charset, &doc, end, &w, TRUE))
end, &w, TRUE)) param->mysql_add_word(param, w.pos, w.len, 0);
param->mysql_add_word(param, (char *) w.pos, w.len, 0);
return(0); return(0);
} }

View file

@ -63,7 +63,8 @@ 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; int32 subkeys;
int r;
uint doc_cnt; uint doc_cnt;
FT_SUPERDOC sdoc, *sptr; FT_SUPERDOC sdoc, *sptr;
TREE_ELEMENT *selem; TREE_ELEMENT *selem;
@ -127,7 +128,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
goto do_skip; goto do_skip;
} }
#if HA_FT_WTYPE == HA_KEYTYPE_FLOAT #if HA_FT_WTYPE == HA_KEYTYPE_FLOAT
tmp_weight=*(float*)&subkeys; tmp_weight=*(float*) (char*) &subkeys;
#else #else
#error #error
#endif #endif

View file

@ -109,10 +109,11 @@ my_bool maria_ft_boolean_check_syntax_string(const uchar *str)
3 - right bracket 3 - right bracket
4 - stopword found 4 - stopword found
*/ */
uchar maria_ft_get_word(CHARSET_INFO *cs, uchar **start, uchar *end, uchar maria_ft_get_word(CHARSET_INFO *cs, const uchar **start,
const uchar *end,
FT_WORD *word, MYSQL_FTPARSER_BOOLEAN_INFO *param) FT_WORD *word, MYSQL_FTPARSER_BOOLEAN_INFO *param)
{ {
uchar *doc=*start; const uchar *doc= *start;
int ctype; int ctype;
uint mwc, length; uint mwc, length;
int mbl; int mbl;
@ -203,11 +204,11 @@ ret:
return param->type; return param->type;
} }
uchar maria_ft_simple_get_word(CHARSET_INFO *cs, uchar **start, uchar maria_ft_simple_get_word(CHARSET_INFO *cs, const uchar **start,
const uchar *end, FT_WORD *word, const uchar *end, FT_WORD *word,
my_bool skip_stopwords) my_bool skip_stopwords)
{ {
uchar *doc= *start; const uchar *doc= *start;
uint mwc, length; uint mwc, length;
int ctype, mbl; int ctype, mbl;
DBUG_ENTER("maria_ft_simple_get_word"); DBUG_ENTER("maria_ft_simple_get_word");
@ -259,8 +260,9 @@ void maria_ft_parse_init(TREE *wtree, CHARSET_INFO *cs)
static int maria_ft_add_word(MYSQL_FTPARSER_PARAM *param, static int maria_ft_add_word(MYSQL_FTPARSER_PARAM *param,
char *word, int word_len, const uchar *word, size_t word_len,
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info
__attribute__((unused)))
{ {
TREE *wtree; TREE *wtree;
FT_WORD w; FT_WORD w;
@ -276,7 +278,7 @@ static int maria_ft_add_word(MYSQL_FTPARSER_PARAM *param,
w.pos= ptr; w.pos= ptr;
} }
else else
w.pos= (uchar *) word; w.pos= word;
w.len= word_len; w.len= word_len;
if (!tree_insert(wtree, &w, 0, wtree->custom_arg)) if (!tree_insert(wtree, &w, 0, wtree->custom_arg))
{ {
@ -288,17 +290,17 @@ static int maria_ft_add_word(MYSQL_FTPARSER_PARAM *param,
static int maria_ft_parse_internal(MYSQL_FTPARSER_PARAM *param, static int maria_ft_parse_internal(MYSQL_FTPARSER_PARAM *param,
char *doc_arg, int doc_len) const uchar *doc_arg, size_t doc_len)
{ {
uchar *doc= (uchar*) doc_arg; const uchar *doc= doc_arg;
uchar *end= doc + doc_len; const uchar *end= doc + doc_len;
MY_FT_PARSER_PARAM *ft_param=param->mysql_ftparam; MY_FT_PARSER_PARAM *ft_param=param->mysql_ftparam;
TREE *wtree= ft_param->wtree; TREE *wtree= ft_param->wtree;
FT_WORD w; FT_WORD w;
DBUG_ENTER("maria_ft_parse_internal"); DBUG_ENTER("maria_ft_parse_internal");
while (maria_ft_simple_get_word(wtree->custom_arg, &doc, end, &w, TRUE)) while (maria_ft_simple_get_word(wtree->custom_arg, &doc, end, &w, TRUE))
if (param->mysql_add_word(param, (char *) w.pos, w.len, 0)) if (param->mysql_add_word(param, w.pos, w.len, 0))
DBUG_RETURN(1); DBUG_RETURN(1);
DBUG_RETURN(0); DBUG_RETURN(0);
} }
@ -378,7 +380,7 @@ MYSQL_FTPARSER_PARAM *maria_ftparser_call_initializer(MARIA_HA *info,
mysql_add_word != 0 - parser is initialized, or no mysql_add_word != 0 - parser is initialized, or no
initialization needed. */ initialization needed. */
info->ftparser_param[ftparser_nr].mysql_add_word= info->ftparser_param[ftparser_nr].mysql_add_word=
(int (*)(struct st_mysql_ftparser_param *, char *, int, (int (*)(struct st_mysql_ftparser_param *, const uchar *, size_t,
MYSQL_FTPARSER_BOOLEAN_INFO *)) 1; MYSQL_FTPARSER_BOOLEAN_INFO *)) 1;
if (parser->init && parser->init(&info->ftparser_param[ftparser_nr])) if (parser->init && parser->init(&info->ftparser_param[ftparser_nr]))
return 0; return 0;

View file

@ -96,7 +96,7 @@
#define FTB_RQUOT (ft_boolean_syntax[11]) #define FTB_RQUOT (ft_boolean_syntax[11])
typedef struct st_maria_ft_word { typedef struct st_maria_ft_word {
uchar * pos; const uchar * pos;
uint len; uint len;
double weight; double weight;
} FT_WORD; } FT_WORD;
@ -106,9 +106,9 @@ int is_stopword(char *word, uint len);
MARIA_KEY *_ma_ft_make_key(MARIA_HA *, MARIA_KEY *, uint , uchar *, FT_WORD *, MARIA_KEY *_ma_ft_make_key(MARIA_HA *, MARIA_KEY *, uint , uchar *, FT_WORD *,
my_off_t); my_off_t);
uchar maria_ft_get_word(CHARSET_INFO *, uchar **, uchar *, FT_WORD *, uchar maria_ft_get_word(CHARSET_INFO *, const uchar **, const uchar *,
MYSQL_FTPARSER_BOOLEAN_INFO *); FT_WORD *, MYSQL_FTPARSER_BOOLEAN_INFO *);
uchar maria_ft_simple_get_word(CHARSET_INFO *, uchar **, const uchar *, uchar maria_ft_simple_get_word(CHARSET_INFO *, const uchar **, const uchar *,
FT_WORD *, my_bool); FT_WORD *, my_bool);
typedef struct _st_maria_ft_seg_iterator { typedef struct _st_maria_ft_seg_iterator {

View file

@ -920,7 +920,6 @@ merge_buffers(MARIA_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
uchar *strpos; uchar *strpos;
BUFFPEK *buffpek,**refpek; BUFFPEK *buffpek,**refpek;
QUEUE queue; QUEUE queue;
volatile int *killed= _ma_killed_ptr(info->sort_info->param);
DBUG_ENTER("merge_buffers"); DBUG_ENTER("merge_buffers");
count=error=0; count=error=0;
@ -953,10 +952,6 @@ merge_buffers(MARIA_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
{ {
for (;;) for (;;)
{ {
if (*killed)
{
error=1; goto err;
}
buffpek=(BUFFPEK*) queue_top(&queue); buffpek=(BUFFPEK*) queue_top(&queue);
if (to_file) if (to_file)
{ {
@ -976,6 +971,12 @@ merge_buffers(MARIA_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
buffpek->key+=sort_length; buffpek->key+=sort_length;
if (! --buffpek->mem_count) if (! --buffpek->mem_count)
{ {
/* It's enough to check for killedptr before a slow operation */
if (_ma_killed_ptr(info->sort_info->param))
{
error=1;
goto err;
}
if (!(error=(int) info->read_to_buffer(from_file,buffpek,sort_length))) if (!(error=(int) info->read_to_buffer(from_file,buffpek,sort_length)))
{ {
uchar *base= buffpek->base; uchar *base= buffpek->base;

View file

@ -528,7 +528,7 @@ void _ma_remove_table_from_trnman(MARIA_SHARE *share, TRN *trn)
safe_mutex_assert_owner(&share->intern_lock); safe_mutex_assert_owner(&share->intern_lock);
for (prev= (MARIA_USED_TABLES**) &trn->used_tables, tables= *prev; for (prev= (MARIA_USED_TABLES**) (char*) &trn->used_tables, tables= *prev;
tables; tables;
tables= *prev) tables= *prev)
{ {

View file

@ -1160,7 +1160,7 @@ int _ma_flush_table_files(MARIA_HA *info, uint flush_data_or_index,
Functions needed by _ma_check (are overridden in MySQL/ha_maria.cc). Functions needed by _ma_check (are overridden in MySQL/ha_maria.cc).
See ma_check_standalone.h . See ma_check_standalone.h .
*/ */
volatile int *_ma_killed_ptr(HA_CHECK *param); int _ma_killed_ptr(HA_CHECK *param);
void _ma_check_print_error _VARARGS((HA_CHECK *param, const char *fmt, ...)) void _ma_check_print_error _VARARGS((HA_CHECK *param, const char *fmt, ...))
ATTRIBUTE_FORMAT(printf, 2, 3); ATTRIBUTE_FORMAT(printf, 2, 3);
void _ma_check_print_warning _VARARGS((HA_CHECK *param, const char *fmt, ...)) void _ma_check_print_warning _VARARGS((HA_CHECK *param, const char *fmt, ...))

View file

@ -116,7 +116,7 @@ int main(int argc,char *argv[])
subkeys=ft_sintXkorr(info->lastkey_buff + keylen + 1); subkeys=ft_sintXkorr(info->lastkey_buff + keylen + 1);
if (subkeys >= 0) if (subkeys >= 0)
weight=*(float*)&subkeys; weight=*(float*) (char*) &subkeys;
#ifdef HAVE_SNPRINTF #ifdef HAVE_SNPRINTF
snprintf(buf,MAX_LEN,"%.*s",(int) keylen,info->lastkey_buff+1); snprintf(buf,MAX_LEN,"%.*s",(int) keylen,info->lastkey_buff+1);

View file

@ -300,8 +300,8 @@ TRN *trnman_new_trn(WT_THD *wt)
(ABA isn't possible, we're behind a mutex (ABA isn't possible, we're behind a mutex
*/ */
my_atomic_rwlock_wrlock(&LOCK_pool); my_atomic_rwlock_wrlock(&LOCK_pool);
while (tmp.trn && !my_atomic_casptr((void **)&pool, &tmp.v, while (tmp.trn && !my_atomic_casptr((void **)(char*) &pool, &tmp.v,
(void *)tmp.trn->next)) (void *)tmp.trn->next))
/* no-op */; /* no-op */;
my_atomic_rwlock_wrunlock(&LOCK_pool); my_atomic_rwlock_wrunlock(&LOCK_pool);
@ -545,7 +545,7 @@ static void trnman_free_trn(TRN *trn)
down after the loop at -O2 down after the loop at -O2
*/ */
*(TRN * volatile *)&(trn->next)= tmp.trn; *(TRN * volatile *)&(trn->next)= tmp.trn;
} while (!my_atomic_casptr((void **)&pool, &tmp.v, trn)); } while (!my_atomic_casptr((void **)(char*)&pool, &tmp.v, trn));
my_atomic_rwlock_wrunlock(&LOCK_pool); my_atomic_rwlock_wrunlock(&LOCK_pool);
} }

View file

@ -180,7 +180,7 @@ typedef struct st_my_ftb_param
static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param,
char *word, int word_len, const uchar *word, size_t word_len,
MYSQL_FTPARSER_BOOLEAN_INFO *info) MYSQL_FTPARSER_BOOLEAN_INFO *info)
{ {
MY_FTB_PARAM *ftb_param= param->mysql_ftparam; MY_FTB_PARAM *ftb_param= param->mysql_ftparam;
@ -282,19 +282,19 @@ static int ftb_query_add_word(MYSQL_FTPARSER_PARAM *param,
static int ftb_parse_query_internal(MYSQL_FTPARSER_PARAM *param, static int ftb_parse_query_internal(MYSQL_FTPARSER_PARAM *param,
char *query, int len) const uchar *query, size_t len)
{ {
MY_FTB_PARAM *ftb_param= param->mysql_ftparam; MY_FTB_PARAM *ftb_param= param->mysql_ftparam;
MYSQL_FTPARSER_BOOLEAN_INFO info; MYSQL_FTPARSER_BOOLEAN_INFO info;
CHARSET_INFO *cs= ftb_param->ftb->charset; CHARSET_INFO *cs= ftb_param->ftb->charset;
uchar **start= (uchar**) &query; const uchar **start= &query;
uchar *end= (uchar*) query + len; const uchar *end= query + len;
FT_WORD w; FT_WORD w;
info.prev= ' '; info.prev= ' ';
info.quot= 0; info.quot= 0;
while (ft_get_word(cs, start, end, &w, &info)) while (ft_get_word(cs, start, end, &w, &info))
param->mysql_add_word(param, (char*) w.pos, w.len, &info); param->mysql_add_word(param, w.pos, w.len, &info);
return(0); return(0);
} }
@ -616,7 +616,7 @@ typedef struct st_my_ftb_phrase_param
static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param,
char *word, int word_len, const uchar *word, size_t word_len,
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused)))
{ {
MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam;
@ -648,15 +648,15 @@ static int ftb_phrase_add_word(MYSQL_FTPARSER_PARAM *param,
static int ftb_check_phrase_internal(MYSQL_FTPARSER_PARAM *param, static int ftb_check_phrase_internal(MYSQL_FTPARSER_PARAM *param,
char *document, int len) const uchar *document, size_t len)
{ {
FT_WORD word; FT_WORD word;
MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam; MY_FTB_PHRASE_PARAM *phrase_param= param->mysql_ftparam;
const uchar *docend= (uchar*) document + len; const uchar *docend= (uchar*) document + len;
while (ft_simple_get_word(phrase_param->cs, (uchar**) &document, docend, while (ft_simple_get_word(phrase_param->cs, &document, docend,
&word, FALSE)) &word, FALSE))
{ {
param->mysql_add_word(param, (char*) word.pos, word.len, 0); param->mysql_add_word(param, word.pos, word.len, 0);
if (phrase_param->match) if (phrase_param->match)
break; break;
} }
@ -874,7 +874,7 @@ typedef struct st_my_ftb_find_param
static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param, static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param,
char *word, int len, const uchar *word, size_t len,
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused)))
{ {
MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam;
@ -888,8 +888,8 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param,
for (a= 0, b= ftb->queue.elements, c= (a+b)/2; b-a>1; c= (a+b)/2) for (a= 0, b= ftb->queue.elements, c= (a+b)/2; b-a>1; c= (a+b)/2)
{ {
ftbw= ftb->list[c]; ftbw= ftb->list[c];
if (ha_compare_text(ftb->charset, (uchar*)word, len, if (ha_compare_text(ftb->charset, word, len,
(uchar*)ftbw->word+1, ftbw->len-1, ftbw->word+1, ftbw->len-1,
(my_bool) (ftbw->flags & FTB_FLAG_TRUNC), 0) < 0) (my_bool) (ftbw->flags & FTB_FLAG_TRUNC), 0) < 0)
b= c; b= c;
else else
@ -915,8 +915,8 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param,
for (; c >= 0; c--) for (; c >= 0; c--)
{ {
ftbw= ftb->list[c]; ftbw= ftb->list[c];
if (ha_compare_text(ftb->charset, (uchar*)word, len, if (ha_compare_text(ftb->charset, word, len,
(uchar*)ftbw->word + 1,ftbw->len - 1, ftbw->word + 1,ftbw->len - 1,
(my_bool)(ftbw->flags & FTB_FLAG_TRUNC), 0)) (my_bool)(ftbw->flags & FTB_FLAG_TRUNC), 0))
{ {
if (ftb->with_scan & FTB_FLAG_TRUNC) if (ftb->with_scan & FTB_FLAG_TRUNC)
@ -935,14 +935,14 @@ static int ftb_find_relevance_add_word(MYSQL_FTPARSER_PARAM *param,
static int ftb_find_relevance_parse(MYSQL_FTPARSER_PARAM *param, static int ftb_find_relevance_parse(MYSQL_FTPARSER_PARAM *param,
char *doc, int len) const uchar *doc, size_t len)
{ {
MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam; MY_FTB_FIND_PARAM *ftb_param= param->mysql_ftparam;
FT_INFO *ftb= ftb_param->ftb; FT_INFO *ftb= ftb_param->ftb;
uchar *end= (uchar*) doc + len; const uchar *end= doc + len;
FT_WORD w; FT_WORD w;
while (ft_simple_get_word(ftb->charset, (uchar**) &doc, end, &w, TRUE)) while (ft_simple_get_word(ftb->charset, &doc, end, &w, TRUE))
param->mysql_add_word(param, (char*) w.pos, w.len, 0); param->mysql_add_word(param, w.pos, w.len, 0);
return(0); return(0);
} }

View file

@ -63,7 +63,8 @@ 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; int32 subkeys;
int r;
uint keylen, doc_cnt; uint keylen, doc_cnt;
FT_SUPERDOC sdoc, *sptr; FT_SUPERDOC sdoc, *sptr;
TREE_ELEMENT *selem; TREE_ELEMENT *selem;
@ -123,7 +124,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
goto do_skip; goto do_skip;
} }
#if HA_FT_WTYPE == HA_KEYTYPE_FLOAT #if HA_FT_WTYPE == HA_KEYTYPE_FLOAT
tmp_weight=*(float*)&subkeys; /* The weight we read was actually a float */
tmp_weight=*(float*) (char*) &subkeys;
#else #else
#error #error
#endif #endif

View file

@ -106,10 +106,10 @@ my_bool ft_boolean_check_syntax_string(const uchar *str)
3 - right bracket 3 - right bracket
4 - stopword found 4 - stopword found
*/ */
uchar ft_get_word(CHARSET_INFO *cs, uchar **start, uchar *end, uchar ft_get_word(CHARSET_INFO *cs, const uchar **start, const uchar *end,
FT_WORD *word, MYSQL_FTPARSER_BOOLEAN_INFO *param) FT_WORD *word, MYSQL_FTPARSER_BOOLEAN_INFO *param)
{ {
uchar *doc=*start; const uchar *doc= *start;
int ctype; int ctype;
uint mwc, length; uint mwc, length;
int mbl; int mbl;
@ -201,10 +201,11 @@ ret:
return param->type; return param->type;
} }
uchar ft_simple_get_word(CHARSET_INFO *cs, uchar **start, const uchar *end, uchar ft_simple_get_word(CHARSET_INFO *cs, const uchar **start,
FT_WORD *word, my_bool skip_stopwords) const uchar *end, FT_WORD *word,
my_bool skip_stopwords)
{ {
uchar *doc= *start; const uchar *doc= *start;
uint mwc, length; uint mwc, length;
int mbl; int mbl;
int ctype; int ctype;
@ -216,7 +217,7 @@ uchar ft_simple_get_word(CHARSET_INFO *cs, uchar **start, const uchar *end,
{ {
if (doc >= end) if (doc >= end)
DBUG_RETURN(0); DBUG_RETURN(0);
mbl= cs->cset->ctype(cs, &ctype, (uchar*)doc, (uchar*)end); mbl= cs->cset->ctype(cs, &ctype, doc, end);
if (true_word_char(ctype, *doc)) if (true_word_char(ctype, *doc))
break; break;
} }
@ -225,7 +226,7 @@ uchar ft_simple_get_word(CHARSET_INFO *cs, uchar **start, const uchar *end,
for (word->pos= doc; doc < end; length++, for (word->pos= doc; doc < end; length++,
doc+= (mbl > 0 ? mbl : (mbl < 0 ? -mbl : 1))) doc+= (mbl > 0 ? mbl : (mbl < 0 ? -mbl : 1)))
{ {
mbl= cs->cset->ctype(cs, &ctype, (uchar*)doc, (uchar*)end); mbl= cs->cset->ctype(cs, &ctype, doc, end);
if (true_word_char(ctype, *doc)) if (true_word_char(ctype, *doc))
mwc= 0; mwc= 0;
else if (!misc_word_char(*doc) || mwc) else if (!misc_word_char(*doc) || mwc)
@ -238,7 +239,7 @@ uchar ft_simple_get_word(CHARSET_INFO *cs, uchar **start, const uchar *end,
if (skip_stopwords == FALSE || if (skip_stopwords == FALSE ||
(length >= ft_min_word_len && length < ft_max_word_len && (length >= ft_min_word_len && length < ft_max_word_len &&
!is_stopword((char*) word->pos, word->len))) !is_stopword(word->pos, word->len)))
{ {
*start= doc; *start= doc;
DBUG_RETURN(1); DBUG_RETURN(1);
@ -257,8 +258,9 @@ void ft_parse_init(TREE *wtree, CHARSET_INFO *cs)
static int ft_add_word(MYSQL_FTPARSER_PARAM *param, static int ft_add_word(MYSQL_FTPARSER_PARAM *param,
char *word, int word_len, const uchar *word, size_t word_len,
MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info __attribute__((unused))) MYSQL_FTPARSER_BOOLEAN_INFO *boolean_info
__attribute__((unused)))
{ {
TREE *wtree; TREE *wtree;
FT_WORD w; FT_WORD w;
@ -286,10 +288,10 @@ static int ft_add_word(MYSQL_FTPARSER_PARAM *param,
static int ft_parse_internal(MYSQL_FTPARSER_PARAM *param, static int ft_parse_internal(MYSQL_FTPARSER_PARAM *param,
char *doc_arg, int doc_len) const uchar *doc_arg, size_t doc_len)
{ {
uchar *doc= (uchar*) doc_arg; const uchar *doc= doc_arg;
uchar *end= doc + doc_len; const uchar *end= doc + doc_len;
MY_FT_PARSER_PARAM *ft_param=param->mysql_ftparam; MY_FT_PARSER_PARAM *ft_param=param->mysql_ftparam;
TREE *wtree= ft_param->wtree; TREE *wtree= ft_param->wtree;
FT_WORD w; FT_WORD w;
@ -302,7 +304,7 @@ static int ft_parse_internal(MYSQL_FTPARSER_PARAM *param,
} }
int ft_parse(TREE *wtree, uchar *doc, int doclen, int ft_parse(TREE *wtree, const uchar *doc, int doclen,
struct st_mysql_ftparser *parser, struct st_mysql_ftparser *parser,
MYSQL_FTPARSER_PARAM *param, MEM_ROOT *mem_root) MYSQL_FTPARSER_PARAM *param, MEM_ROOT *mem_root)
{ {
@ -377,7 +379,7 @@ MYSQL_FTPARSER_PARAM *ftparser_call_initializer(MI_INFO *info,
mysql_add_word != 0 - parser is initialized, or no mysql_add_word != 0 - parser is initialized, or no
initialization needed. */ initialization needed. */
info->ftparser_param[ftparser_nr].mysql_add_word= info->ftparser_param[ftparser_nr].mysql_add_word=
(int (*)(struct st_mysql_ftparser_param *, char *, int, (int (*)(struct st_mysql_ftparser_param *, const uchar *, size_t,
MYSQL_FTPARSER_BOOLEAN_INFO *)) 1; MYSQL_FTPARSER_BOOLEAN_INFO *)) 1;
if (parser->init && parser->init(&info->ftparser_param[ftparser_nr])) if (parser->init && parser->init(&info->ftparser_param[ftparser_nr]))
return 0; return 0;

View file

@ -66,7 +66,8 @@ int ft_init_stopwords()
{ {
File fd; File fd;
uint len; uint len;
uchar *buffer, *start, *end; uchar *buffer;
const uchar *start, *end;
FT_WORD w; FT_WORD w;
int error=-1; int error=-1;
@ -109,7 +110,7 @@ err0:
} }
int is_stopword(char *word, uint len) int is_stopword(const uchar *word, size_t len)
{ {
FT_STOPWORD sw; FT_STOPWORD sw;
sw.pos=word; sw.pos=word;

View file

@ -96,18 +96,18 @@
#define FTB_RQUOT (ft_boolean_syntax[11]) #define FTB_RQUOT (ft_boolean_syntax[11])
typedef struct st_ft_word { typedef struct st_ft_word {
uchar * pos; const uchar *pos;
uint len; uint len;
double weight; double weight;
} FT_WORD; } FT_WORD;
int is_stopword(char *word, uint len); int is_stopword(const uchar *word, size_t len);
uint _ft_make_key(MI_INFO *, uint , uchar *, FT_WORD *, my_off_t); uint _ft_make_key(MI_INFO *, uint , uchar *, FT_WORD *, my_off_t);
uchar ft_get_word(CHARSET_INFO *, uchar **, uchar *, FT_WORD *, uchar ft_get_word(CHARSET_INFO *, const uchar **, const uchar *, FT_WORD *,
MYSQL_FTPARSER_BOOLEAN_INFO *); MYSQL_FTPARSER_BOOLEAN_INFO *);
uchar ft_simple_get_word(CHARSET_INFO *, uchar **, const uchar *, uchar ft_simple_get_word(CHARSET_INFO *, const uchar **, const uchar *,
FT_WORD *, my_bool); FT_WORD *, my_bool);
typedef struct _st_ft_seg_iterator { typedef struct _st_ft_seg_iterator {
@ -121,7 +121,7 @@ void _mi_ft_segiterator_dummy_init(const uchar *, uint, FT_SEG_ITERATOR *);
uint _mi_ft_segiterator(FT_SEG_ITERATOR *); uint _mi_ft_segiterator(FT_SEG_ITERATOR *);
void ft_parse_init(TREE *, CHARSET_INFO *); void ft_parse_init(TREE *, CHARSET_INFO *);
int ft_parse(TREE *, uchar *, int, struct st_mysql_ftparser *parser, int ft_parse(TREE *, const uchar *, int, struct st_mysql_ftparser *parser,
MYSQL_FTPARSER_PARAM *, MEM_ROOT *); MYSQL_FTPARSER_PARAM *, MEM_ROOT *);
FT_WORD * ft_linearize(TREE *, MEM_ROOT *); FT_WORD * ft_linearize(TREE *, MEM_ROOT *);
FT_WORD * _mi_ft_parserecord(MI_INFO *, uint, const uchar *, MEM_ROOT *); FT_WORD * _mi_ft_parserecord(MI_INFO *, uint, const uchar *, MEM_ROOT *);

View file

@ -497,10 +497,9 @@ int check_definition(MI_KEYDEF *t1_keyinfo, MI_COLUMNDEF *t1_recinfo,
extern "C" { extern "C" {
volatile int *killed_ptr(HA_CHECK *param) int killed_ptr(HA_CHECK *param)
{ {
/* In theory Unsafe conversion, but should be ok for now */ return thd_killed((THD*)param->thd);
return (int*) &(((THD *)(param->thd))->killed);
} }
void mi_check_print_error(HA_CHECK *param, const char *fmt,...) void mi_check_print_error(HA_CHECK *param, const char *fmt,...)

View file

@ -166,7 +166,7 @@ int chk_del(HA_CHECK *param, register MI_INFO *info, ulonglong test_flag)
empty=0; empty=0;
for (i= info->state->del ; i > 0L && next_link != HA_OFFSET_ERROR ; i--) for (i= info->state->del ; i > 0L && next_link != HA_OFFSET_ERROR ; i--)
{ {
if (*killed_ptr(param)) if (killed_ptr(param))
DBUG_RETURN(1); DBUG_RETURN(1);
if (test_flag & T_VERBOSE) if (test_flag & T_VERBOSE)
printf(" %9s",llstr(next_link,buff)); printf(" %9s",llstr(next_link,buff));
@ -261,7 +261,7 @@ static int check_k_link(HA_CHECK *param, register MI_INFO *info, uint nr)
records= (ha_rows) (info->state->key_file_length / block_size); records= (ha_rows) (info->state->key_file_length / block_size);
while (next_link != HA_OFFSET_ERROR && records > 0) while (next_link != HA_OFFSET_ERROR && records > 0)
{ {
if (*killed_ptr(param)) if (killed_ptr(param))
DBUG_RETURN(1); DBUG_RETURN(1);
if (param->testflag & T_VERBOSE) if (param->testflag & T_VERBOSE)
printf("%16s",llstr(next_link,llbuff)); printf("%16s",llstr(next_link,llbuff));
@ -778,7 +778,7 @@ static int chk_index(HA_CHECK *param, MI_INFO *info, MI_KEYDEF *keyinfo,
} }
for ( ;; ) for ( ;; )
{ {
if (*killed_ptr(param)) if (killed_ptr(param))
goto err; goto err;
memcpy((char*) info->lastkey,(char*) key,key_length); memcpy((char*) info->lastkey,(char*) key,key_length);
info->lastkey_length=key_length; info->lastkey_length=key_length;
@ -990,7 +990,7 @@ int chk_data_link(HA_CHECK *param, MI_INFO *info, my_bool extend)
bzero((char*) key_checksum, info->s->base.keys * sizeof(key_checksum[0])); bzero((char*) key_checksum, info->s->base.keys * sizeof(key_checksum[0]));
while (pos < info->state->data_file_length) while (pos < info->state->data_file_length)
{ {
if (*killed_ptr(param)) if (killed_ptr(param))
goto err2; goto err2;
switch (info->s->data_file_type) { switch (info->s->data_file_type) {
case BLOCK_RECORD: case BLOCK_RECORD:
@ -3247,7 +3247,7 @@ static int sort_get_next_record(MI_SORT_PARAM *sort_param)
char llbuff[22],llbuff2[22]; char llbuff[22],llbuff2[22];
DBUG_ENTER("sort_get_next_record"); DBUG_ENTER("sort_get_next_record");
if (*killed_ptr(param)) if (killed_ptr(param))
DBUG_RETURN(1); DBUG_RETURN(1);
switch (share->data_file_type) { switch (share->data_file_type) {

View file

@ -113,7 +113,7 @@ int main(int argc,char *argv[])
subkeys=ft_sintXkorr(info->lastkey+keylen+1); subkeys=ft_sintXkorr(info->lastkey+keylen+1);
if (subkeys >= 0) if (subkeys >= 0)
weight=*(float*)&subkeys; weight= *(float*) (char*) &subkeys;
#ifdef HAVE_SNPRINTF #ifdef HAVE_SNPRINTF
snprintf(buf,MAX_LEN,"%.*s",(int) keylen,info->lastkey+1); snprintf(buf,MAX_LEN,"%.*s",(int) keylen,info->lastkey+1);

View file

@ -1745,11 +1745,9 @@ err:
sorting sorting
*/ */
static int not_killed= 0; int killed_ptr(HA_CHECK *param __attribute__((unused)))
volatile int *killed_ptr(HA_CHECK *param __attribute__((unused)))
{ {
return &not_killed; /* always NULL */ return 0;
} }
/* print warnings and errors */ /* print warnings and errors */

View file

@ -725,7 +725,7 @@ my_bool mi_dynmap_file(MI_INFO *info, my_off_t size);
void mi_remap_file(MI_INFO *info, my_off_t size); void mi_remap_file(MI_INFO *info, my_off_t size);
/* Functions needed by mi_check */ /* Functions needed by mi_check */
volatile int *killed_ptr(HA_CHECK *param); int killed_ptr(HA_CHECK *param);
void mi_check_print_error _VARARGS((HA_CHECK *param, const char *fmt, ...)); void mi_check_print_error _VARARGS((HA_CHECK *param, const char *fmt, ...));
void mi_check_print_warning _VARARGS((HA_CHECK *param, const char *fmt, ...)); void mi_check_print_warning _VARARGS((HA_CHECK *param, const char *fmt, ...));
void mi_check_print_info _VARARGS((HA_CHECK *param, const char *fmt, ...)); void mi_check_print_info _VARARGS((HA_CHECK *param, const char *fmt, ...));

View file

@ -385,7 +385,7 @@ static int examine_log(char * file_name, char **table_names)
file_info.name=0; file_info.name=0;
file_info.show_name=0; file_info.show_name=0;
file_info.record=0; file_info.record=0;
if (read_string(&cache,(uchar**) &file_info.name, if (read_string(&cache,(uchar**) (char*) &file_info.name,
(uint) mi_uint2korr(head))) (uint) mi_uint2korr(head)))
goto err; goto err;
{ {

View file

@ -900,7 +900,6 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
uchar *strpos; uchar *strpos;
BUFFPEK *buffpek,**refpek; BUFFPEK *buffpek,**refpek;
QUEUE queue; QUEUE queue;
volatile int *killed= killed_ptr(info->sort_info->param);
DBUG_ENTER("merge_buffers"); DBUG_ENTER("merge_buffers");
count=error=0; count=error=0;
@ -933,10 +932,6 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
{ {
for (;;) for (;;)
{ {
if (*killed)
{
error=1; goto err;
}
buffpek=(BUFFPEK*) queue_top(&queue); buffpek=(BUFFPEK*) queue_top(&queue);
if (to_file) if (to_file)
{ {
@ -956,6 +951,12 @@ merge_buffers(MI_SORT_PARAM *info, uint keys, IO_CACHE *from_file,
buffpek->key+=sort_length; buffpek->key+=sort_length;
if (! --buffpek->mem_count) if (! --buffpek->mem_count)
{ {
/* It's enough to check for killedptr before a slow operation */
if (killed_ptr(info->sort_info->param))
{
error=1;
goto err;
}
if (!(error=(int) info->read_to_buffer(from_file,buffpek,sort_length))) if (!(error=(int) info->read_to_buffer(from_file,buffpek,sort_length)))
{ {
uchar *base= buffpek->base; uchar *base= buffpek->base;

View file

@ -3139,7 +3139,7 @@ skip_info:
if (mach_read_from_4(page + FIL_PAGE_OFFSET) || !offset) { if (mach_read_from_4(page + FIL_PAGE_OFFSET) || !offset) {
mach_write_to_4(page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID, id); mach_write_to_4(page + FIL_PAGE_ARCH_LOG_NO_OR_SPACE_ID, id);
for (i = 0; i < n_index; i++) { for (i = 0; (ulint) i < n_index; i++) {
if (offset / UNIV_PAGE_SIZE == root_page[i]) { if (offset / UNIV_PAGE_SIZE == root_page[i]) {
/* this is index root page */ /* this is index root page */
mach_write_to_4(page + FIL_PAGE_DATA + PAGE_BTR_SEG_LEAF mach_write_to_4(page + FIL_PAGE_DATA + PAGE_BTR_SEG_LEAF

View file

@ -28,11 +28,11 @@ table cache" for later retrieval.
Created July 17, 2007 Vasil Dimov Created July 17, 2007 Vasil Dimov
*******************************************************/ *******************************************************/
#include <mysql/plugin.h>
#include "mysql_addons.h" #include "mysql_addons.h"
#include "univ.i" #include "univ.i"
#include <mysql/plugin.h>
#include "buf0buf.h" #include "buf0buf.h"
#include "dict0dict.h" #include "dict0dict.h"
#include "ha0storage.h" #include "ha0storage.h"