Commit f80d13e5 authored by Guilhem Bichot's avatar Guilhem Bichot

Fix for BUG#57316 "It is not clear how to disable autocommit"

add boolean command-line option --autocommit.
parent 373be0d5
...@@ -5317,8 +5317,7 @@ sub gdb_arguments { ...@@ -5317,8 +5317,7 @@ sub gdb_arguments {
"break mysql_parse\n" . "break mysql_parse\n" .
"commands 1\n" . "commands 1\n" .
"disable 1\n" . "disable 1\n" .
"end\n" . "end\n");
"run");
} }
if ( $opt_manual_gdb ) if ( $opt_manual_gdb )
......
...@@ -19,6 +19,7 @@ The following options may be given as the first argument: ...@@ -19,6 +19,7 @@ The following options may be given as the first argument:
--auto-increment-offset[=#] --auto-increment-offset[=#]
Offset added to Auto-increment columns. Used when Offset added to Auto-increment columns. Used when
auto-increment-increment != 1 auto-increment-increment != 1
--autocommit Set default value for autocommit (0 or 1)
--automatic-sp-privileges --automatic-sp-privileges
Creating and dropping stored procedures alters ACLs Creating and dropping stored procedures alters ACLs
(Defaults to on; use --skip-automatic-sp-privileges to disable.) (Defaults to on; use --skip-automatic-sp-privileges to disable.)
......
...@@ -19,6 +19,7 @@ The following options may be given as the first argument: ...@@ -19,6 +19,7 @@ The following options may be given as the first argument:
--auto-increment-offset[=#] --auto-increment-offset[=#]
Offset added to Auto-increment columns. Used when Offset added to Auto-increment columns. Used when
auto-increment-increment != 1 auto-increment-increment != 1
--autocommit Set default value for autocommit (0 or 1)
--automatic-sp-privileges --automatic-sp-privileges
Creating and dropping stored procedures alters ACLs Creating and dropping stored procedures alters ACLs
(Defaults to on; use --skip-automatic-sp-privileges to disable.) (Defaults to on; use --skip-automatic-sp-privileges to disable.)
......
--source include/have_innodb.inc
CREATE TABLE t1
(
id INT NOT NULL auto_increment,
PRIMARY KEY (id),
name varchar(30)
) ENGINE = INNODB;
SELECT @@global.autocommit;
SELECT @@autocommit;
INSERT into t1(name) values('Record_1');
INSERT into t1(name) values('Record_2');
SELECT * from t1;
ROLLBACK;
SELECT * from t1;
set @@global.autocommit = 1-@@global.autocommit;
set @@autocommit = 1-@@autocommit;
SELECT @@global.autocommit;
SELECT @@autocommit;
INSERT into t1(name) values('Record_1');
INSERT into t1(name) values('Record_2');
SELECT * from t1;
ROLLBACK;
SELECT * from t1;
DROP TABLE t1;
set @@global.autocommit = 1-@@global.autocommit;
CREATE TABLE t1
(
id INT NOT NULL auto_increment,
PRIMARY KEY (id),
name varchar(30)
) ENGINE = INNODB;
SELECT @@global.autocommit;
@@global.autocommit
1
SELECT @@autocommit;
@@autocommit
1
INSERT into t1(name) values('Record_1');
INSERT into t1(name) values('Record_2');
SELECT * from t1;
id name
1 Record_1
2 Record_2
ROLLBACK;
SELECT * from t1;
id name
1 Record_1
2 Record_2
set @@global.autocommit = 1-@@global.autocommit;
set @@autocommit = 1-@@autocommit;
SELECT @@global.autocommit;
@@global.autocommit
0
SELECT @@autocommit;
@@autocommit
0
INSERT into t1(name) values('Record_1');
INSERT into t1(name) values('Record_2');
SELECT * from t1;
id name
1 Record_1
2 Record_2
3 Record_1
4 Record_2
ROLLBACK;
SELECT * from t1;
id name
1 Record_1
2 Record_2
DROP TABLE t1;
set @@global.autocommit = 1-@@global.autocommit;
CREATE TABLE t1
(
id INT NOT NULL auto_increment,
PRIMARY KEY (id),
name varchar(30)
) ENGINE = INNODB;
SELECT @@global.autocommit;
@@global.autocommit
0
SELECT @@autocommit;
@@autocommit
0
INSERT into t1(name) values('Record_1');
INSERT into t1(name) values('Record_2');
SELECT * from t1;
id name
1 Record_1
2 Record_2
ROLLBACK;
SELECT * from t1;
id name
set @@global.autocommit = 1-@@global.autocommit;
set @@autocommit = 1-@@autocommit;
SELECT @@global.autocommit;
@@global.autocommit
1
SELECT @@autocommit;
@@autocommit
1
INSERT into t1(name) values('Record_1');
INSERT into t1(name) values('Record_2');
SELECT * from t1;
id name
3 Record_1
4 Record_2
ROLLBACK;
SELECT * from t1;
id name
3 Record_1
4 Record_2
DROP TABLE t1;
set @@global.autocommit = 1-@@global.autocommit;
--source suite/sys_vars/inc/autocommit_func2.inc
--source suite/sys_vars/inc/autocommit_func2.inc
...@@ -5662,6 +5662,12 @@ struct my_option my_long_options[]= ...@@ -5662,6 +5662,12 @@ struct my_option my_long_options[]=
{"ansi", 'a', "Use ANSI SQL syntax instead of MySQL syntax. This mode " {"ansi", 'a', "Use ANSI SQL syntax instead of MySQL syntax. This mode "
"will also set transaction isolation level 'serializable'.", 0, 0, 0, "will also set transaction isolation level 'serializable'.", 0, 0, 0,
GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0}, GET_NO_ARG, NO_ARG, 0, 0, 0, 0, 0, 0},
/*
Because Sys_var_bit does not support command-line options, we need to
explicitely add one for --autocommit
*/
{"autocommit", OPT_AUTOCOMMIT, "Set default value for autocommit (0 or 1)",
NULL, NULL, 0, GET_BOOL, OPT_ARG, 0, 0, 0, 0, 0, NULL},
{"bind-address", OPT_BIND_ADDRESS, "IP address to bind to.", {"bind-address", OPT_BIND_ADDRESS, "IP address to bind to.",
&my_bind_addr_str, &my_bind_addr_str, 0, GET_STR, &my_bind_addr_str, &my_bind_addr_str, 0, GET_STR,
REQUIRED_ARG, 0, 0, 0, 0, 0, 0}, REQUIRED_ARG, 0, 0, 0, 0, 0, 0},
...@@ -7114,6 +7120,13 @@ mysqld_get_one_option(int optid, ...@@ -7114,6 +7120,13 @@ mysqld_get_one_option(int optid,
if (argument == NULL) /* no argument */ if (argument == NULL) /* no argument */
log_error_file_ptr= const_cast<char*>(""); log_error_file_ptr= const_cast<char*>("");
break; break;
case OPT_AUTOCOMMIT:
const ulonglong turn_bit_on= (argument && (atoi(argument) == 0)) ?
OPTION_NOT_AUTOCOMMIT : OPTION_AUTOCOMMIT;
global_system_variables.option_bits=
(global_system_variables.option_bits &
~(OPTION_NOT_AUTOCOMMIT | OPTION_AUTOCOMMIT)) | turn_bit_on;
break;
} }
return 0; return 0;
} }
......
...@@ -391,7 +391,8 @@ enum options_mysqld ...@@ -391,7 +391,8 @@ enum options_mysqld
OPT_UPDATE_LOG, OPT_UPDATE_LOG,
OPT_WANT_CORE, OPT_WANT_CORE,
OPT_ENGINE_CONDITION_PUSHDOWN, OPT_ENGINE_CONDITION_PUSHDOWN,
OPT_LOG_ERROR OPT_LOG_ERROR,
OPT_AUTOCOMMIT
}; };
......
...@@ -1997,7 +1997,7 @@ static int add_part_field_list(File fptr, List<char> field_list) ...@@ -1997,7 +1997,7 @@ static int add_part_field_list(File fptr, List<char> field_list)
String field_string("", 0, system_charset_info); String field_string("", 0, system_charset_info);
THD *thd= current_thd; THD *thd= current_thd;
ulonglong save_options= thd->variables.option_bits; ulonglong save_options= thd->variables.option_bits;
thd->variables.option_bits= 0; thd->variables.option_bits&= ~OPTION_QUOTE_SHOW_CREATE;
append_identifier(thd, &field_string, field_str, append_identifier(thd, &field_string, field_str,
strlen(field_str)); strlen(field_str));
thd->variables.option_bits= save_options; thd->variables.option_bits= save_options;
...@@ -2016,8 +2016,7 @@ static int add_name_string(File fptr, const char *name) ...@@ -2016,8 +2016,7 @@ static int add_name_string(File fptr, const char *name)
String name_string("", 0, system_charset_info); String name_string("", 0, system_charset_info);
THD *thd= current_thd; THD *thd= current_thd;
ulonglong save_options= thd->variables.option_bits; ulonglong save_options= thd->variables.option_bits;
thd->variables.option_bits&= ~OPTION_QUOTE_SHOW_CREATE;
thd->variables.option_bits= 0;
append_identifier(thd, &name_string, name, append_identifier(thd, &name_string, name,
strlen(name)); strlen(name));
thd->variables.option_bits= save_options; thd->variables.option_bits= save_options;
......
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