Commit c369d529 authored by monty@hundin.mysql.fi's avatar monty@hundin.mysql.fi

merge (+ multi-table fix)

parents 830076cc c531b432
...@@ -80,5 +80,5 @@ EOF ...@@ -80,5 +80,5 @@ EOF
fi fi
else else
echo "commit failed because '$BK_STATUS', sorry life is hard..." echo "commit failed because '$BK_STATUS', you may need to re-clone..."
fi fi
...@@ -14186,7 +14186,10 @@ Set the default character set. @xref{Character sets}. ...@@ -14186,7 +14186,10 @@ Set the default character set. @xref{Character sets}.
@item --default-table-type=type @item --default-table-type=type
Set the default table type for tables. @xref{Table types}. Set the default table type for tables. @xref{Table types}.
@item --delay-key-write-for-all-tables @item --delay-key-write[= OFF | ON | ALL]
How MyISAM @code{DELAYED KEYS} should be used. @xref{Server parameters}.
@item --delay-key-write-for-all-tables; In MySQL 4.0.3 you should use --delay-key-write=ALL instead.
Don't flush key buffers between writes for any @code{MyISAM} table. Don't flush key buffers between writes for any @code{MyISAM} table.
@xref{Server parameters}. @xref{Server parameters}.
...@@ -14321,7 +14324,7 @@ correct it to stay within a given range and also adjusts the value a ...@@ -14321,7 +14324,7 @@ correct it to stay within a given range and also adjusts the value a
little to fix for the used algorithm. little to fix for the used algorithm.
@item --safe-mode @item --safe-mode
Skip some optimise stages. Implies @code{--skip-delay-key-write}. Skip some optimise stages.
@item --safe-show-database @item --safe-show-database
With this option, the @code{SHOW DATABASES} command returns only those With this option, the @code{SHOW DATABASES} command returns only those
...@@ -14340,8 +14343,8 @@ Turn off the ability to select and insert at the same time on @code{MyISAM} ...@@ -14340,8 +14343,8 @@ Turn off the ability to select and insert at the same time on @code{MyISAM}
tables. (This is only to be used if you think you have found a bug in this tables. (This is only to be used if you think you have found a bug in this
feature.) feature.)
@item --skip-delay-key-write @item --skip-delay-key-write; In MySQL 4.0.3 you should use --delay-key-write=OFF instead.
Ignore the @code{delay_key_write} option for all tables. Ignore the @code{DELAY_KEY_WRITE} option for all tables.
@xref{Server parameters}. @xref{Server parameters}.
@item --skip-grant-tables @item --skip-grant-tables
...@@ -14370,8 +14373,7 @@ Don't listen for TCP/IP connections at all. All interaction with ...@@ -14370,8 +14373,7 @@ Don't listen for TCP/IP connections at all. All interaction with
recommended for systems where only local requests are allowed. @xref{DNS}. recommended for systems where only local requests are allowed. @xref{DNS}.
@item --skip-new @item --skip-new
Don't use new, possible wrong routines. Implies @code{--skip-delay-key-write}. Don't use new, possible wrong routines.
This will also set default table type to @code{ISAM}. @xref{ISAM}.
@item --skip-symlink @item --skip-symlink
Don't delete or rename files that a symlinked file in the data directory Don't delete or rename files that a symlinked file in the data directory
...@@ -19848,16 +19850,20 @@ packet before responding with @code{Bad handshake}. ...@@ -19848,16 +19850,20 @@ packet before responding with @code{Bad handshake}.
The value of the @code{--datadir} option. The value of the @code{--datadir} option.
@item @code{delay_key_write} @item @code{delay_key_write}
If enabled (is on by default), MySQL will honor the Option for MyISAM tables. Can have one of the following values:
@code{DELAY_KEY_WRITE} option for @code{CREATE TABLE}. This means that the
key buffer for tables with this option will not get flushed on every @multitable @columnfractions .30 .70
index update, but only when a table is closed. This will speed up @item OFF @tab All CREATE TABLE ... DELAYED_KEY_WRITES are ignored.
writes on keys a lot, but you should add automatic checking of all tables @item ON @tab (default) MySQL will honor the @code{DELAY_KEY_WRITE} option
with @code{myisamchk --fast --force} if you use this. Note that if you for @code{CREATE TABLE}.
start @code{mysqld} with the @code{--delay-key-write-for-all-tables} @item ALL @tab All new opened tables are treated as if they were created with the @code{DELAY_KEY_WRITE} option.
option this means that all tables will be treated as if they were @end multitable
created with the @code{delay_key_write} option. You can clear this flag
by starting @code{mysqld} with @code{--skip-new} or @code{--safe-mode}. If @code{DELAY_KEY_WRITE} is enabled this means that the key buffer for
tables with this option will not get flushed on every index update, but
only when a table is closed. This will speed up writes on keys a lot,
but you should add automatic checking of all tables with @code{myisamchk
--fast --force} if you use this.
@item @code{delayed_insert_limit} @item @code{delayed_insert_limit}
After inserting @code{delayed_insert_limit} rows, the @code{INSERT After inserting @code{delayed_insert_limit} rows, the @code{INSERT
...@@ -19961,7 +19967,7 @@ status} and examine the variables @code{Key_read_requests}, ...@@ -19961,7 +19967,7 @@ status} and examine the variables @code{Key_read_requests},
The @code{Key_write/Key_write_requests} is usually near 1 if you are The @code{Key_write/Key_write_requests} is usually near 1 if you are
using mostly updates/deletes but may be much smaller if you tend to using mostly updates/deletes but may be much smaller if you tend to
do updates that affect many at the same time or if you are do updates that affect many at the same time or if you are
using @code{delay_key_write}. @xref{SHOW, , @code{SHOW}}. using @code{DELAY_KEY_WRITE}. @xref{SHOW, , @code{SHOW}}.
To get even more speed when writing many rows at the same time, use To get even more speed when writing many rows at the same time, use
@code{LOCK TABLES}. @xref{LOCK TABLES, , @code{LOCK TABLES}}. @code{LOCK TABLES}. @xref{LOCK TABLES, , @code{LOCK TABLES}}.
...@@ -24477,7 +24483,7 @@ offset by network delays. ...@@ -24477,7 +24483,7 @@ offset by network delays.
writes to it, and configure as many slaves as you have the money and writes to it, and configure as many slaves as you have the money and
rackspace for, distributing the reads among the master and the slaves. rackspace for, distributing the reads among the master and the slaves.
You can also start the slaves with @code{--skip-bdb}, You can also start the slaves with @code{--skip-bdb},
@code{--low-priority-updates} and @code{--delay-key-write-for-all-tables} @code{--low-priority-updates} and @code{--delay-key-write=ALL}
to get speed improvements for the slave. In this case the slave will to get speed improvements for the slave. In this case the slave will
use non-transactional @code{MyISAM} tables instead of @code{BDB} tables use non-transactional @code{MyISAM} tables instead of @code{BDB} tables
to get more speed. to get more speed.
...@@ -28630,7 +28636,7 @@ and if you can use @code{GLOBAL} or @code{SESSION} with them. ...@@ -28630,7 +28636,7 @@ and if you can use @code{GLOBAL} or @code{SESSION} with them.
@item concurrent_insert @tab bool @tab GLOBAL @item concurrent_insert @tab bool @tab GLOBAL
@item connect_timeout @tab num @tab GLOBAL @item connect_timeout @tab num @tab GLOBAL
@item convert_character_set @tab string @tab SESSION @item convert_character_set @tab string @tab SESSION
@item delay_key_write @tab bool @tab GLOBAL @item delay_key_write @tab OFF | ON | ALL @tab GLOBAL
@item delayed_insert_limit @tab num @tab GLOBAL @item delayed_insert_limit @tab num @tab GLOBAL
@item delayed_insert_timeout @tab num @tab GLOBAL @item delayed_insert_timeout @tab num @tab GLOBAL
@item delayed_queue_size @tab num @tab GLOBAL @item delayed_queue_size @tab num @tab GLOBAL
...@@ -28717,6 +28723,7 @@ Here is a description of some of the variables: ...@@ -28717,6 +28723,7 @@ Here is a description of some of the variables:
@item identity @tab Alias for last_insert_id (Sybase compatiblity) @item identity @tab Alias for last_insert_id (Sybase compatiblity)
@item sql_low_priority_updates @tab Alias for low_priority_updates @item sql_low_priority_updates @tab Alias for low_priority_updates
@item sql_max_join_size @tab Alias for max_join_size @item sql_max_join_size @tab Alias for max_join_size
@item delay_key_write_for_all_tables @tab If this and delay_key_write is set then all new MyISAM tables that are opened will use delayed key writes.
@item version @tab Alias for VERSION() (Sybase (?) compatability) @item version @tab Alias for VERSION() (Sybase (?) compatability)
@end multitable @end multitable
...@@ -37704,7 +37711,7 @@ The following options to @code{mysqld} can be used to change the behaviour of ...@@ -37704,7 +37711,7 @@ The following options to @code{mysqld} can be used to change the behaviour of
@item @strong{Option} @tab @strong{Description} @item @strong{Option} @tab @strong{Description}
@item @code{--myisam-recover=#} @tab Automatic recovery of crashed tables. @item @code{--myisam-recover=#} @tab Automatic recovery of crashed tables.
@item @code{-O myisam_sort_buffer_size=#} @tab Buffer used when recovering tables. @item @code{-O myisam_sort_buffer_size=#} @tab Buffer used when recovering tables.
@item @code{--delay-key-write-for-all-tables} @tab Don't flush key buffers between writes for any MyISAM table @item @code{--delay-key-write=ALL} @tab Don't flush key buffers between writes for any MyISAM table
@item @code{-O myisam_max_extra_sort_file_size=#} @tab Used to help MySQL to decide when to use the slow but safe key cache index create method. @strong{Note} that this parameter is given in megabytes before 4.0.3 and in bytes starting from this version. @item @code{-O myisam_max_extra_sort_file_size=#} @tab Used to help MySQL to decide when to use the slow but safe key cache index create method. @strong{Note} that this parameter is given in megabytes before 4.0.3 and in bytes starting from this version.
@item @code{-O myisam_max_sort_file_size=#} @tab Don't use the fast sort index method to created index if the temporary file would get bigger than this. @strong{Note} that this parameter is given in megabytes before 4.0.3 and in bytes starting from this version. @item @code{-O myisam_max_sort_file_size=#} @tab Don't use the fast sort index method to created index if the temporary file would get bigger than this. @strong{Note} that this parameter is given in megabytes before 4.0.3 and in bytes starting from this version.
@item @code{-O bulk_insert_buffer_size=#} @tab Size of tree cache used in bulk insert optimisation. @strong{Note} that this is a limit @strong{per thread}! @item @code{-O bulk_insert_buffer_size=#} @tab Size of tree cache used in bulk insert optimisation. @strong{Note} that this is a limit @strong{per thread}!
...@@ -50250,6 +50257,9 @@ each individual 4.0.x release. ...@@ -50250,6 +50257,9 @@ each individual 4.0.x release.
Added @code{QUOTE()} function that performs SQL quoting to produce values Added @code{QUOTE()} function that performs SQL quoting to produce values
that can be used as data values in queries. that can be used as data values in queries.
@item @item
Changed variable @code{DELAY_KEY_WRITE} to an enum to allow one set
@code{DELAY_KEY_WRITE} for all tables without taking down the server.
@item
Changed behavior of @code{IF(condition,column,NULL)} so that it returns Changed behavior of @code{IF(condition,column,NULL)} so that it returns
the value of the column type. the value of the column type.
@item @item
...@@ -50841,6 +50851,7 @@ users use this code as the rest of the code and because of this we are ...@@ -50841,6 +50851,7 @@ users use this code as the rest of the code and because of this we are
not yet 100% confident in this code. not yet 100% confident in this code.
@menu @menu
* News-3.23.53:: Changes in release 3.23.53
* News-3.23.52:: Changes in release 3.23.52 * News-3.23.52:: Changes in release 3.23.52
* News-3.23.51:: Changes in release 3.23.51 (31 May 2002) * News-3.23.51:: Changes in release 3.23.51 (31 May 2002)
* News-3.23.50:: Changes in release 3.23.50 (21 Apr 2002) * News-3.23.50:: Changes in release 3.23.50 (21 Apr 2002)
...@@ -50897,8 +50908,15 @@ not yet 100% confident in this code. ...@@ -50897,8 +50908,15 @@ not yet 100% confident in this code.
* News-3.23.0:: Changes in release 3.23.0 (05 Aug 1999: Alpha) * News-3.23.0:: Changes in release 3.23.0 (05 Aug 1999: Alpha)
@end menu @end menu
@node News-3.23.52, News-3.23.51, News-3.23.x, News-3.23.x @node News-3.23.53, News-3.23.52, News-3.23.x, News-3.23.x
@appendixsubsec Changes in release 3.23.53
@itemize @bullet
@end itemize
@node News-3.23.52, News-3.23.51, News-3.23.53, News-3.23.x
@appendixsubsec Changes in release 3.23.52 @appendixsubsec Changes in release 3.23.52
@itemize @bullet @itemize @bullet
@item @item
Fixed problem with @code{UNSIGNED BIGINT} on AIX. Fixed problem with @code{UNSIGNED BIGINT} on AIX.
...@@ -25,33 +25,37 @@ can wait inside InnoDB */ ...@@ -25,33 +25,37 @@ can wait inside InnoDB */
#ifdef __WIN__ #ifdef __WIN__
typedef void* os_thread_t; typedef void* os_thread_t;
typedef ulint os_thread_id_t; /* In Windows the thread id
is an unsigned long int */
#else #else
typedef pthread_t os_thread_t; typedef pthread_t os_thread_t;
typedef os_thread_t os_thread_id_t; /* In Unix we use the thread
handle itself as the id of
the thread */
#endif #endif
#define os_thread_id_t os_thread_t
/* Define a function pointer type to use in a typecast */ /* Define a function pointer type to use in a typecast */
typedef void* (*os_posix_f_t) (void*); typedef void* (*os_posix_f_t) (void*);
/******************************************************************* /*******************************************************************
Compares two threads or thread ids for equality */ Compares two thread ids for equality. */
ibool ibool
os_thread_eq( os_thread_eq(
/*=========*/ /*=========*/
/* out: TRUE if equal */ /* out: TRUE if equal */
os_thread_t a, /* in: OS thread or thread id */ os_thread_id_t a, /* in: OS thread or thread id */
os_thread_t b); /* in: OS thread or thread id */ os_thread_id_t b); /* in: OS thread or thread id */
/******************************************************************** /********************************************************************
Converts an OS thread or thread id to a ulint. It is NOT guaranteed that Converts an OS thread id to a ulint. It is NOT guaranteed that the ulint is
the ulint is unique for the thread though! */ unique for the thread though! */
ulint ulint
os_thread_pf( os_thread_pf(
/*=========*/ /*=========*/
/* out: unsigned long int */ /* out: unsigned long int */
os_thread_t a); /* in: thread or thread id */ os_thread_id_t a); /* in: thread or thread id */
/******************************************************************** /********************************************************************
Creates a new thread of execution. The execution starts from Creates a new thread of execution. The execution starts from
the function given. The start function takes a void* parameter the function given. The start function takes a void* parameter
...@@ -69,10 +73,8 @@ os_thread_create( ...@@ -69,10 +73,8 @@ os_thread_create(
#endif #endif
void* arg, /* in: argument to start void* arg, /* in: argument to start
function */ function */
os_thread_id_t* thread_id); /* out: id of created os_thread_id_t* thread_id); /* out: id of the created
thread; currently this is thread */
identical to the handle to
the thread */
/********************************************************************* /*********************************************************************
A thread calling this function ends its execution. */ A thread calling this function ends its execution. */
......
...@@ -19,14 +19,14 @@ Created 9/8/1995 Heikki Tuuri ...@@ -19,14 +19,14 @@ Created 9/8/1995 Heikki Tuuri
#include "srv0srv.h" #include "srv0srv.h"
/******************************************************************* /*******************************************************************
Compares two threads or thread ids for equality */ Compares two thread ids for equality. */
ibool ibool
os_thread_eq( os_thread_eq(
/*=========*/ /*=========*/
/* out: TRUE if equal */ /* out: TRUE if equal */
os_thread_t a, /* in: OS thread or thread id */ os_thread_id_t a, /* in: OS thread or thread id */
os_thread_t b) /* in: OS thread or thread id */ os_thread_id_t b) /* in: OS thread or thread id */
{ {
#ifdef __WIN__ #ifdef __WIN__
if (a == b) { if (a == b) {
...@@ -44,13 +44,13 @@ os_thread_eq( ...@@ -44,13 +44,13 @@ os_thread_eq(
} }
/******************************************************************** /********************************************************************
Converts an OS thread or thread id to a ulint. It is NOT guaranteed that Converts an OS thread id to a ulint. It is NOT guaranteed that the ulint is
the ulint is unique for the thread though! */ unique for the thread though! */
ulint ulint
os_thread_pf( os_thread_pf(
/*=========*/ /*=========*/
os_thread_t a) os_thread_id_t a)
{ {
#ifdef UNIV_HPUX #ifdef UNIV_HPUX
/* In HP-UX a pthread_t is a struct of 3 fields: field1, field2, /* In HP-UX a pthread_t is a struct of 3 fields: field1, field2,
...@@ -64,15 +64,15 @@ os_thread_pf( ...@@ -64,15 +64,15 @@ os_thread_pf(
/********************************************************************* /*********************************************************************
Returns the thread identifier of current thread. Currently the thread Returns the thread identifier of current thread. Currently the thread
identifier is the thread handle itself. Note that in HP-UX pthread_t is identifier in Unix is the thread handle itself. Note that in HP-UX
a struct of 3 fields. */ pthread_t is a struct of 3 fields. */
os_thread_id_t os_thread_id_t
os_thread_get_curr_id(void) os_thread_get_curr_id(void)
/*=======================*/ /*=======================*/
{ {
#ifdef __WIN__ #ifdef __WIN__
return(GetCurrentThread()); return(GetCurrentThreadId());
#else #else
return(pthread_self()); return(pthread_self());
#endif #endif
...@@ -95,11 +95,8 @@ os_thread_create( ...@@ -95,11 +95,8 @@ os_thread_create(
#endif #endif
void* arg, /* in: argument to start void* arg, /* in: argument to start
function */ function */
os_thread_id_t* thread_id __attribute__((unused))) os_thread_id_t* thread_id) /* out: id of the created
/* out: id of created thread */
thread; currently this is
identical to the handle to
the thread */
{ {
#ifdef __WIN__ #ifdef __WIN__
os_thread_t thread; os_thread_t thread;
...@@ -121,7 +118,7 @@ os_thread_create( ...@@ -121,7 +118,7 @@ os_thread_create(
ut_a(SetThreadPriority(thread, srv_query_thread_priority)); ut_a(SetThreadPriority(thread, srv_query_thread_priority));
} }
*thread_id = thread; *thread_id = win_thread_id;
return(thread); return(thread);
#else #else
......
...@@ -267,7 +267,7 @@ insert into t1 values (-.1),(+.1),(.1); ...@@ -267,7 +267,7 @@ insert into t1 values (-.1),(+.1),(.1);
insert into t1 values (00000000000001),(+0000000000001),(-0000000000001); insert into t1 values (00000000000001),(+0000000000001),(-0000000000001);
insert into t1 values (+111111111.11),(111111111.11),(-11111111.11); insert into t1 values (+111111111.11),(111111111.11),(-11111111.11);
insert into t1 values (-111111111.11),(+1111111111.11),(1111111111.11); insert into t1 values (-111111111.11),(+1111111111.11),(1111111111.11);
insert into t1 values (1e+1000),(1e-1000),(-1e+1000); insert into t1 values (1e+100),(1e-100),(-1e+100);
insert into t1 values (123.4e0),(123.4e+2),(123.4e-2),(123e1),(123e+0); insert into t1 values (123.4e0),(123.4e+2),(123.4e-2),(123e1),(123e+0);
select * from t1; select * from t1;
a a
......
...@@ -219,7 +219,21 @@ set convert_character_set=cp1251_koi8; ...@@ -219,7 +219,21 @@ set convert_character_set=cp1251_koi8;
set convert_character_set=default; set convert_character_set=default;
set @@global.concurrent_insert=1; set @@global.concurrent_insert=1;
set global connect_timeout=100; set global connect_timeout=100;
select @@delay_key_write;
@@delay_key_write
ON
set global delay_key_write="OFF";
select @@delay_key_write;
@@delay_key_write
OFF
set global delay_key_write=ALL;
select @@delay_key_write;
@@delay_key_write
ALL
set global delay_key_write=1; set global delay_key_write=1;
select @@delay_key_write;
@@delay_key_write
ON
set global delayed_insert_limit=100; set global delayed_insert_limit=100;
set global delayed_insert_timeout=100; set global delayed_insert_timeout=100;
set global delayed_queue_size=100; set global delayed_queue_size=100;
......
...@@ -195,7 +195,7 @@ insert into t1 values (-.1),(+.1),(.1); ...@@ -195,7 +195,7 @@ insert into t1 values (-.1),(+.1),(.1);
insert into t1 values (00000000000001),(+0000000000001),(-0000000000001); insert into t1 values (00000000000001),(+0000000000001),(-0000000000001);
insert into t1 values (+111111111.11),(111111111.11),(-11111111.11); insert into t1 values (+111111111.11),(111111111.11),(-11111111.11);
insert into t1 values (-111111111.11),(+1111111111.11),(1111111111.11); insert into t1 values (-111111111.11),(+1111111111.11),(1111111111.11);
insert into t1 values (1e+1000),(1e-1000),(-1e+1000); insert into t1 values (1e+100),(1e-100),(-1e+100);
insert into t1 values (123.4e0),(123.4e+2),(123.4e-2),(123e1),(123e+0); insert into t1 values (123.4e0),(123.4e+2),(123.4e-2),(123e1),(123e+0);
select * from t1; select * from t1;
drop table t1; drop table t1;
......
...@@ -143,7 +143,13 @@ set convert_character_set=cp1251_koi8; ...@@ -143,7 +143,13 @@ set convert_character_set=cp1251_koi8;
set convert_character_set=default; set convert_character_set=default;
set @@global.concurrent_insert=1; set @@global.concurrent_insert=1;
set global connect_timeout=100; set global connect_timeout=100;
select @@delay_key_write;
set global delay_key_write="OFF";
select @@delay_key_write;
set global delay_key_write=ALL;
select @@delay_key_write;
set global delay_key_write=1; set global delay_key_write=1;
select @@delay_key_write;
set global delayed_insert_limit=100; set global delayed_insert_limit=100;
set global delayed_insert_timeout=100; set global delayed_insert_timeout=100;
set global delayed_queue_size=100; set global delayed_queue_size=100;
......
...@@ -259,57 +259,66 @@ convert_error_code_to_mysql( ...@@ -259,57 +259,66 @@ convert_error_code_to_mysql(
extern "C" { extern "C" {
/***************************************************************** /*****************************************************************
Prints info of a THD object (== user session thread) to the Prints info of a THD object (== user session thread) to the
standard output. NOTE that mysql/innobase/trx/trx0trx.c must contain standard output. NOTE that /mysql/innobase/trx/trx0trx.c must contain
the prototype for this function! */ the prototype for this function! */
void void
innobase_mysql_print_thd( innobase_mysql_print_thd(
/*=====================*/ /*=====================*/
char* buf, /* in/out: buffer where to print, must be at least char* buf, /* in/out: buffer where to print, must be at least
300 bytes */ 400 bytes */
void* input_thd)/* in: pointer to a MySQL THD object */ void* input_thd)/* in: pointer to a MySQL THD object */
{ {
THD* thd; THD* thd;
char* old_buf = buf;
thd = (THD*) input_thd; thd = (THD*) input_thd;
/* We can't use value of sprintf() as this is not portable */ /* We cannot use the return value of normal sprintf() as this is
buf+= my_sprintf(buf, not portable to some old non-Posix Unixes, e.g., some old SCO
Unixes */
buf += my_sprintf(buf,
(buf, "MySQL thread id %lu, query id %lu", (buf, "MySQL thread id %lu, query id %lu",
thd->thread_id, thd->query_id)); thd->thread_id, thd->query_id));
if (thd->host) if (thd->host) {
{ *buf = ' ';
*buf++=' '; buf++;
buf=strnmov(buf, thd->host, 30); buf = strnmov(buf, thd->host, 30);
} }
if (thd->ip) if (thd->ip) {
{ *buf = ' ';
*buf++=' '; buf++;
buf=strnmov(buf, thd->ip, 20); buf=strnmov(buf, thd->ip, 20);
} }
if (thd->user) if (thd->user) {
{ *buf = ' ';
*buf++=' '; buf++;
buf=strnmov(buf, thd->user, 20); buf=strnmov(buf, thd->user, 20);
} }
if (thd->proc_info) if (thd->proc_info) {
{ *buf = ' ';
*buf++=' '; buf++;
buf=strnmov(buf, thd->proc_info, 50); buf=strnmov(buf, thd->proc_info, 50);
} }
if (thd->query) if (thd->query) {
{ *buf = '\n';
*buf++=' '; buf++;
buf=strnmov(buf, thd->query, 150); buf=strnmov(buf, thd->query, 150);
} }
buf[0]='\n';
buf[1]=0;
ut_a(strlen(buf) < 400); buf[0] = '\n';
buf[1] = '\0'; /* Note that we must put a null character here to end
the printed string */
/* We test the printed length did not overrun the buffer length of
400 bytes */
ut_a(strlen(old_buf) < 400);
} }
} }
...@@ -395,6 +404,9 @@ ha_innobase::update_thd( ...@@ -395,6 +404,9 @@ ha_innobase::update_thd(
return(0); return(0);
} }
#ifdef notdefined
/* The code here appears for documentational purposes only. Not used
or tested yet. Will be used in 4.1. */
/********************************************************************* /*********************************************************************
Call this when you have opened a new table handle in HANDLER, before you Call this when you have opened a new table handle in HANDLER, before you
call index_read_idx() etc. Actually, we can let the cursor stay open even call index_read_idx() etc. Actually, we can let the cursor stay open even
...@@ -402,14 +414,15 @@ over a transaction commit! Then you should call this before every operation, ...@@ -402,14 +414,15 @@ over a transaction commit! Then you should call this before every operation,
fecth next etc. This function inits the necessary things even after a fecth next etc. This function inits the necessary things even after a
transaction commit. */ transaction commit. */
/* TODO: THIS CODE HAS NOT BEEN TESTED!!! */
void void
ha_innobase::init_table_handle_for_HANDLER(void) ha_innobase::init_table_handle_for_HANDLER(void)
/*============================================*/ /*============================================*/
{ {
row_prebuilt_t* prebuilt; row_prebuilt_t* prebuilt;
ut_a(0); /* the code has not been used or tested yet; to prevent
inadvertent usage we assert an error here */
/* If current thd does not yet have a trx struct, create one. /* If current thd does not yet have a trx struct, create one.
If the current handle does not yet have a prebuilt struct, create If the current handle does not yet have a prebuilt struct, create
one. Update the trx pointers in the prebuilt struct. Normally one. Update the trx pointers in the prebuilt struct. Normally
...@@ -449,6 +462,7 @@ ha_innobase::init_table_handle_for_HANDLER(void) ...@@ -449,6 +462,7 @@ ha_innobase::init_table_handle_for_HANDLER(void)
prebuilt->read_just_key = FALSE; prebuilt->read_just_key = FALSE;
} }
#endif
/************************************************************************* /*************************************************************************
Opens an InnoDB database. */ Opens an InnoDB database. */
...@@ -2500,6 +2514,7 @@ ha_innobase::rnd_pos( ...@@ -2500,6 +2514,7 @@ ha_innobase::rnd_pos(
Stores a reference to the current row to 'ref' field of the handle. Note Stores a reference to the current row to 'ref' field of the handle. Note
that in the case where we have generated the clustered index for the that in the case where we have generated the clustered index for the
table, the function parameter is illogical: we MUST ASSUME that 'record' table, the function parameter is illogical: we MUST ASSUME that 'record'
is the current 'position' of the handle, because if row ref is actually
the row id internally generated in InnoDB, then 'record' does not contain the row id internally generated in InnoDB, then 'record' does not contain
it. We just guess that the row id must be for the record where the handle it. We just guess that the row id must be for the record where the handle
was positioned the last time. */ was positioned the last time. */
......
...@@ -164,7 +164,8 @@ class ha_innobase: public handler ...@@ -164,7 +164,8 @@ class ha_innobase: public handler
void free_foreign_key_create_info(char* str); void free_foreign_key_create_info(char* str);
THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to, THR_LOCK_DATA **store_lock(THD *thd, THR_LOCK_DATA **to,
enum thr_lock_type lock_type); enum thr_lock_type lock_type);
void init_table_handle_for_HANDLER(); /* TODO: NOT TESTED!!! */ /* void init_table_handle_for_HANDLER(); Not tested or used yet, code
included for documentational purposes only */
longlong get_auto_increment(); longlong get_auto_increment();
}; };
......
...@@ -635,6 +635,7 @@ extern ulong specialflag, current_pid; ...@@ -635,6 +635,7 @@ extern ulong specialflag, current_pid;
extern uint test_flags,select_errors,ha_open_options; extern uint test_flags,select_errors,ha_open_options;
extern uint protocol_version,dropping_tables; extern uint protocol_version,dropping_tables;
extern uint delay_key_write_options;
extern bool opt_endinfo, using_udf_functions, locked_in_memory; extern bool opt_endinfo, using_udf_functions, locked_in_memory;
extern bool opt_using_transactions, use_temp_pool, mysql_embedded; extern bool opt_using_transactions, use_temp_pool, mysql_embedded;
extern bool using_update_log, opt_large_files; extern bool using_update_log, opt_large_files;
......
...@@ -47,6 +47,12 @@ ...@@ -47,6 +47,12 @@
#define SIGNAL_THD #define SIGNAL_THD
#endif #endif
#ifdef PURIFY
#define IF_PURIFY(A,B) (A)
#else
#define IF_PURIFY(A,B) (B)
#endif
/* stack traces are only supported on linux intel */ /* stack traces are only supported on linux intel */
#if defined(__linux__) && defined(__i386__) && defined(USE_PSTACK) #if defined(__linux__) && defined(__i386__) && defined(USE_PSTACK)
#define HAVE_STACK_TRACE_ON_SEGV #define HAVE_STACK_TRACE_ON_SEGV
...@@ -259,6 +265,7 @@ bool opt_log, opt_update_log, opt_bin_log, opt_slow_log; ...@@ -259,6 +265,7 @@ bool opt_log, opt_update_log, opt_bin_log, opt_slow_log;
bool opt_disable_networking=0, opt_skip_show_db=0; bool opt_disable_networking=0, opt_skip_show_db=0;
bool opt_enable_named_pipe= 0; bool opt_enable_named_pipe= 0;
my_bool opt_local_infile, opt_external_locking, opt_slave_compressed_protocol; my_bool opt_local_infile, opt_external_locking, opt_slave_compressed_protocol;
uint delay_key_write_options= (uint) DELAY_KEY_WRITE_ON;
static bool opt_do_pstack = 0; static bool opt_do_pstack = 0;
static ulong opt_specialflag=SPECIAL_ENGLISH; static ulong opt_specialflag=SPECIAL_ENGLISH;
...@@ -2816,8 +2823,8 @@ enum options { ...@@ -2816,8 +2823,8 @@ enum options {
OPT_FLUSH, OPT_SAFE, OPT_FLUSH, OPT_SAFE,
OPT_BOOTSTRAP, OPT_SKIP_SHOW_DB, OPT_BOOTSTRAP, OPT_SKIP_SHOW_DB,
OPT_TABLE_TYPE, OPT_INIT_FILE, OPT_TABLE_TYPE, OPT_INIT_FILE,
OPT_DELAY_KEY_WRITE, OPT_SLOW_QUERY_LOG, OPT_DELAY_KEY_WRITE_ALL, OPT_SLOW_QUERY_LOG,
OPT_USE_DELAY_KEY_WRITE, OPT_CHARSETS_DIR, OPT_DELAY_KEY_WRITE, OPT_CHARSETS_DIR,
OPT_BDB_HOME, OPT_BDB_LOG, OPT_BDB_HOME, OPT_BDB_LOG,
OPT_BDB_TMP, OPT_BDB_NOSYNC, OPT_BDB_TMP, OPT_BDB_NOSYNC,
OPT_BDB_LOCK, OPT_BDB_SKIP, OPT_BDB_LOCK, OPT_BDB_SKIP,
...@@ -2994,9 +3001,11 @@ struct my_option my_long_options[] = ...@@ -2994,9 +3001,11 @@ struct my_option my_long_options[] =
{"default-table-type", OPT_TABLE_TYPE, {"default-table-type", OPT_TABLE_TYPE,
"Set the default table type for tables", 0, 0, "Set the default table type for tables", 0, 0,
0, GET_NO_ARG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_NO_ARG, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
{"delay-key-write-for-all-tables", OPT_DELAY_KEY_WRITE, {"delay-key-write", OPT_DELAY_KEY_WRITE, "Type of DELAY_KEY_WRITE",
"Don't flush key buffers between writes for any MyISAM table", 0, 0, 0, 0,0,0, GET_STR, OPT_ARG, 0, 0, 0, 0, 0, 0},
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, {"delay-key-write-for-all-tables", OPT_DELAY_KEY_WRITE_ALL,
"Don't flush key buffers between writes for any MyISAM table (Depricated option, use --delay-key-write=all instead)",
0, 0, 0, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
{"enable-locking", OPT_ENABLE_LOCK, {"enable-locking", OPT_ENABLE_LOCK,
"Depricated option, use --external-locking instead", "Depricated option, use --external-locking instead",
(gptr*) &opt_external_locking, (gptr*) &opt_external_locking, (gptr*) &opt_external_locking, (gptr*) &opt_external_locking,
...@@ -3260,10 +3269,6 @@ struct my_option my_long_options[] = ...@@ -3260,10 +3269,6 @@ struct my_option my_long_options[] =
"Use concurrent insert with MyISAM. Disable with prefix --skip-", "Use concurrent insert with MyISAM. Disable with prefix --skip-",
(gptr*) &myisam_concurrent_insert, (gptr*) &myisam_concurrent_insert, (gptr*) &myisam_concurrent_insert, (gptr*) &myisam_concurrent_insert,
0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0}, 0, GET_BOOL, NO_ARG, 1, 0, 0, 0, 0, 0},
{"delay-key-write", OPT_USE_DELAY_KEY_WRITE,
"Use delay_key_write option for all tables. Disable with prefix --skip-",
(gptr*) &myisam_delay_key_write, (gptr*) &myisam_delay_key_write, 0,
GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
{"skip-grant-tables", OPT_SKIP_GRANT, {"skip-grant-tables", OPT_SKIP_GRANT,
"Start without grant tables. This gives all users FULL ACCESS to all tables!", "Start without grant tables. This gives all users FULL ACCESS to all tables!",
(gptr*) &opt_noacl, (gptr*) &opt_noacl, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, (gptr*) &opt_noacl, (gptr*) &opt_noacl, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0,
...@@ -3335,8 +3340,8 @@ struct my_option my_long_options[] = ...@@ -3335,8 +3340,8 @@ struct my_option my_long_options[] =
0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0}, 0, GET_BOOL, NO_ARG, 0, 0, 0, 0, 0, 0},
#ifdef USE_SYMDIR #ifdef USE_SYMDIR
{"use-symbolic-links", 's', "Enable symbolic link support", {"use-symbolic-links", 's', "Enable symbolic link support",
(gptr*) &my_use_symdir, (gptr*) &my_use_symdir, 0, GET_BOOL, NO_ARG, 0, 0, (gptr*) &my_use_symdir, (gptr*) &my_use_symdir, 0, GET_BOOL, NO_ARG,
0, 0, 0, 0}, USE_PURIFY(0,1), 0, 0, 0, 0, 0},
#endif #endif
{"user", 'u', "Run mysqld daemon as user", (gptr*) &mysqld_user, {"user", 'u', "Run mysqld daemon as user", (gptr*) &mysqld_user,
(gptr*) &mysqld_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, (gptr*) &mysqld_user, 0, GET_STR, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
...@@ -3382,7 +3387,7 @@ struct my_option my_long_options[] = ...@@ -3382,7 +3387,7 @@ struct my_option my_long_options[] =
(gptr*) &connect_timeout, (gptr*) &connect_timeout, (gptr*) &connect_timeout, (gptr*) &connect_timeout,
0, GET_ULONG, REQUIRED_ARG, CONNECT_TIMEOUT, 2, LONG_TIMEOUT, 0, 1, 0 }, 0, GET_ULONG, REQUIRED_ARG, CONNECT_TIMEOUT, 2, LONG_TIMEOUT, 0, 1, 0 },
{"delayed_insert_timeout", OPT_DELAYED_INSERT_TIMEOUT, {"delayed_insert_timeout", OPT_DELAYED_INSERT_TIMEOUT,
"How long a INSERT DELAYED thread should wait for INSERT statements before terminating.", "Ho wlong a INSERT DELAYED thread should wait for INSERT statements before terminating.",
(gptr*) &delayed_insert_timeout, (gptr*) &delayed_insert_timeout, 0, (gptr*) &delayed_insert_timeout, (gptr*) &delayed_insert_timeout, 0,
GET_ULONG, REQUIRED_ARG, DELAYED_WAIT_TIMEOUT, 1, LONG_TIMEOUT, 0, 1, 0}, GET_ULONG, REQUIRED_ARG, DELAYED_WAIT_TIMEOUT, 1, LONG_TIMEOUT, 0, 1, 0},
{"delayed_insert_limit", OPT_DELAYED_INSERT_LIMIT, {"delayed_insert_limit", OPT_DELAYED_INSERT_LIMIT,
...@@ -4119,22 +4124,22 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -4119,22 +4124,22 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
break; break;
case (int) OPT_SKIP_NEW: case (int) OPT_SKIP_NEW:
opt_specialflag|= SPECIAL_NO_NEW_FUNC; opt_specialflag|= SPECIAL_NO_NEW_FUNC;
myisam_delay_key_write=0; delay_key_write_options= (uint) DELAY_KEY_WRITE_NONE;
myisam_concurrent_insert=0; myisam_concurrent_insert=0;
myisam_recover_options= HA_RECOVER_NONE; myisam_recover_options= HA_RECOVER_NONE;
my_disable_symlinks=1; my_disable_symlinks=1;
my_use_symdir=0; my_use_symdir=0;
have_symlink=SHOW_OPTION_DISABLED; have_symlink=SHOW_OPTION_DISABLED;
ha_open_options&= ~HA_OPEN_ABORT_IF_CRASHED; ha_open_options&= ~(HA_OPEN_ABORT_IF_CRASHED | HA_OPEN_DELAY_KEY_WRITE);
#ifdef HAVE_QUERY_CACHE #ifdef HAVE_QUERY_CACHE
query_cache_size=0; query_cache_size=0;
#endif #endif
break; break;
case (int) OPT_SAFE: case (int) OPT_SAFE:
opt_specialflag|= SPECIAL_SAFE_MODE; opt_specialflag|= SPECIAL_SAFE_MODE;
myisam_delay_key_write=0; delay_key_write_options= (uint) DELAY_KEY_WRITE_NONE;
myisam_recover_options= HA_RECOVER_NONE; // To be changed myisam_recover_options= HA_RECOVER_NONE; // To be changed
ha_open_options&= ~HA_OPEN_ABORT_IF_CRASHED; ha_open_options&= ~(HA_OPEN_ABORT_IF_CRASHED | HA_OPEN_DELAY_KEY_WRITE);
break; break;
case (int) OPT_SKIP_PRIOR: case (int) OPT_SKIP_PRIOR:
opt_specialflag|= SPECIAL_NO_PRIOR; opt_specialflag|= SPECIAL_NO_PRIOR;
...@@ -4239,9 +4244,25 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)), ...@@ -4239,9 +4244,25 @@ get_one_option(int optid, const struct my_option *opt __attribute__((unused)),
case OPT_SERVER_ID: case OPT_SERVER_ID:
server_id_supplied = 1; server_id_supplied = 1;
break; break;
case OPT_DELAY_KEY_WRITE_ALL:
if (argument != disabled_my_option)
argument= (char*) "ALL";
/* Fall through */
case OPT_DELAY_KEY_WRITE: case OPT_DELAY_KEY_WRITE:
ha_open_options|=HA_OPEN_DELAY_KEY_WRITE; if (argument == disabled_my_option)
myisam_delay_key_write=1; delay_key_write_options= (uint) DELAY_KEY_WRITE_NONE;
else if (! argument)
delay_key_write_options= (uint) DELAY_KEY_WRITE_ON;
else
{
int type;
if ((type=find_type(argument, &delay_key_write_typelib, 2)) <= 0)
{
fprintf(stderr,"Unknown delay_key_write type: %s\n",argument);
exit(1);
}
delay_key_write_options= (uint) type-1;
}
break; break;
case OPT_CHARSETS_DIR: case OPT_CHARSETS_DIR:
strmake(mysql_charsets_dir, argument, sizeof(mysql_charsets_dir)-1); strmake(mysql_charsets_dir, argument, sizeof(mysql_charsets_dir)-1);
...@@ -4364,18 +4385,22 @@ static void get_options(int argc,char **argv) ...@@ -4364,18 +4385,22 @@ static void get_options(int argc,char **argv)
{ {
int ho_error; int ho_error;
myisam_delay_key_write=1; // Allow use of this if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option)))
#ifndef HAVE_purify exit(ho_error);
my_use_symdir=1; // Use internal symbolic links
#ifdef HAVE_BROKEN_REALPATH
my_use_symdir=0;
my_disable_symlinks=1;
have_symlink=SHOW_OPTION_NO;
#else #else
/* Symlinks gives too many warnings with purify */ if (!my_use_symdir)
{
my_disable_symlinks=1; my_disable_symlinks=1;
my_use_symdir=0;
have_symlink=SHOW_OPTION_DISABLED; have_symlink=SHOW_OPTION_DISABLED;
}
#endif #endif
/* Set global MyISAM variables from delay_key_write_options */
if ((ho_error=handle_options(&argc, &argv, my_long_options, get_one_option))) fix_delay_key_write((THD*) 0, OPT_GLOBAL);
exit(ho_error);
if (mysqld_chroot) if (mysqld_chroot)
set_root(mysqld_chroot); set_root(mysqld_chroot);
......
...@@ -62,6 +62,12 @@ TYPELIB bool_typelib= ...@@ -62,6 +62,12 @@ TYPELIB bool_typelib=
array_elements(bool_type_names)-1, "", bool_type_names array_elements(bool_type_names)-1, "", bool_type_names
}; };
const char *delay_key_write_type_names[]= { "OFF", "ON", "ALL", NullS };
TYPELIB delay_key_write_typelib=
{
array_elements(delay_key_write_type_names)-1, "", delay_key_write_type_names
};
static bool sys_check_charset(THD *thd, set_var *var); static bool sys_check_charset(THD *thd, set_var *var);
static bool sys_update_charset(THD *thd, set_var *var); static bool sys_update_charset(THD *thd, set_var *var);
static void sys_set_default_charset(THD *thd, enum_var_type type); static void sys_set_default_charset(THD *thd, enum_var_type type);
...@@ -97,8 +103,10 @@ sys_var_bool_ptr sys_concurrent_insert("concurrent_insert", ...@@ -97,8 +103,10 @@ sys_var_bool_ptr sys_concurrent_insert("concurrent_insert",
&myisam_concurrent_insert); &myisam_concurrent_insert);
sys_var_long_ptr sys_connect_timeout("connect_timeout", sys_var_long_ptr sys_connect_timeout("connect_timeout",
&connect_timeout); &connect_timeout);
sys_var_bool_ptr sys_delay_key_write("delay_key_write", sys_var_enum sys_delay_key_write("delay_key_write",
&myisam_delay_key_write); &delay_key_write_options,
&delay_key_write_typelib,
fix_delay_key_write);
sys_var_long_ptr sys_delayed_insert_limit("delayed_insert_limit", sys_var_long_ptr sys_delayed_insert_limit("delayed_insert_limit",
&delayed_insert_limit); &delayed_insert_limit);
sys_var_long_ptr sys_delayed_insert_timeout("delayed_insert_timeout", sys_var_long_ptr sys_delayed_insert_timeout("delayed_insert_timeout",
...@@ -625,6 +633,23 @@ static void fix_key_buffer_size(THD *thd, enum_var_type type) ...@@ -625,6 +633,23 @@ static void fix_key_buffer_size(THD *thd, enum_var_type type)
} }
void fix_delay_key_write(THD *thd, enum_var_type type)
{
switch ((enum_delay_key_write) delay_key_write_options) {
case DELAY_KEY_WRITE_NONE:
myisam_delay_key_write=0;
break;
case DELAY_KEY_WRITE_ON:
myisam_delay_key_write=1;
break;
case DELAY_KEY_WRITE_ALL:
myisam_delay_key_write=1;
ha_open_options|= HA_OPEN_DELAY_KEY_WRITE;
break;
}
}
bool sys_var_long_ptr::update(THD *thd, set_var *var) bool sys_var_long_ptr::update(THD *thd, set_var *var)
{ {
ulonglong tmp= var->value->val_int(); ulonglong tmp= var->value->val_int();
...@@ -655,6 +680,19 @@ void sys_var_bool_ptr::set_default(THD *thd, enum_var_type type) ...@@ -655,6 +680,19 @@ void sys_var_bool_ptr::set_default(THD *thd, enum_var_type type)
} }
bool sys_var_enum::update(THD *thd, set_var *var)
{
*value= (uint) var->save_result.ulong_value;
return 0;
}
byte *sys_var_enum::value_ptr(THD *thd, enum_var_type type)
{
return (byte*) enum_names->type_names[*value];
}
bool sys_var_thd_ulong::update(THD *thd, set_var *var) bool sys_var_thd_ulong::update(THD *thd, set_var *var)
{ {
ulonglong tmp= var->value->val_int(); ulonglong tmp= var->value->val_int();
......
...@@ -28,7 +28,7 @@ ...@@ -28,7 +28,7 @@
class sys_var; class sys_var;
class set_var; class set_var;
typedef struct system_variables SV; typedef struct system_variables SV;
extern TYPELIB bool_typelib; extern TYPELIB bool_typelib, delay_key_write_typelib;
enum enum_var_type enum enum_var_type
{ {
...@@ -140,6 +140,26 @@ public: ...@@ -140,6 +140,26 @@ public:
}; };
class sys_var_enum :public sys_var
{
uint *value;
TYPELIB *enum_names;
public:
sys_var_enum(const char *name_arg, uint *value_arg,
TYPELIB *typelib, sys_after_update_func func)
:sys_var(name_arg,func), value(value_arg), enum_names(typelib)
{}
bool check(THD *thd, set_var *var)
{
return check_enum(thd, var, enum_names);
}
bool update(THD *thd, set_var *var);
SHOW_TYPE type() { return SHOW_CHAR; }
byte *value_ptr(THD *thd, enum_var_type type);
bool check_update_type(Item_result type) { return 0; }
};
class sys_var_thd :public sys_var class sys_var_thd :public sys_var
{ {
public: public:
...@@ -415,5 +435,6 @@ void set_var_init(); ...@@ -415,5 +435,6 @@ void set_var_init();
void set_var_free(); void set_var_free();
sys_var *find_sys_var(const char *str, uint length=0); sys_var *find_sys_var(const char *str, uint length=0);
bool sql_set_variables(THD *thd, List<set_var_base> *var_list); bool sql_set_variables(THD *thd, List<set_var_base> *var_list);
void fix_delay_key_write(THD *thd, enum_var_type type);
extern sys_var_str sys_charset; extern sys_var_str sys_charset;
...@@ -31,6 +31,8 @@ enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE }; ...@@ -31,6 +31,8 @@ enum enum_enable_or_disable { LEAVE_AS_IS, ENABLE, DISABLE };
enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY }; enum enum_ha_read_modes { RFIRST, RNEXT, RPREV, RLAST, RKEY };
enum enum_duplicates { DUP_ERROR, DUP_REPLACE, DUP_IGNORE }; enum enum_duplicates { DUP_ERROR, DUP_REPLACE, DUP_IGNORE };
enum enum_log_type { LOG_CLOSED, LOG_NORMAL, LOG_NEW, LOG_BIN }; enum enum_log_type { LOG_CLOSED, LOG_NORMAL, LOG_NEW, LOG_BIN };
enum enum_delay_key_write { DELAY_KEY_WRITE_NONE, DELAY_KEY_WRITE_ON,
DELAY_KEY_WRITE_ALL };
// log info errors // log info errors
#define LOG_INFO_EOF -1 #define LOG_INFO_EOF -1
......
...@@ -3346,6 +3346,7 @@ set_expr_or_default: ...@@ -3346,6 +3346,7 @@ set_expr_or_default:
expr { $$=$1; } expr { $$=$1; }
| DEFAULT { $$=0; } | DEFAULT { $$=0; }
| ON { $$=new Item_string("ON",2); } | ON { $$=new Item_string("ON",2); }
| ALL { $$=new Item_string("ALL",3); }
; ;
......
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