mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Fix for BUG#57316 "It is not clear how to disable autocommit"
add boolean command-line option --autocommit. mysql-test/mysql-test-run.pl: do in --gdb like in --ddd: to let the developer debug the startup phase (like command-line options parsing), don't "run". It's the third time I do this change, it was previously lost by merges, port of 6.0 to next-mr... mysql-test/r/mysqld--help-notwin.result: new command-line option mysql-test/r/mysqld--help-win.result: a Linux user's best guess at what the Windows result should be mysql-test/suite/sys_vars/inc/autocommit_func2.inc: new test mysql-test/suite/sys_vars/t/autocommit_func2-master.opt: test new option mysql-test/suite/sys_vars/t/autocommit_func3-master.opt: test new option sql/mysqld.cc: new --autocommit sql/mysqld.h: new --autocommit sql/sql_partition.cc: What matters to this partitioning quote is to have the OPTION_QUOTE_SHOW_CREATE flag down, it's all that append_identifier() uses. So we make it explicit.
This commit is contained in:
@@ -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:
|
|||||||
--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:
|
|||||||
--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.)
|
||||||
|
29
mysql-test/suite/sys_vars/inc/autocommit_func2.inc
Normal file
29
mysql-test/suite/sys_vars/inc/autocommit_func2.inc
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
--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;
|
46
mysql-test/suite/sys_vars/r/autocommit_func2.result
Normal file
46
mysql-test/suite/sys_vars/r/autocommit_func2.result
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
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;
|
42
mysql-test/suite/sys_vars/r/autocommit_func3.result
Normal file
42
mysql-test/suite/sys_vars/r/autocommit_func3.result
Normal file
@@ -0,0 +1,42 @@
|
|||||||
|
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;
|
1
mysql-test/suite/sys_vars/t/autocommit_func2-master.opt
Normal file
1
mysql-test/suite/sys_vars/t/autocommit_func2-master.opt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
--autocommit=1
|
1
mysql-test/suite/sys_vars/t/autocommit_func2.test
Normal file
1
mysql-test/suite/sys_vars/t/autocommit_func2.test
Normal file
@@ -0,0 +1 @@
|
|||||||
|
--source suite/sys_vars/inc/autocommit_func2.inc
|
1
mysql-test/suite/sys_vars/t/autocommit_func3-master.opt
Normal file
1
mysql-test/suite/sys_vars/t/autocommit_func3-master.opt
Normal file
@@ -0,0 +1 @@
|
|||||||
|
--autocommit=0
|
1
mysql-test/suite/sys_vars/t/autocommit_func3.test
Normal file
1
mysql-test/suite/sys_vars/t/autocommit_func3.test
Normal file
@@ -0,0 +1 @@
|
|||||||
|
--source suite/sys_vars/inc/autocommit_func2.inc
|
@@ -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,
|
|||||||
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
|
|||||||
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)
|
|||||||
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)
|
|||||||
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;
|
||||||
|
Reference in New Issue
Block a user