summaryrefslogtreecommitdiff
path: root/sql/sys_vars.cc
diff options
context:
space:
mode:
authorGalina Shalygina <galina.shalygina@mariadb.com>2018-06-01 21:57:10 +0200
committerGalina Shalygina <galina.shalygina@mariadb.com>2018-06-01 21:57:10 +0200
commit6db465d7ce455cf75ec224108cbe61ca8be63d3d (patch)
tree9648ff1fc677eebb60b278c2e2c13131934ed2a0 /sql/sys_vars.cc
parentffe83e8e7bef32eb2a80aad2d382f0b023dd3a44 (diff)
parent4a49f7f88cfa82ae6eb8e7b5a528e91416b33b52 (diff)
downloadmariadb-git-shagalla-10.4.tar.gz
Merge 10.3.7 into 10.4shagalla-10.4
Diffstat (limited to 'sql/sys_vars.cc')
-rw-r--r--sql/sys_vars.cc92
1 files changed, 61 insertions, 31 deletions
diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc
index 0331343ccef..658bb0e2d1c 100644
--- a/sql/sys_vars.cc
+++ b/sql/sys_vars.cc
@@ -400,7 +400,7 @@ static const char *vers_alter_history_keywords[]= {"ERROR", "KEEP", NullS};
static Sys_var_enum Sys_vers_alter_history(
"system_versioning_alter_history", "Versioning ALTER TABLE mode. "
"ERROR: Fail ALTER with error; " /* TODO: fail only when history non-empty */
- "KEEP: Keep historical system rows and subject them to ALTER; ",
+ "KEEP: Keep historical system rows and subject them to ALTER",
SESSION_VAR(vers_alter_history), CMD_LINE(REQUIRED_ARG),
vers_alter_history_keywords, DEFAULT(VERS_ALTER_HISTORY_ERROR));
@@ -443,13 +443,13 @@ static bool
error_if_in_trans_or_substatement(THD *thd, int in_substatement_error,
int in_transaction_error)
{
- if (thd->in_sub_stmt)
+ if (unlikely(thd->in_sub_stmt))
{
my_error(in_substatement_error, MYF(0));
return true;
}
- if (thd->in_active_multi_stmt_transaction())
+ if (unlikely(thd->in_active_multi_stmt_transaction()))
{
my_error(in_transaction_error, MYF(0));
return true;
@@ -470,6 +470,8 @@ static bool check_has_super(sys_var *self, THD *thd, set_var *var)
#endif
return false;
}
+
+
static bool binlog_format_check(sys_var *self, THD *thd, set_var *var)
{
if (check_has_super(self, thd, var))
@@ -529,9 +531,9 @@ static bool binlog_format_check(sys_var *self, THD *thd, set_var *var)
return true;
}
- if (error_if_in_trans_or_substatement(thd,
- ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT,
- ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT))
+ if (unlikely(error_if_in_trans_or_substatement(thd,
+ ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_FORMAT,
+ ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_FORMAT)))
return true;
return false;
@@ -566,9 +568,9 @@ static bool binlog_direct_check(sys_var *self, THD *thd, set_var *var)
if (var->type == OPT_GLOBAL)
return false;
- if (error_if_in_trans_or_substatement(thd,
- ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT,
- ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT))
+ if (unlikely(error_if_in_trans_or_substatement(thd,
+ ER_STORED_FUNCTION_PREVENTS_SWITCH_BINLOG_DIRECT,
+ ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_BINLOG_DIRECT)))
return true;
return false;
@@ -1606,9 +1608,9 @@ static bool check_gtid_seq_no(sys_var *self, THD *thd, set_var *var)
if (check_has_super(self, thd, var))
return true;
- if (error_if_in_trans_or_substatement(thd,
- ER_STORED_FUNCTION_PREVENTS_SWITCH_GTID_DOMAIN_ID_SEQ_NO,
- ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_GTID_DOMAIN_ID_SEQ_NO))
+ if (unlikely(error_if_in_trans_or_substatement(thd,
+ ER_STORED_FUNCTION_PREVENTS_SWITCH_GTID_DOMAIN_ID_SEQ_NO,
+ ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_GTID_DOMAIN_ID_SEQ_NO)))
return true;
domain_id= thd->variables.gtid_domain_id;
@@ -2369,9 +2371,19 @@ static Sys_var_mybool Sys_old_mode(
"old", "Use compatible behavior from previous MariaDB version. See also --old-mode",
SESSION_VAR(old_mode), CMD_LINE(OPT_ARG), DEFAULT(FALSE));
-static Sys_var_mybool Sys_old_alter_table(
- "old_alter_table", "Use old, non-optimized alter table",
- SESSION_VAR(old_alter_table), CMD_LINE(OPT_ARG), DEFAULT(FALSE));
+static const char *alter_algorithm_modes[]= {"DEFAULT", "COPY", "INPLACE",
+"NOCOPY", "INSTANT", NULL};
+
+static Sys_var_enum Sys_alter_algorithm(
+ "alter_algorithm", "Specify the alter table algorithm",
+ SESSION_VAR(alter_algorithm), CMD_LINE(OPT_ARG),
+ alter_algorithm_modes, DEFAULT(0));
+
+static Sys_var_enum Sys_old_alter_table(
+ "old_alter_table", "Alias for alter_algorithm. "
+ "Deprecated. Use --alter-algorithm instead.",
+ SESSION_VAR(alter_algorithm), CMD_LINE(OPT_ARG),
+ alter_algorithm_modes, DEFAULT(0));
static bool check_old_passwords(sys_var *self, THD *thd, set_var *var)
{
@@ -2442,8 +2454,7 @@ static Sys_var_ulong Sys_optimizer_search_depth(
"optimization, but may produce very bad query plans. If set to 0, "
"the system will automatically pick a reasonable value.",
SESSION_VAR(optimizer_search_depth), CMD_LINE(REQUIRED_ARG),
- VALID_RANGE(0, MAX_TABLES+1), DEFAULT(MAX_TABLES+1), BLOCK_SIZE(1),
- NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0), ON_UPDATE(0));
+ VALID_RANGE(0, MAX_TABLES+1), DEFAULT(MAX_TABLES+1), BLOCK_SIZE(1));
/* this is used in the sigsegv handler */
export const char *optimizer_switch_names[]=
@@ -4036,15 +4047,15 @@ static bool check_sql_log_bin(sys_var *self, THD *thd, set_var *var)
if (check_has_super(self, thd, var))
return TRUE;
- if (var->type == OPT_GLOBAL)
+ if (unlikely(var->type == OPT_GLOBAL))
{
my_error(ER_INCORRECT_GLOBAL_LOCAL_VAR, MYF(0), self->name.str, "SESSION");
return TRUE;
}
- if (error_if_in_trans_or_substatement(thd,
- ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN,
- ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN))
+ if (unlikely(error_if_in_trans_or_substatement(thd,
+ ER_STORED_FUNCTION_PREVENTS_SWITCH_SQL_LOG_BIN,
+ ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SQL_LOG_BIN)))
return TRUE;
return FALSE;
@@ -4177,9 +4188,9 @@ static bool check_skip_replication(sys_var *self, THD *thd, set_var *var)
Rows_log_event without Table_map_log_event or transactional updates without
the COMMIT).
*/
- if (error_if_in_trans_or_substatement(thd,
- ER_STORED_FUNCTION_PREVENTS_SWITCH_SKIP_REPLICATION,
- ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SKIP_REPLICATION))
+ if (unlikely(error_if_in_trans_or_substatement(thd,
+ ER_STORED_FUNCTION_PREVENTS_SWITCH_SKIP_REPLICATION,
+ ER_INSIDE_TRANSACTION_PREVENTS_SWITCH_SKIP_REPLICATION)))
return 1;
return 0;
@@ -4202,11 +4213,24 @@ static Sys_var_harows Sys_select_limit(
SESSION_VAR(select_limit), NO_CMD_LINE,
VALID_RANGE(0, HA_POS_ERROR), DEFAULT(HA_POS_ERROR), BLOCK_SIZE(1));
+static const char *secure_timestamp_levels[]= {"NO", "SUPER", "REPLICATION", "YES", 0};
+static bool check_timestamp(sys_var *self, THD *thd, set_var *var)
+{
+ if (opt_secure_timestamp == SECTIME_NO)
+ return false;
+ if (opt_secure_timestamp == SECTIME_SUPER)
+ return check_has_super(self, thd, var);
+ char buf[1024];
+ strxnmov(buf, sizeof(buf), "--secure-timestamp=",
+ secure_timestamp_levels[opt_secure_timestamp], NULL);
+ my_error(ER_OPTION_PREVENTS_STATEMENT, MYF(0), buf);
+ return true;
+}
static Sys_var_timestamp Sys_timestamp(
"timestamp", "Set the time for this client",
sys_var::ONLY_SESSION, NO_CMD_LINE,
VALID_RANGE(0, TIMESTAMP_MAX_VALUE),
- NO_MUTEX_GUARD, IN_BINLOG);
+ NO_MUTEX_GUARD, IN_BINLOG, ON_CHECK(check_timestamp));
static bool update_last_insert_id(THD *thd, set_var *var)
{
@@ -5402,9 +5426,7 @@ static const char *wsrep_OSU_method_names[]= { "TOI", "RSU", NullS };
static Sys_var_enum Sys_wsrep_OSU_method(
"wsrep_OSU_method", "Method for Online Schema Upgrade",
SESSION_VAR(wsrep_OSU_method), CMD_LINE(OPT_ARG),
- wsrep_OSU_method_names, DEFAULT(WSREP_OSU_TOI),
- NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(0),
- ON_UPDATE(0));
+ wsrep_OSU_method_names, DEFAULT(WSREP_OSU_TOI));
static PolyLock_mutex PLock_wsrep_desync(&LOCK_wsrep_desync);
static Sys_var_mybool Sys_wsrep_desync (
@@ -5872,9 +5894,7 @@ static Sys_var_enum Sys_binlog_row_image(
"before image, and only changed columns are logged in the after image. "
"(Default: FULL).",
SESSION_VAR(binlog_row_image), CMD_LINE(REQUIRED_ARG),
- binlog_row_image_names, DEFAULT(BINLOG_ROW_IMAGE_FULL),
- NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(NULL),
- ON_UPDATE(NULL));
+ binlog_row_image_names, DEFAULT(BINLOG_ROW_IMAGE_FULL));
static bool check_pseudo_slave_mode(sys_var *self, THD *thd, set_var *var)
{
@@ -6046,3 +6066,13 @@ static Sys_var_uint Sys_in_subquery_conversion_threshold(
SESSION_VAR(in_subquery_conversion_threshold), CMD_LINE(OPT_ARG),
VALID_RANGE(0, UINT_MAX), DEFAULT(IN_SUBQUERY_CONVERSION_THRESHOLD), BLOCK_SIZE(1));
#endif
+
+static Sys_var_enum Sys_secure_timestamp(
+ "secure_timestamp", "Restricts direct setting of a session "
+ "timestamp. Possible levels are: YES - timestamp cannot deviate from "
+ "the system clock, REPLICATION - replication thread can adjust "
+ "timestamp to match the master's, SUPER - a user with this "
+ "privilege and a replication thread can adjust timestamp, NO - "
+ "historical behavior, anyone can modify session timestamp",
+ READ_ONLY GLOBAL_VAR(opt_secure_timestamp), CMD_LINE(REQUIRED_ARG),
+ secure_timestamp_levels, DEFAULT(SECTIME_NO));