Commit 6cd218cc authored by guilhem@mysql.com's avatar guilhem@mysql.com

WL#1596 "make mysqldump --master-data --single-transaction able to do online...

WL#1596 "make mysqldump --master-data --single-transaction able to do online dump of InnoDB AND report reliable
binlog coordinates corresponding to the dump".
The good news is that now mysqldump can be used to get an online backup of InnoDB *which works for
point-in-time recovery and replication slave creation*. Formerly, mysqldump --master-data --single-transaction
used to call in fact mysqldump --master-data, so the dump was not an online dump (took big lock all time of dump).
The only lock which is now taken in this patch is at the beginning of the dump: mysqldump does:
FLUSH TABLES WITH READ LOCK; START TRANSACTION WITH CONSISTENT SNAPSHOT; SHOW MASTER STATUS; UNLOCK TABLES;
so the lock time is in fact the time FLUSH TABLES WITH READ LOCK takes to return (can be 0 or very long, if
a table is undergoing a huge update).
I have done some more minor changes listed in the paragraph of mysqldump.c.
WL#2237 "WITH CONSISTENT SNAPSHOT clause for START TRANSACTION":
it's a START TRANSACTION which additionally starts a consistent read on all
capable storage engine (i.e. InnoDB). So, can serve as a replacement for
BEGIN; SELECT * FROM some_innodb_table LIMIT 1; which starts a consistent read too. 
parent 0517e7b2
This diff is collapsed.
...@@ -319,4 +319,5 @@ ...@@ -319,4 +319,5 @@
#define ER_INVALID_CHARACTER_STRING 1300 #define ER_INVALID_CHARACTER_STRING 1300
#define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1301 #define ER_WARN_ALLOWED_PACKET_OVERFLOWED 1301
#define ER_CONFLICTING_DECLARATIONS 1302 #define ER_CONFLICTING_DECLARATIONS 1302
#define ER_ERROR_MESSAGES 303 #define ER_NO_CONS_READ_ENGINE 1303
#define ER_ERROR_MESSAGES 304
drop table if exists t1;
create table t1 (a int) engine=innodb;
start transaction with consistent snapshot;
insert into t1 values(1);
select * from t1;
a
commit;
delete from t1;
start transaction;
insert into t1 values(1);
select * from t1;
a
1
commit;
drop table t1;
-- source include/have_innodb.inc
--disable_warnings
drop table if exists t1;
--enable_warnings
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
### Test 1:
### - While a consistent snapshot transaction is executed,
### no external inserts should be visible to the transaction.
connection con1;
create table t1 (a int) engine=innodb;
start transaction with consistent snapshot;
connection con2;
insert into t1 values(1);
connection con1;
select * from t1; # if consistent snapshot was set as expected, we
# should see nothing.
commit;
### Test 2:
### - For any non-consistent snapshot transaction, external
### committed inserts should be visible to the transaction.
delete from t1;
start transaction; # Now we omit WITH CONSISTENT SNAPSHOT
connection con2;
insert into t1 values(1);
connection con1;
select * from t1; # if consistent snapshot was not set, as expected, we
# should see 1.
commit;
drop table t1;
...@@ -771,6 +771,24 @@ int ha_savepoint(THD *thd, char *savepoint_name) ...@@ -771,6 +771,24 @@ int ha_savepoint(THD *thd, char *savepoint_name)
DBUG_RETURN(error); DBUG_RETURN(error);
} }
int ha_start_consistent_snapshot(THD *thd)
{
#ifdef HAVE_INNOBASE_DB
if ((have_innodb == SHOW_OPTION_YES) &&
!innobase_start_trx_and_assign_read_view(thd))
return 0;
#endif
/*
Same idea as when one wants to CREATE TABLE in one engine which does not
exist:
*/
push_warning(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_NO_CONS_READ_ENGINE, ER(ER_NO_CONS_READ_ENGINE));
return 0;
}
bool ha_flush_logs() bool ha_flush_logs()
{ {
bool result=0; bool result=0;
......
...@@ -138,6 +138,8 @@ ...@@ -138,6 +138,8 @@
#define HA_CACHE_TBL_ASKTRANSACT 2 #define HA_CACHE_TBL_ASKTRANSACT 2
#define HA_CACHE_TBL_TRANSACT 4 #define HA_CACHE_TBL_TRANSACT 4
/* Options of START TRANSACTION statement (and later of SET TRANSACTION stmt) */
#define MYSQL_START_TRANS_OPT_WITH_CONS_SNAPSHOT 1
enum db_type enum db_type
{ {
...@@ -567,5 +569,4 @@ int ha_discover(THD* thd, const char* dbname, const char* name, ...@@ -567,5 +569,4 @@ int ha_discover(THD* thd, const char* dbname, const char* name,
int ha_find_files(THD *thd,const char *db,const char *path, int ha_find_files(THD *thd,const char *db,const char *path,
const char *wild, bool dir,List<char>* files); const char *wild, bool dir,List<char>* files);
int ha_table_exists(THD* thd, const char* db, const char* name); int ha_table_exists(THD* thd, const char* db, const char* name);
int ha_start_consistent_snapshot(THD *thd);
...@@ -114,6 +114,7 @@ static SYMBOL symbols[] = { ...@@ -114,6 +114,7 @@ static SYMBOL symbols[] = {
{ "COMMITTED", SYM(COMMITTED_SYM)}, { "COMMITTED", SYM(COMMITTED_SYM)},
{ "COMPRESSED", SYM(COMPRESSED_SYM)}, { "COMPRESSED", SYM(COMPRESSED_SYM)},
{ "CONCURRENT", SYM(CONCURRENT)}, { "CONCURRENT", SYM(CONCURRENT)},
{ "CONSISTENT", SYM(CONSISTENT_SYM)},
{ "CONSTRAINT", SYM(CONSTRAINT)}, { "CONSTRAINT", SYM(CONSTRAINT)},
{ "CONVERT", SYM(CONVERT_SYM)}, { "CONVERT", SYM(CONVERT_SYM)},
{ "CREATE", SYM(CREATE)}, { "CREATE", SYM(CREATE)},
...@@ -382,6 +383,7 @@ static SYMBOL symbols[] = { ...@@ -382,6 +383,7 @@ static SYMBOL symbols[] = {
{ "SIGNED", SYM(SIGNED_SYM)}, { "SIGNED", SYM(SIGNED_SYM)},
{ "SIMPLE", SYM(SIMPLE_SYM)}, { "SIMPLE", SYM(SIMPLE_SYM)},
{ "SLAVE", SYM(SLAVE)}, { "SLAVE", SYM(SLAVE)},
{ "SNAPSHOT", SYM(SNAPSHOT_SYM)},
{ "SMALLINT", SYM(SMALLINT)}, { "SMALLINT", SYM(SMALLINT)},
{ "SOME", SYM(ANY_SYM)}, { "SOME", SYM(ANY_SYM)},
{ "SONAME", SYM(UDF_SONAME_SYM)}, { "SONAME", SYM(UDF_SONAME_SYM)},
......
...@@ -331,3 +331,4 @@ character-set=latin2 ...@@ -331,3 +331,4 @@ character-set=latin2
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -322,3 +322,4 @@ character-set=latin1 ...@@ -322,3 +322,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -331,3 +331,4 @@ character-set=latin1 ...@@ -331,3 +331,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -319,3 +319,4 @@ character-set=latin1 ...@@ -319,3 +319,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -324,3 +324,4 @@ character-set=latin7 ...@@ -324,3 +324,4 @@ character-set=latin7
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -319,3 +319,4 @@ character-set=latin1 ...@@ -319,3 +319,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -332,3 +332,4 @@ character-set=latin1 ...@@ -332,3 +332,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -319,3 +319,4 @@ character-set=greek ...@@ -319,3 +319,4 @@ character-set=greek
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -324,3 +324,4 @@ character-set=latin2 ...@@ -324,3 +324,4 @@ character-set=latin2
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -319,3 +319,4 @@ character-set=latin1 ...@@ -319,3 +319,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -323,3 +323,4 @@ character-set=ujis ...@@ -323,3 +323,4 @@ character-set=ujis
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -319,3 +319,4 @@ character-set=euckr ...@@ -319,3 +319,4 @@ character-set=euckr
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -321,3 +321,4 @@ character-set=latin1 ...@@ -321,3 +321,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -321,3 +321,4 @@ character-set=latin1 ...@@ -321,3 +321,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -324,3 +324,4 @@ character-set=latin2 ...@@ -324,3 +324,4 @@ character-set=latin2
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -321,3 +321,4 @@ character-set=latin1 ...@@ -321,3 +321,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -324,3 +324,4 @@ character-set=latin2 ...@@ -324,3 +324,4 @@ character-set=latin2
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -324,3 +324,4 @@ character-set=koi8r ...@@ -324,3 +324,4 @@ character-set=koi8r
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -312,3 +312,4 @@ character-set=cp1250 ...@@ -312,3 +312,4 @@ character-set=cp1250
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -327,3 +327,4 @@ character-set=latin2 ...@@ -327,3 +327,4 @@ character-set=latin2
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -323,3 +323,4 @@ character-set=latin1 ...@@ -323,3 +323,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -319,3 +319,4 @@ character-set=latin1 ...@@ -319,3 +319,4 @@ character-set=latin1
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -325,3 +325,4 @@ character-set=koi8u ...@@ -325,3 +325,4 @@ character-set=koi8u
"Invalid %s character string: '%.64s'", "Invalid %s character string: '%.64s'",
"Result of %s() was larger than max_allowed_packet (%ld) - truncated" "Result of %s() was larger than max_allowed_packet (%ld) - truncated"
"Conflicting declarations: '%s%s' and '%s%s'" "Conflicting declarations: '%s%s' and '%s%s'"
"This MySQL server does not support any consistent-read capable storage engine"
...@@ -613,7 +613,7 @@ typedef struct st_lex ...@@ -613,7 +613,7 @@ typedef struct st_lex
uint uint_geom_type; uint uint_geom_type;
uint grant, grant_tot_col, which_columns; uint grant, grant_tot_col, which_columns;
uint fk_delete_opt, fk_update_opt, fk_match_option; uint fk_delete_opt, fk_update_opt, fk_match_option;
uint slave_thd_opt; uint slave_thd_opt, start_transaction_opt;
uint8 describe; uint8 describe;
bool drop_if_exists, drop_temporary, local_file, one_shot_set; bool drop_if_exists, drop_temporary, local_file, one_shot_set;
bool in_comment, ignore_space, verbose, no_write_to_binlog; bool in_comment, ignore_space, verbose, no_write_to_binlog;
......
...@@ -3076,6 +3076,12 @@ purposes internal to the MySQL server", MYF(0)); ...@@ -3076,6 +3076,12 @@ purposes internal to the MySQL server", MYF(0));
} }
case SQLCOM_UNLOCK_TABLES: case SQLCOM_UNLOCK_TABLES:
/*
It is critical for mysqldump --single-transaction --master-data that
UNLOCK TABLES does not implicitely commit a connection which has only
done FLUSH TABLES WITH READ LOCK + BEGIN. If this assumption becomes
false, mysqldump will not work.
*/
unlock_locked_tables(thd); unlock_locked_tables(thd);
if (thd->options & OPTION_TABLE_LOCK) if (thd->options & OPTION_TABLE_LOCK)
{ {
...@@ -3462,6 +3468,8 @@ purposes internal to the MySQL server", MYF(0)); ...@@ -3462,6 +3468,8 @@ purposes internal to the MySQL server", MYF(0));
thd->options= ((thd->options & (ulong) ~(OPTION_STATUS_NO_TRANS_UPDATE)) | thd->options= ((thd->options & (ulong) ~(OPTION_STATUS_NO_TRANS_UPDATE)) |
OPTION_BEGIN); OPTION_BEGIN);
thd->server_status|= SERVER_STATUS_IN_TRANS; thd->server_status|= SERVER_STATUS_IN_TRANS;
if (!(lex->start_transaction_opt & MYSQL_START_TRANS_OPT_WITH_CONS_SNAPSHOT) ||
!(res= ha_start_consistent_snapshot(thd)))
send_ok(thd); send_ok(thd);
} }
break; break;
......
...@@ -131,6 +131,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -131,6 +131,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token CLIENT_SYM %token CLIENT_SYM
%token COMMENT_SYM %token COMMENT_SYM
%token COMMIT_SYM %token COMMIT_SYM
%token CONSISTENT_SYM
%token COUNT_SYM %token COUNT_SYM
%token CREATE %token CREATE
%token CROSS %token CROSS
...@@ -165,6 +166,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -165,6 +166,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
%token SELECT_SYM %token SELECT_SYM
%token SHOW %token SHOW
%token SLAVE %token SLAVE
%token SNAPSHOT_SYM
%token SQL_THREAD %token SQL_THREAD
%token START_SYM %token START_SYM
%token STD_SYM %token STD_SYM
...@@ -618,6 +620,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize); ...@@ -618,6 +620,7 @@ bool my_yyoverflow(short **a, YYSTYPE **b, ulong *yystacksize);
table_option opt_if_not_exists opt_no_write_to_binlog opt_var_type table_option opt_if_not_exists opt_no_write_to_binlog opt_var_type
opt_var_ident_type delete_option opt_temporary all_or_any opt_distinct opt_var_ident_type delete_option opt_temporary all_or_any opt_distinct
opt_ignore_leaves fulltext_options spatial_type union_option opt_ignore_leaves fulltext_options spatial_type union_option
start_transaction_opts
%type <ulong_num> %type <ulong_num>
ULONG_NUM raid_types merge_insert_types ULONG_NUM raid_types merge_insert_types
...@@ -2095,10 +2098,20 @@ slave: ...@@ -2095,10 +2098,20 @@ slave:
start: start:
START_SYM TRANSACTION_SYM { Lex->sql_command = SQLCOM_BEGIN;} START_SYM TRANSACTION_SYM start_transaction_opts
{} {
Lex->sql_command = SQLCOM_BEGIN;
Lex->start_transaction_opt= $3;
}
; ;
start_transaction_opts:
/*empty*/ { $$ = 0; }
| WITH CONSISTENT_SYM SNAPSHOT_SYM
{
$$= MYSQL_START_TRANS_OPT_WITH_CONS_SNAPSHOT;
}
slave_thread_opts: slave_thread_opts:
{ Lex->slave_thd_opt= 0; } { Lex->slave_thd_opt= 0; }
slave_thread_opt_list slave_thread_opt_list
...@@ -5122,6 +5135,7 @@ keyword: ...@@ -5122,6 +5135,7 @@ keyword:
| COMMIT_SYM {} | COMMIT_SYM {}
| COMPRESSED_SYM {} | COMPRESSED_SYM {}
| CONCURRENT {} | CONCURRENT {}
| CONSISTENT_SYM {}
| CUBE_SYM {} | CUBE_SYM {}
| DATA_SYM {} | DATA_SYM {}
| DATETIME {} | DATETIME {}
...@@ -5262,6 +5276,7 @@ keyword: ...@@ -5262,6 +5276,7 @@ keyword:
| SHARE_SYM {} | SHARE_SYM {}
| SHUTDOWN {} | SHUTDOWN {}
| SLAVE {} | SLAVE {}
| SNAPSHOT_SYM {}
| SOUNDS_SYM {} | SOUNDS_SYM {}
| SQL_CACHE_SYM {} | SQL_CACHE_SYM {}
| SQL_BUFFER_RESULT {} | SQL_BUFFER_RESULT {}
...@@ -5888,7 +5903,7 @@ grant_option: ...@@ -5888,7 +5903,7 @@ grant_option:
; ;
begin: begin:
BEGIN_SYM { Lex->sql_command = SQLCOM_BEGIN;} opt_work {} BEGIN_SYM { Lex->sql_command = SQLCOM_BEGIN; Lex->start_transaction_opt= 0;} opt_work {}
; ;
opt_work: opt_work:
......
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