Commit 7962de4c authored by unknown's avatar unknown

merged


BitKeeper/etc/gone:
  auto-union
BitKeeper/etc/logging_ok:
  auto-union
BitKeeper/deleted/.del-skipkeys~888e38cf95239a33:
  'Auto converge rename'
Docs/manual.texi:
  Auto merged
libmysqld/lib_sql.cc:
  Auto merged
myisam/ft_boolean_search.c:
  Auto merged
myisam/ft_nlq_search.c:
  Auto merged
myisam/ft_parser.c:
  Auto merged
myisam/ftdefs.h:
  Auto merged
myisam/mi_create.c:
  Auto merged
mysys/my_init.c:
  Auto merged
sql/log.cc:
  Auto merged
sql/log_event.h:
  Auto merged
sql/sql_base.cc:
  Auto merged
sql/sql_table.cc:
  Auto merged
sql/sql_update.cc:
  Auto merged
parents d51b72ca f5563dda
This diff is collapsed.
...@@ -20,6 +20,7 @@ heikki@donna.mysql.fi ...@@ -20,6 +20,7 @@ heikki@donna.mysql.fi
heikki@hundin.mysql.fi heikki@hundin.mysql.fi
heikki@rescue. heikki@rescue.
heikki@work.mysql.com heikki@work.mysql.com
hf@genie.(none)
jani@dsl-jkl1657.dial.inet.fi jani@dsl-jkl1657.dial.inet.fi
jani@hynda.(none) jani@hynda.(none)
jani@hynda.mysql.fi jani@hynda.mysql.fi
......
...@@ -215,7 +215,14 @@ if ($opt_stage <= 1) ...@@ -215,7 +215,14 @@ if ($opt_stage <= 1)
# Only enable InnoDB when requested (required to be able to # Only enable InnoDB when requested (required to be able to
# build the "Classic" packages that do not include InnoDB) # build the "Classic" packages that do not include InnoDB)
$opt_config_options.= " --without-innodb" if (!$opt_innodb); if ($opt_innodb)
{
$opt_config_options.= " --with-innodb";
}
else
{
$opt_config_options.= " --without-innodb";
}
if ($opt_with_other_libc) if ($opt_with_other_libc)
{ {
...@@ -314,7 +321,7 @@ if (!$opt_no_test) ...@@ -314,7 +321,7 @@ if (!$opt_no_test)
} }
if ($opt_innodb) if ($opt_innodb)
{ {
$extra.=" --innodb_data_file_path=ibdata1:100M"; $extra.=" --innodb_data_file_path=ibdata1:100M:autoextend";
} }
safe_system("./bin/mysqld --no-defaults --basedir . --datadir ./data --skip-locking $extra >> $log 2>&1 &"); safe_system("./bin/mysqld --no-defaults --basedir . --datadir ./data --skip-locking $extra >> $log 2>&1 &");
sleep(2); sleep(2);
......
...@@ -9934,7 +9934,9 @@ Error in accept: Protocol error ...@@ -9934,7 +9934,9 @@ Error in accept: Protocol error
@end example @end example
You might try starting the server with the @code{--set-variable back_log=50} You might try starting the server with the @code{--set-variable back_log=50}
option as a workaround for this. @xref{Command-line options}. option as a workaround for this. Please note that @code{--set-variable} is
deprecated since @strong{MySQL 4.0}, just use @code{--back_log=50} instead.
@xref{Command-line options}.
If you are linking your own MySQL client, you might get the If you are linking your own MySQL client, you might get the
following error when you try to execute it: following error when you try to execute it:
...@@ -14390,7 +14392,9 @@ Only use one thread (for debugging under Linux). @xref{Debugging server}. ...@@ -14390,7 +14392,9 @@ Only use one thread (for debugging under Linux). @xref{Debugging server}.
Give a variable a value. @code{--help} lists variables. You can find a full Give a variable a value. @code{--help} lists variables. You can find a full
description for all variables in the @code{SHOW VARIABLES} section in this description for all variables in the @code{SHOW VARIABLES} section in this
manual. @xref{SHOW VARIABLES}. The tuning server parameters section includes manual. @xref{SHOW VARIABLES}. The tuning server parameters section includes
information of how to optimise these. @xref{Server parameters}. information of how to optimize these. Please note that @code{--set-variable}
is deprecated since @strong{MySQL 4.0}, just use @code{--var=option} instead.
@xref{Server parameters}.
In MySQL 4.0.2 one can set a variable directly with In MySQL 4.0.2 one can set a variable directly with
@code{--variable-name=option} and @code{set-variable} is not anymore needed @code{--variable-name=option} and @code{set-variable} is not anymore needed
...@@ -14611,7 +14615,9 @@ This is equivalent to @code{--option=value} on the command-line. ...@@ -14611,7 +14615,9 @@ This is equivalent to @code{--option=value} on the command-line.
@item set-variable = variable=value @item set-variable = variable=value
This is equivalent to @code{--set-variable variable=value} on the command-line. This is equivalent to @code{--set-variable variable=value} on the command-line.
This syntax must be used to set a @code{mysqld} variable. This syntax must be used to set a @code{mysqld} variable. Please note that
@code{--set-variable} is deprecated since @strong{MySQL 4.0}, just use
@code{--variable=value} instead.
@end table @end table
The @code{client} group allows you to specify options that apply to all The @code{client} group allows you to specify options that apply to all
...@@ -18164,8 +18170,10 @@ Output debug log. The @code{debug_options} string often is ...@@ -18164,8 +18170,10 @@ Output debug log. The @code{debug_options} string often is
@item -? or --help @item -? or --help
Display a help message and exit. Display a help message and exit.
@item -O var=option, --set-variable var=option @item -O var=option, --set-variable var=option
Set the value of a variable. The possible variables and their default values Set the value of a variable. Please note that @code{--set-variable} is
for myisamchk can be examined with @code{myisamchk --help}: deprecated since @strong{MySQL 4.0}, just use @code{--var=option} instead.
The possible variables and their default values for myisamchk can be examined
with @code{myisamchk --help}:
@multitable @columnfractions .20 .10 @multitable @columnfractions .20 .10
@item @strong{Variable} @tab @strong{Value} @item @strong{Variable} @tab @strong{Value}
@item key_buffer_size @tab 523264 @item key_buffer_size @tab 523264
...@@ -22104,6 +22112,8 @@ Don't write column names in results. ...@@ -22104,6 +22112,8 @@ Don't write column names in results.
@cindex @code{set-variable}, @code{mysql} option @cindex @code{set-variable}, @code{mysql} option
@item -O, --set-variable var=option @item -O, --set-variable var=option
Give a variable a value. @code{--help} lists variables. Give a variable a value. @code{--help} lists variables.
Please note that @code{--set-variable} is deprecated since
@strong{MySQL 4.0}, just use @code{--var=option} instead.
@cindex @code{one-database}, @code{mysql} option @cindex @code{one-database}, @code{mysql} option
@item -o, --one-database @item -o, --one-database
...@@ -22181,7 +22191,8 @@ Wait and retry if connection is down instead of aborting. ...@@ -22181,7 +22191,8 @@ Wait and retry if connection is down instead of aborting.
@end table @end table
You can also set the following variables with @code{-O} or You can also set the following variables with @code{-O} or
@code{--set-variable}: @code{--set-variable}; please note that @code{--set-variable} is
deprecated since @strong{MySQL 4.0}, just use @code{--var=option} instead:
@cindex timeout, @code{connect_timeout} variable @cindex timeout, @code{connect_timeout} variable
@cindex @code{connect_timeout} variable @cindex @code{connect_timeout} variable
...@@ -22874,6 +22885,8 @@ The MySQL user name to use when connecting to the server. The ...@@ -22874,6 +22885,8 @@ The MySQL user name to use when connecting to the server. The
default value is your Unix login name. default value is your Unix login name.
@item -O var=option, --set-variable var=option @item -O var=option, --set-variable var=option
Set the value of a variable. The possible variables are listed below. Set the value of a variable. The possible variables are listed below.
Please note that @code{--set-variable} is deprecated since
@strong{MySQL 4.0}, just use @code{--var=option} instead.
@item -v, --verbose @item -v, --verbose
Verbose mode. Print out more information on what the program does. Verbose mode. Print out more information on what the program does.
@item -V, --version @item -V, --version
...@@ -27396,6 +27409,9 @@ thread_stack current value: 131072 ...@@ -27396,6 +27409,9 @@ thread_stack current value: 131072
wait_timeout current value: 28800 wait_timeout current value: 28800
@end example @end example
Please note that @code{--set-variable} is deprecated since
@strong{MySQL 4.0}, just use @code{--var=option} instead.
If there is a @code{mysqld} server currently running, you can see what If there is a @code{mysqld} server currently running, you can see what
values it actually is using for the variables by executing this command: values it actually is using for the variables by executing this command:
...@@ -45679,7 +45695,7 @@ will be active. ...@@ -45679,7 +45695,7 @@ will be active.
static char *server_args[] = @{ static char *server_args[] = @{
"this_program", /* this string is not used */ "this_program", /* this string is not used */
"--datadir=.", "--datadir=.",
"--set-variable=key_buffer_size=32M" "--key_buffer_size=32M"
@}; @};
static char *server_groups[] = @{ static char *server_groups[] = @{
"embedded", "embedded",
...@@ -47995,6 +48011,8 @@ use big packets so that you run out of memory. ...@@ -47995,6 +48011,8 @@ use big packets so that you run out of memory.
If you are using the @code{mysql} client, you may specify a bigger If you are using the @code{mysql} client, you may specify a bigger
buffer by starting the client with @code{mysql --set-variable=max_allowed_packet=8M}. Other clients have different methods to set this variable. buffer by starting the client with @code{mysql --set-variable=max_allowed_packet=8M}. Other clients have different methods to set this variable.
Please note that @code{--set-variable} is deprecated since
@strong{MySQL 4.0}, just use @code{--max-allowed-packet=8M} instead.
You can use the option file to set @code{max_allowed_packet} to a larger You can use the option file to set @code{max_allowed_packet} to a larger
size in @code{mysqld}. For example, if you are expecting to store the size in @code{mysqld}. For example, if you are expecting to store the
...@@ -50797,6 +50815,8 @@ each individual 4.0.x release. ...@@ -50797,6 +50815,8 @@ each individual 4.0.x release.
@appendixsubsec Changes in release 4.0.5 @appendixsubsec Changes in release 4.0.5
@itemize @itemize
@item @item
Small code improvement in multi-table updates
@item
Fixed a newly introduced bug that caused @code{ORDER BY ... LIMIT #} Fixed a newly introduced bug that caused @code{ORDER BY ... LIMIT #}
to not return all rows. to not return all rows.
@item @item
...@@ -50826,6 +50846,12 @@ original @code{--ignore-spaces} in @code{mysqlclient}. (Both syntaxes will ...@@ -50826,6 +50846,12 @@ original @code{--ignore-spaces} in @code{mysqlclient}. (Both syntaxes will
work). work).
@item @item
Don't require @code{UPDATE} privilege when using @code{REPLACE}. Don't require @code{UPDATE} privilege when using @code{REPLACE}.
@item
Allow braces in joins in all positions. Formerly, things like
@code{SELECT * FROM (t2 LEFT JOIN t3 USING (a)), t1} worked, but
not @code{SELECT * FROM t1, (t2 LEFT JOIN t3 USING (a))}. Note that
braces are simply removed, they do not change the way the join is
executed.
@end itemize @end itemize
@node News-4.0.4, News-4.0.3, News-4.0.5, News-4.0.x @node News-4.0.4, News-4.0.3, News-4.0.5, News-4.0.x
...@@ -51654,6 +51680,8 @@ not yet 100% confident in this code. ...@@ -51654,6 +51680,8 @@ not yet 100% confident in this code.
@appendixsubsec Changes in release 3.23.54 @appendixsubsec Changes in release 3.23.54
@itemize @itemize
@item @item
Fixed a problem with BDB and @code{ALTER TABLE}.
@item
Fixed reference to freed memory when doing complicated @code{GROUP BY Fixed reference to freed memory when doing complicated @code{GROUP BY
... ORDER BY} queries. Symptom was that @code{mysqld} died in function ... ORDER BY} queries. Symptom was that @code{mysqld} died in function
@code{send_fields}. @code{send_fields}.
...@@ -51689,8 +51717,6 @@ Small fix in @code{safe_mysqld} for some shells. ...@@ -51689,8 +51717,6 @@ Small fix in @code{safe_mysqld} for some shells.
@item @item
Fixed that @code{FLUSH STATUS} doesn't reset @code{Delayed_insert_threads}. Fixed that @code{FLUSH STATUS} doesn't reset @code{Delayed_insert_threads}.
@item @item
Fixed that @code{SHOW STATUS} doesn't reset @code{Delayed_insert_threads}.
@item
Fixed core dump bug when using the @code{BINARY} cast on a @code{NULL} value. Fixed core dump bug when using the @code{BINARY} cast on a @code{NULL} value.
@item @item
Fixed race condition when someone did a @code{GRANT} at the same time a new Fixed race condition when someone did a @code{GRANT} at the same time a new
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
/* By Jani Tolonen, 2001-04-20, MySQL Development Team */ /* By Jani Tolonen, 2001-04-20, MySQL Development Team */
#define CHECK_VERSION "2.4.1" #define CHECK_VERSION "2.4.2"
#include "client_priv.h" #include "client_priv.h"
#include <m_ctype.h> #include <m_ctype.h>
...@@ -463,7 +463,7 @@ static int handle_request_for_tables(char *tables, uint length) ...@@ -463,7 +463,7 @@ static int handle_request_for_tables(char *tables, uint length)
if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME)))) if (!(query =(char *) my_malloc((sizeof(char)*(length+110)), MYF(MY_WME))))
return 1; return 1;
sprintf(query, "%s TABLE `%s` %s", op, tables, options); sprintf(query, "%s TABLE %s %s", op, tables, options);
if (mysql_query(sock, query)) if (mysql_query(sock, query))
{ {
sprintf(message, "when executing '%s TABLE `%s` %s", op, tables,options); sprintf(message, "when executing '%s TABLE `%s` %s", op, tables,options);
...@@ -493,12 +493,9 @@ static void print_result() ...@@ -493,12 +493,9 @@ static void print_result()
if (status) if (status)
{ {
if (found_error) if (found_error && opt_auto_repair && what_to_do != DO_REPAIR &&
{ (!opt_fast || strcmp(row[3],"OK")))
if (what_to_do != DO_REPAIR && opt_auto_repair && insert_dynamic(&tables4repair, prev);
(!opt_fast || strcmp(row[3],"OK")))
insert_dynamic(&tables4repair, row[0]);
}
found_error=0; found_error=0;
if (opt_silent) if (opt_silent)
continue; continue;
...@@ -515,6 +512,9 @@ static void print_result() ...@@ -515,6 +512,9 @@ static void print_result()
strmov(prev, row[0]); strmov(prev, row[0]);
putchar('\n'); putchar('\n');
} }
if (found_error && opt_auto_repair && what_to_do != DO_REPAIR &&
(!opt_fast || strcmp(row[3],"OK")))
insert_dynamic(&tables4repair, prev);
mysql_free_result(res); mysql_free_result(res);
} }
......
...@@ -4,6 +4,8 @@ ...@@ -4,6 +4,8 @@
* $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
*/ */
#include "univ.i"
#define FLEX_SCANNER #define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5 #define YY_FLEX_MINOR_VERSION 5
...@@ -607,13 +609,18 @@ How to make the InnoDB parser and lexer C files: ...@@ -607,13 +609,18 @@ How to make the InnoDB parser and lexer C files:
6. Remove the #include of unistd.h from about line 2500 of lexyy.c 6. Remove the #include of unistd.h from about line 2500 of lexyy.c
7. Move #include <math.h> in pars0grm.c after #include "univ.i" to remove
a large file compilation error on AIX.
8. Move #include "univ.i" in lexyy.c to the file start to remove a large
file compilation error on AIX.
These instructions seem to work at least with bison-1.28 and flex-2.5.4 on These instructions seem to work at least with bison-1.28 and flex-2.5.4 on
Linux. Linux.
*******************************************************/ *******************************************************/
#line 36 "pars0lex.l" #line 36 "pars0lex.l"
#define YYSTYPE que_node_t* #define YYSTYPE que_node_t*
#include "univ.i"
#include "pars0pars.h" #include "pars0pars.h"
#include "pars0grm.h" #include "pars0grm.h"
#include "pars0sym.h" #include "pars0sym.h"
......
...@@ -102,6 +102,8 @@ que_node_t */ ...@@ -102,6 +102,8 @@ que_node_t */
#include "que0que.h" #include "que0que.h"
#include "row0sel.h" #include "row0sel.h"
#include <math.h>
#define YYSTYPE que_node_t* #define YYSTYPE que_node_t*
/* #define __STDC__ */ /* #define __STDC__ */
......
...@@ -107,6 +107,7 @@ void start_embedded_conn1(NET * net) ...@@ -107,6 +107,7 @@ void start_embedded_conn1(NET * net)
thd->command=COM_SLEEP; thd->command=COM_SLEEP;
thd->version=refresh_version; thd->version=refresh_version;
thd->set_time(); thd->set_time();
bzero(thd->scramble, sizeof(thd->scramble));
init_sql_alloc(&thd->mem_root,8192,8192); init_sql_alloc(&thd->mem_root,8192,8192);
check_connections1(thd); check_connections1(thd);
......
...@@ -202,7 +202,8 @@ static void _ftb_init_index_search(FT_INFO *ftb) ...@@ -202,7 +202,8 @@ static void _ftb_init_index_search(FT_INFO *ftb)
MI_KEYDEF *keyinfo; MI_KEYDEF *keyinfo;
my_off_t keyroot; my_off_t keyroot;
if (ftb->state != READY || ftb->keynr == NO_SUCH_KEY) if ((ftb->state != READY && ftb->state !=INDEX_DONE) ||
ftb->keynr == NO_SUCH_KEY)
return; return;
ftb->state=INDEX_SEARCH; ftb->state=INDEX_SEARCH;
......
...@@ -79,6 +79,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) ...@@ -79,6 +79,8 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
#error #error
#endif #endif
DBUG_ENTER("walk_and_match");
word->weight=LWS_FOR_QUERY; word->weight=LWS_FOR_QUERY;
keylen=_ft_make_key(aio->info,aio->keynr,(char*) aio->keybuff,word,0); keylen=_ft_make_key(aio->info,aio->keynr,(char*) aio->keybuff,word,0);
...@@ -112,7 +114,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) ...@@ -112,7 +114,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
#else #else
#error #error
#endif #endif
if(tmp_weight==0) return doc_cnt; /* stopword, doc_cnt should be 0 */ if(tmp_weight==0) DBUG_RETURN(doc_cnt); /* stopword, doc_cnt should be 0 */
#ifdef EVAL_RUN #ifdef EVAL_RUN
cnt=*(byte *)(aio->info->lastkey+keylen); cnt=*(byte *)(aio->info->lastkey+keylen);
...@@ -122,7 +124,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) ...@@ -122,7 +124,7 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
/* saving document matched into dtree */ /* saving document matched into dtree */
if (!(selem=tree_insert(&aio->dtree, &sdoc, 0, aio->dtree.custom_arg))) if (!(selem=tree_insert(&aio->dtree, &sdoc, 0, aio->dtree.custom_arg)))
return 1; DBUG_RETURN(1);
sptr=(FT_SUPERDOC *)ELEMENT_KEY((&aio->dtree), selem); sptr=(FT_SUPERDOC *)ELEMENT_KEY((&aio->dtree), selem);
...@@ -153,21 +155,22 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio) ...@@ -153,21 +155,22 @@ static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
if (doc_cnt) if (doc_cnt)
{ {
word->weight*=GWS_IN_USE; word->weight*=GWS_IN_USE;
if (word->weight < 0) if (word->weight < 0) word->weight=0;
word->weight=0;
} }
return 0; DBUG_RETURN(0);
} }
static int walk_and_copy(FT_SUPERDOC *from, static int walk_and_copy(FT_SUPERDOC *from,
uint32 count __attribute__((unused)), FT_DOC **to) uint32 count __attribute__((unused)), FT_DOC **to)
{ {
DBUG_ENTER("walk_and_copy");
from->doc.weight+=from->tmp_weight*from->word_ptr->weight; from->doc.weight+=from->tmp_weight*from->word_ptr->weight;
(*to)->dpos=from->doc.dpos; (*to)->dpos=from->doc.dpos;
(*to)->weight=from->doc.weight; (*to)->weight=from->doc.weight;
(*to)++; (*to)++;
return 0; DBUG_RETURN(0);
} }
...@@ -185,12 +188,13 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query, ...@@ -185,12 +188,13 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query,
FT_DOC *dptr; FT_DOC *dptr;
FT_INFO *dlist=NULL; FT_INFO *dlist=NULL;
my_off_t saved_lastpos=info->lastpos; my_off_t saved_lastpos=info->lastpos;
DBUG_ENTER("ft_init_nlq_search");
/* black magic ON */ /* black magic ON */
if ((int) (keynr = _mi_check_index(info,keynr)) < 0) if ((int) (keynr = _mi_check_index(info,keynr)) < 0)
return NULL; DBUG_RETURN(NULL);
if (_mi_readinfo(info,F_RDLCK,1)) if (_mi_readinfo(info,F_RDLCK,1))
return NULL; DBUG_RETURN(NULL);
/* black magic OFF */ /* black magic OFF */
aio.info=info; aio.info=info;
...@@ -237,7 +241,7 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query, ...@@ -237,7 +241,7 @@ FT_INFO *ft_init_nlq_search(MI_INFO *info, uint keynr, byte *query,
err: err:
info->lastpos=saved_lastpos; info->lastpos=saved_lastpos;
return dlist; DBUG_RETURN(dlist);
} }
......
...@@ -190,6 +190,7 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) ...@@ -190,6 +190,7 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word)
{ {
byte *doc=*start; byte *doc=*start;
int mwc; int mwc;
DBUG_ENTER("ft_simple_get_word");
while (doc<end) while (doc<end)
{ {
...@@ -211,32 +212,35 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word) ...@@ -211,32 +212,35 @@ byte ft_simple_get_word(byte **start, byte *end, FT_WORD *word)
!is_stopword(word->pos, word->len)) !is_stopword(word->pos, word->len))
{ {
*start=doc; *start=doc;
return 1; DBUG_RETURN(1);
} }
} }
return 0; DBUG_RETURN(0);
} }
void ft_parse_init(TREE *wtree, CHARSET_INFO *cs) void ft_parse_init(TREE *wtree, CHARSET_INFO *cs)
{ {
DBUG_ENTER("ft_parse_init");
if (!is_tree_inited(wtree)) if (!is_tree_inited(wtree))
init_tree(wtree,0,0,sizeof(FT_WORD),(qsort_cmp2)&FT_WORD_cmp,0,NULL, cs); init_tree(wtree,0,0,sizeof(FT_WORD),(qsort_cmp2)&FT_WORD_cmp,0,NULL, cs);
DBUG_VOID_RETURN;
} }
int ft_parse(TREE *wtree, byte *doc, int doclen) int ft_parse(TREE *wtree, byte *doc, int doclen)
{ {
byte *end=doc+doclen; byte *end=doc+doclen;
FT_WORD w; FT_WORD w;
DBUG_ENTER("ft_parse");
while (ft_simple_get_word(&doc,end,&w)) while (ft_simple_get_word(&doc,end,&w))
{ {
if (!tree_insert(wtree, &w, 0, wtree->custom_arg)) if (!tree_insert(wtree, &w, 0, wtree->custom_arg))
goto err; goto err;
} }
return 0; DBUG_RETURN(0);
err: err:
delete_tree(wtree); delete_tree(wtree);
return 1; DBUG_RETURN(1);
} }
...@@ -78,7 +78,7 @@ extern ulong collstat; ...@@ -78,7 +78,7 @@ extern ulong collstat;
/* Mysterious, but w/o (double) GWS_IDF performs better :-o */ /* Mysterious, but w/o (double) GWS_IDF performs better :-o */
#define GWS_IDF log(aio->info->state->records/doc_cnt) #define GWS_IDF log(aio->info->state->records/doc_cnt)
#define GWS_IDF1 log((double)aio->info->state->records/doc_cnt) #define GWS_IDF1 log((double)aio->info->state->records/doc_cnt)
#define GWS_PROB log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) #define GWS_PROB ((aio->info->state->records > doc_cnt) ? log(((double)(aio->info->state->records-doc_cnt))/doc_cnt) : 0 )
#define GWS_FREQ (1.0/doc_cnt) #define GWS_FREQ (1.0/doc_cnt)
#define GWS_SQUARED pow(log((double)aio->info->state->records/doc_cnt),2) #define GWS_SQUARED pow(log((double)aio->info->state->records/doc_cnt),2)
#define GWS_CUBIC pow(log((double)aio->info->state->records/doc_cnt),3) #define GWS_CUBIC pow(log((double)aio->info->state->records/doc_cnt),3)
......
...@@ -404,7 +404,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs, ...@@ -404,7 +404,7 @@ int mi_create(const char *name,uint keys,MI_KEYDEF *keydefs,
length+=key_length; length+=key_length;
keydef->block_length= MI_BLOCK_SIZE(length,pointer,MI_MAX_KEYPTR_SIZE); keydef->block_length= MI_BLOCK_SIZE(length,pointer,MI_MAX_KEYPTR_SIZE);
if (keydef->block_length > MI_MAX_KEY_BLOCK_LENGTH || if (keydef->block_length > MI_MAX_KEY_BLOCK_LENGTH ||
length > MI_MAX_KEY_LENGTH) length >= MI_MAX_KEY_BUFF)
{ {
my_errno=HA_WRONG_CREATE_OPTION; my_errno=HA_WRONG_CREATE_OPTION;
goto err; goto err;
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
/* Remove all rows from a MyISAM table */ /* Remove all rows from a MyISAM table */
/* This only clears the status information and truncates the data file */ /* This clears the status information and truncates files */
#include "myisamdef.h" #include "myisamdef.h"
...@@ -49,14 +49,15 @@ int mi_delete_all_rows(MI_INFO *info) ...@@ -49,14 +49,15 @@ int mi_delete_all_rows(MI_INFO *info)
state->key_root[i]= HA_OFFSET_ERROR; state->key_root[i]= HA_OFFSET_ERROR;
myisam_log_command(MI_LOG_DELETE_ALL,info,(byte*) 0,0,0); myisam_log_command(MI_LOG_DELETE_ALL,info,(byte*) 0,0,0);
VOID(_mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE));
if (my_chsize(info->dfile, 0, 0, MYF(MY_WME)))
goto err;
/* /*
If we are using delayed keys or if the user has done changes to the tables If we are using delayed keys or if the user has done changes to the tables
since it was locked then there may be key blocks in the key cache since it was locked then there may be key blocks in the key cache
*/ */
flush_key_blocks(share->kfile, FLUSH_IGNORE_CHANGED); flush_key_blocks(share->kfile, FLUSH_IGNORE_CHANGED);
if (my_chsize(info->dfile, 0, 0, MYF(MY_WME)) ||
my_chsize(share->kfile, share->base.keystart, 0, MYF(MY_WME)) )
goto err;
VOID(_mi_writeinfo(info,WRITEINFO_UPDATE_KEYFILE));
allow_break(); /* Allow SIGHUP & SIGINT */ allow_break(); /* Allow SIGHUP & SIGINT */
DBUG_RETURN(0); DBUG_RETURN(0);
......
-- source include/have_bdb.inc -- source include/have_bdb.inc
# test for bug reported by Mark Steele # test for bug reported by Mark Steele
drop table if exists t1; drop table if exists t1;
......
...@@ -217,6 +217,10 @@ static void my_win_init(void) ...@@ -217,6 +217,10 @@ static void my_win_init(void)
setlocale(LC_CTYPE, ""); /* To get right sortorder */ setlocale(LC_CTYPE, ""); /* To get right sortorder */
/* Clear the OS system variable TZ and avoid the 100% CPU usage */
_putenv( "TZ=" );
_tzset();
/* apre la chiave HKEY_LOCAL_MACHINES\software\MySQL */ /* apre la chiave HKEY_LOCAL_MACHINES\software\MySQL */
if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)targetKey,0, if (RegOpenKeyEx(HKEY_LOCAL_MACHINE,(LPCTSTR)targetKey,0,
KEY_READ,&hSoftMysql) != ERROR_SUCCESS) KEY_READ,&hSoftMysql) != ERROR_SUCCESS)
...@@ -240,7 +244,7 @@ static void my_win_init(void) ...@@ -240,7 +244,7 @@ static void my_win_init(void)
/* Inserisce i dati come variabili d'ambiente */ /* Inserisce i dati come variabili d'ambiente */
my_env=strdup(EnvString); /* variable for putenv must be allocated ! */ my_env=strdup(EnvString); /* variable for putenv must be allocated ! */
putenv(EnvString) ; putenv(my_env) ;
dimNameValueBuffer = dimName ; dimNameValueBuffer = dimName ;
dimDataValueBuffer = dimData ; dimDataValueBuffer = dimData ;
......
...@@ -64,7 +64,7 @@ foreach $table (@ARGV) ...@@ -64,7 +64,7 @@ foreach $table (@ARGV)
{ {
if (uc($row->[1]) eq uc($opt_type)) if (uc($row->[1]) eq uc($opt_type))
{ {
print "$table is alread of type $opt_type; Ignored\n"; print "$table is already of type $opt_type; Ignored\n";
next; next;
} }
} }
......
...@@ -4,7 +4,7 @@ use Getopt::Long; ...@@ -4,7 +4,7 @@ use Getopt::Long;
use POSIX qw(strftime); use POSIX qw(strftime);
$|=1; $|=1;
$VER="2.3"; $VER="2.4";
$opt_config_file = undef(); $opt_config_file = undef();
$opt_example = 0; $opt_example = 0;
...@@ -508,8 +508,8 @@ sub example ...@@ -508,8 +508,8 @@ sub example
[mysqld_multi] [mysqld_multi]
mysqld = @bindir@/mysqld_safe mysqld = @bindir@/mysqld_safe
mysqladmin = @bindir@/mysqladmin mysqladmin = @bindir@/mysqladmin
user = multi_admin user = root
password = multipass password = your_password
[mysqld2] [mysqld2]
socket = /tmp/mysql.sock2 socket = /tmp/mysql.sock2
......
...@@ -559,15 +559,15 @@ sub copy_files { ...@@ -559,15 +559,15 @@ sub copy_files {
my @cp = ($method); my @cp = ($method);
# add option to preserve mod time etc of copied files # add option to preserve mod time etc of copied files
# not critical, but nice to have # not critical, but nice to have
push @cp, "-p" if $^O =~ m/^(solaris|linux|freebsd)$/; push @cp, "-p" if $^O =~ m/^(solaris|linux|freebsd|darwin)$/;
# add recursive option for scp # add recursive option for scp
push @cp, "-r" if $^O =~ /m^(solaris|linux|freebsd)$/ && $method =~ /^scp\b/; push @cp, "-r" if $^O =~ /m^(solaris|linux|freebsd|darwin)$/ && $method =~ /^scp\b/;
my @non_raid = map { "'$_'" } grep { ! m:/\d{2}/[^/]+$: } @$files; my @non_raid = map { "'$_'" } grep { ! m:/\d{2}/[^/]+$: } @$files;
# add files to copy and the destination directory # add files to copy and the destination directory
+ safe_system( @cp, @non_raid, "'$target'" ); safe_system( @cp, @non_raid, "'$target'" );
foreach my $rd ( @$raid_dirs ) { foreach my $rd ( @$raid_dirs ) {
my @raid = map { "'$_'" } grep { m:$rd/: } @$files; my @raid = map { "'$_'" } grep { m:$rd/: } @$files;
......
...@@ -2180,8 +2180,9 @@ longlong Item_func_inet_aton::val_int() ...@@ -2180,8 +2180,9 @@ longlong Item_func_inet_aton::val_int()
void Item_func_match::init_search(bool no_order) void Item_func_match::init_search(bool no_order)
{ {
DBUG_ENTER("Item_func_match::init_search");
if (ft_handler) if (ft_handler)
return; DBUG_VOID_RETURN;
if (key == NO_SUCH_KEY) if (key == NO_SUCH_KEY)
concat=new Item_func_concat_ws(new Item_string(" ",1, concat=new Item_func_concat_ws(new Item_string(" ",1,
...@@ -2194,7 +2195,7 @@ void Item_func_match::init_search(bool no_order) ...@@ -2194,7 +2195,7 @@ void Item_func_match::init_search(bool no_order)
master->init_search(no_order); master->init_search(no_order);
ft_handler=master->ft_handler; ft_handler=master->ft_handler;
join_key=master->join_key; join_key=master->join_key;
return; DBUG_VOID_RETURN;
} }
String *ft_tmp= 0; String *ft_tmp= 0;
...@@ -2214,10 +2215,9 @@ void Item_func_match::init_search(bool no_order) ...@@ -2214,10 +2215,9 @@ void Item_func_match::init_search(bool no_order)
join_key && !no_order); join_key && !no_order);
if (join_key) if (join_key)
{
table->file->ft_handler=ft_handler; table->file->ft_handler=ft_handler;
return;
} DBUG_VOID_RETURN;
} }
...@@ -2367,13 +2367,14 @@ bool Item_func_match::eq(const Item *item, bool binary_cmp) const ...@@ -2367,13 +2367,14 @@ bool Item_func_match::eq(const Item *item, bool binary_cmp) const
double Item_func_match::val() double Item_func_match::val()
{ {
DBUG_ENTER("Item_func_match::val");
if (ft_handler == NULL) if (ft_handler == NULL)
return -1.0; DBUG_RETURN(-1.0);
if (join_key) if (join_key)
{ {
if (table->file->ft_handler) if (table->file->ft_handler)
return ft_handler->please->get_relevance(ft_handler); DBUG_RETURN(ft_handler->please->get_relevance(ft_handler));
join_key=0; join_key=0;
} }
...@@ -2381,12 +2382,12 @@ double Item_func_match::val() ...@@ -2381,12 +2382,12 @@ double Item_func_match::val()
{ {
String *a= concat->val_str(&value); String *a= concat->val_str(&value);
if ((null_value= (a == 0))) if ((null_value= (a == 0)))
return 0; DBUG_RETURN(0);
return ft_handler->please->find_relevance(ft_handler, DBUG_RETURN(ft_handler->please->find_relevance(ft_handler,
(byte *)a->ptr(), a->length()); (byte *)a->ptr(), a->length()));
} }
else else
return ft_handler->please->find_relevance(ft_handler, record, 0); DBUG_RETURN(ft_handler->please->find_relevance(ft_handler, record, 0));
} }
......
...@@ -502,6 +502,35 @@ class Intvar_log_event: public Log_event ...@@ -502,6 +502,35 @@ class Intvar_log_event: public Log_event
bool is_valid() { return 1; } bool is_valid() { return 1; }
}; };
/*****************************************************************************
*
* Rand log event class
*
****************************************************************************/
class Rand_log_event: public Log_event
{
public:
ulonglong seed1;
ulonglong seed2;
#ifndef MYSQL_CLIENT
Rand_log_event(THD* thd_arg, ulonglong seed1_arg, ulonglong seed2_arg)
:Log_event(thd_arg),seed1(seed1_arg),seed2(seed2_arg)
{}
void pack_info(String* packet);
int exec_event(struct st_relay_log_info* rli);
#else
void print(FILE* file, bool short_form = 0, char* last_db = 0);
#endif
Rand_log_event(const char* buf, bool old_format);
~Rand_log_event() {}
Log_event_type get_type_code() { return RAND_EVENT;}
int get_data_size() { return sizeof(ulonglong) * 2; }
int write_data(IO_CACHE* file);
bool is_valid() { return 1; }
};
/***************************************************************************** /*****************************************************************************
* *
* Rand log event class * Rand log event class
......
...@@ -2416,6 +2416,7 @@ static void create_new_thread(THD *thd) ...@@ -2416,6 +2416,7 @@ static void create_new_thread(THD *thd)
for (uint i=0; i < 8 ; i++) // Generate password teststring for (uint i=0; i < 8 ; i++) // Generate password teststring
thd->scramble[i]= (char) (rnd(&sql_rand)*94+33); thd->scramble[i]= (char) (rnd(&sql_rand)*94+33);
thd->scramble[8]=0; thd->scramble[8]=0;
thd->real_id=pthread_self(); // Keep purify happy thd->real_id=pthread_self(); // Keep purify happy
/* Start a new thread to handle connection */ /* Start a new thread to handle connection */
......
...@@ -426,7 +426,17 @@ BOOL NTService::SeekStatus(LPCSTR szInternName, int OperationType) ...@@ -426,7 +426,17 @@ BOOL NTService::SeekStatus(LPCSTR szInternName, int OperationType)
// open a connection to the SCM // open a connection to the SCM
if (!(scm = OpenSCManager(0, 0,SC_MANAGER_CREATE_SERVICE))) if (!(scm = OpenSCManager(0, 0,SC_MANAGER_CREATE_SERVICE)))
printf("There is a problem with the Service Control Manager!\n"); {
DWORD ret_error=GetLastError();
if (ret_error == ERROR_ACCESS_DENIED)
{
printf("Install/Remove of the Service Denied!\n");
if(!is_super_user())
printf("That operation should be made by an user with Administrator privileges!\n");
}
else
printf("There is a problem for to open the Service Control Manager!\n");
}
else else
{ {
if (OperationType == 1) if (OperationType == 1)
...@@ -507,3 +517,82 @@ BOOL NTService::got_service_option(char **argv, char *service_option) ...@@ -507,3 +517,82 @@ BOOL NTService::got_service_option(char **argv, char *service_option)
return TRUE; return TRUE;
return FALSE; return FALSE;
} }
/* ------------------------------------------------------------------------
-------------------------------------------------------------------------- */
BOOL NTService::is_super_user()
{
HANDLE hAccessToken;
UCHAR InfoBuffer[1024];
PTOKEN_GROUPS ptgGroups=(PTOKEN_GROUPS)InfoBuffer;
DWORD dwInfoBufferSize;
PSID psidAdministrators;
SID_IDENTIFIER_AUTHORITY siaNtAuthority = SECURITY_NT_AUTHORITY;
UINT x;
BOOL ret_value=FALSE;
if(!OpenThreadToken(GetCurrentThread(), TOKEN_QUERY, TRUE,&hAccessToken ))
{
if(GetLastError() != ERROR_NO_TOKEN)
return FALSE;
if(!OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hAccessToken))
return FALSE;
}
ret_value= GetTokenInformation(hAccessToken,TokenGroups,InfoBuffer,
1024, &dwInfoBufferSize);
CloseHandle(hAccessToken);
if(!ret_value )
return FALSE;
if(!AllocateAndInitializeSid(&siaNtAuthority, 2,
SECURITY_BUILTIN_DOMAIN_RID,
DOMAIN_ALIAS_RID_ADMINS,
0, 0, 0, 0, 0, 0,
&psidAdministrators))
return FALSE;
ret_value = FALSE;
for(x=0;x<ptgGroups->GroupCount;x++)
{
if( EqualSid(psidAdministrators, ptgGroups->Groups[x].Sid) )
{
ret_value = TRUE;
break;
}
}
FreeSid(psidAdministrators);
return ret_value;
}
/* ------------------------------------------------------------------------
-------------------------------------------------------------------------- */
BOOL NTService::IsService(LPCSTR ServiceName)
{
BOOL ret_value=FALSE;
SC_HANDLE service, scm;
if (scm = OpenSCManager(0, 0,SC_MANAGER_ENUMERATE_SERVICE))
{
if ((service = OpenService(scm,ServiceName, SERVICE_ALL_ACCESS )))
{
ret_value=TRUE;
CloseServiceHandle(service);
}
CloseServiceHandle(scm);
}
return ret_value;
}
/* ------------------------------------------------------------------------
-------------------------------------------------------------------------- */
BOOL NTService::got_service_option(char **argv, char *service_option)
{
char *option;
for (option= argv[1]; *option; option++)
if (!strcmp(option, service_option))
return TRUE;
return FALSE;
}
...@@ -54,7 +54,7 @@ class NTService ...@@ -54,7 +54,7 @@ class NTService
BOOL Remove(LPCSTR szInternName); BOOL Remove(LPCSTR szInternName);
BOOL IsService(LPCSTR ServiceName); BOOL IsService(LPCSTR ServiceName);
BOOL got_service_option(char **argv, char *service_option); BOOL got_service_option(char **argv, char *service_option);
BOOL is_super_user();
void Stop(void); //to be called from app. to stop service void Stop(void); //to be called from app. to stop service
protected: protected:
......
...@@ -1689,6 +1689,7 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db, ...@@ -1689,6 +1689,7 @@ TABLE *open_temporary_table(THD *thd, const char *path, const char *db,
ha_open_options, ha_open_options,
tmp_table)) tmp_table))
{ {
my_free((char*) tmp_table,MYF(0));
DBUG_RETURN(0); DBUG_RETURN(0);
} }
......
...@@ -499,8 +499,7 @@ class THD :public ilink { ...@@ -499,8 +499,7 @@ class THD :public ilink {
uint8 query_cache_type; // type of query cache processing uint8 query_cache_type; // type of query cache processing
bool slave_thread; bool slave_thread;
bool set_query_id,locked,count_cuted_fields,some_tables_deleted; bool set_query_id,locked,count_cuted_fields,some_tables_deleted;
bool no_errors, allow_sum_func, password; bool no_errors, allow_sum_func, password, fatal_error;
bool fatal_error;
bool query_start_used,last_insert_id_used,insert_id_used,rand_used; bool query_start_used,last_insert_id_used,insert_id_used,rand_used;
ulonglong rand_saved_seed1, rand_saved_seed2; ulonglong rand_saved_seed1, rand_saved_seed2;
bool system_thread,in_lock_tables,global_read_lock; bool system_thread,in_lock_tables,global_read_lock;
......
...@@ -2023,16 +2023,24 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name, ...@@ -2023,16 +2023,24 @@ int mysql_alter_table(THD *thd,char *new_db, char *new_name,
#ifdef HAVE_BERKELEY_DB #ifdef HAVE_BERKELEY_DB
if (old_db_type == DB_TYPE_BERKELEY_DB) if (old_db_type == DB_TYPE_BERKELEY_DB)
{ {
(void) berkeley_flush_logs();
/* /*
For the alter table to be properly flushed to the logs, we For the alter table to be properly flushed to the logs, we
have to open the new table. If not, we get a problem on server have to open the new table. If not, we get a problem on server
shutdown. shutdown.
*/ */
if (!open_tables(thd, table_list)) // Should always succeed char path[FN_REFLEN];
(void) sprintf(path,"%s/%s/%s",mysql_data_home,new_db,table_name);
fn_format(path,path,"","",4);
table=open_temporary_table(thd, path, new_db, tmp_name,0);
if (table)
{ {
close_thread_table(thd, &table_list->table); intern_close_table(table);
my_free((char*) table, MYF(0));
} }
else
sql_print_error("Warning: Could not open BDB table %s.%s after rename\n",
new_db,table_name);
(void) berkeley_flush_logs();
} }
#endif #endif
table_list->table=0; // For query cache table_list->table=0; // For query cache
......
...@@ -445,7 +445,7 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u) ...@@ -445,7 +445,7 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
else else
*int_ptr++=counter; *int_ptr++=counter;
} }
if (!num_updated) if (!num_updated--)
{ {
net_printf(thd, ER_NOT_SUPPORTED_YET, "SET CLAUSE MUST CONTAIN TABLE.FIELD REFERENCE"); net_printf(thd, ER_NOT_SUPPORTED_YET, "SET CLAUSE MUST CONTAIN TABLE.FIELD REFERENCE");
DBUG_RETURN(1); DBUG_RETURN(1);
...@@ -455,11 +455,11 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u) ...@@ -455,11 +455,11 @@ multi_update::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
Here, I have to allocate the array of temporary tables Here, I have to allocate the array of temporary tables
I have to treat a case of num_updated=1 differently in send_data() method. I have to treat a case of num_updated=1 differently in send_data() method.
*/ */
if (num_updated > 1) if (num_updated)
{ {
tmp_tables = (TABLE **) sql_calloc(sizeof(TABLE *) * (num_updated - 1)); tmp_tables = (TABLE **) sql_calloc(sizeof(TABLE *) * num_updated);
infos = (COPY_INFO *) sql_calloc(sizeof(COPY_INFO) * (num_updated - 1)); infos = (COPY_INFO *) sql_calloc(sizeof(COPY_INFO) * num_updated);
fields_by_tables = (List_item **)sql_calloc(sizeof(List_item *) * num_updated); fields_by_tables = (List_item **)sql_calloc(sizeof(List_item *) * (num_updated + 1));
unsigned int counter; unsigned int counter;
List<Item> *temp_fields; List<Item> *temp_fields;
for (table_ref=update_tables, counter = 0; table_ref; table_ref=table_ref->next) for (table_ref=update_tables, counter = 0; table_ref; table_ref=table_ref->next)
...@@ -555,7 +555,7 @@ multi_update::~multi_update() ...@@ -555,7 +555,7 @@ multi_update::~multi_update()
table->time_stamp=save_time_stamps[counter]; table->time_stamp=save_time_stamps[counter];
} }
if (tmp_tables) if (tmp_tables)
for (uint counter = 0; counter < num_updated-1; counter++) for (uint counter = 0; counter < num_updated; counter++)
if (tmp_tables[counter]) if (tmp_tables[counter])
free_tmp_table(thd,tmp_tables[counter]); free_tmp_table(thd,tmp_tables[counter]);
} }
...@@ -567,7 +567,7 @@ bool multi_update::send_data(List<Item> &values) ...@@ -567,7 +567,7 @@ bool multi_update::send_data(List<Item> &values)
for (uint counter = 0; counter < fields.elements; counter++) for (uint counter = 0; counter < fields.elements; counter++)
real_values.pop(); real_values.pop();
// We have skipped fields .... // We have skipped fields ....
if (num_updated == 1) if (!num_updated)
{ {
for (table_being_updated=update_tables ; for (table_being_updated=update_tables ;
table_being_updated ; table_being_updated ;
...@@ -688,7 +688,7 @@ void multi_update::send_error(uint errcode,const char *err) ...@@ -688,7 +688,7 @@ void multi_update::send_error(uint errcode,const char *err)
if ((table_being_updated->table->file->has_transactions() && if ((table_being_updated->table->file->has_transactions() &&
table_being_updated == update_tables) || !not_trans_safe) table_being_updated == update_tables) || !not_trans_safe)
ha_rollback_stmt(thd); ha_rollback_stmt(thd);
else if (do_update && num_updated > 1) else if (do_update && num_updated)
VOID(do_updates(true)); VOID(do_updates(true));
} }
...@@ -775,7 +775,7 @@ bool multi_update::send_eof() ...@@ -775,7 +775,7 @@ bool multi_update::send_eof()
thd->proc_info="updating the reference tables"; thd->proc_info="updating the reference tables";
/* Does updates for the last n - 1 tables, returns 0 if ok */ /* Does updates for the last n - 1 tables, returns 0 if ok */
int error = (num_updated > 1) ? do_updates(false) : 0; /* do_updates returns 0 if success */ int error = (num_updated) ? do_updates(false) : 0; /* do_updates returns 0 if success */
/* reset used flags */ /* reset used flags */
#ifndef NOT_USED #ifndef NOT_USED
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment