summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/event_scheduler.cc4
-rw-r--r--sql/gen_win_tzname_data.ps12
-rw-r--r--sql/opt_range.cc48
-rw-r--r--sql/slave.cc1
-rw-r--r--sql/sql_alter.cc34
-rw-r--r--sql/sql_alter.h26
-rw-r--r--sql/sql_lex.cc18
-rw-r--r--sql/sql_parse.cc2
-rw-r--r--sql/sql_partition.cc2
-rw-r--r--sql/sql_select.cc21
-rw-r--r--sql/sql_table.cc18
-rw-r--r--sql/sql_yacc.yy4
-rw-r--r--sql/win_tzname_data.h8
13 files changed, 123 insertions, 65 deletions
diff --git a/sql/event_scheduler.cc b/sql/event_scheduler.cc
index e842d95e3b0..4ecf19c389b 100644
--- a/sql/event_scheduler.cc
+++ b/sql/event_scheduler.cc
@@ -1,4 +1,5 @@
-/* Copyright (c) 2006, 2013, Oracle and/or its affiliates.
+/* Copyright (c) 2006, 2019, Oracle and/or its affiliates.
+ Copyright (c) 2009, 2020, MariaDB Corporation
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -509,6 +510,7 @@ Event_scheduler::run(THD *thd)
DBUG_PRINT("info", ("job_data is NULL, the thread was killed"));
}
DBUG_PRINT("info", ("state=%s", scheduler_states_names[state].str));
+ free_root(thd->mem_root, MYF(0));
}
LOCK_DATA();
diff --git a/sql/gen_win_tzname_data.ps1 b/sql/gen_win_tzname_data.ps1
index 13b6ce6ffd0..c0a37d21895 100644
--- a/sql/gen_win_tzname_data.ps1
+++ b/sql/gen_win_tzname_data.ps1
@@ -4,7 +4,7 @@
write-output "/* This file was generated using gen_win_tzname_data.ps1 */"
$xdoc = new-object System.Xml.XmlDocument
-$xdoc.load("https://unicode.org/repos/cldr/trunk/common/supplemental/windowsZones.xml")
+$xdoc.load("https://raw.githubusercontent.com/unicode-org/cldr/master/common/supplemental/windowsZones.xml")
$nodes = $xdoc.SelectNodes("//mapZone[@territory='001']") # use default territory (001)
foreach ($node in $nodes) {
write-output ('{L"'+ $node.other + '","'+ $node.type+'"},')
diff --git a/sql/opt_range.cc b/sql/opt_range.cc
index 29cf73aeea0..be907a0c4b3 100644
--- a/sql/opt_range.cc
+++ b/sql/opt_range.cc
@@ -355,9 +355,8 @@ QUICK_RANGE_SELECT *get_quick_select(PARAM *param,uint index,
uint mrr_buf_size, MEM_ROOT *alloc);
static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
bool index_read_must_be_used,
- bool update_tbl_stats,
- double read_time,
- bool ror_scans_required);
+ bool for_range_access,
+ double read_time);
static
TRP_INDEX_INTERSECT *get_best_index_intersect(PARAM *param, SEL_TREE *tree,
double read_time);
@@ -2889,7 +2888,6 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
It is possible to use a range-based quick select (but it might be
slower than 'all' table scan).
*/
- TRP_RANGE *range_trp;
TRP_ROR_INTERSECT *rori_trp;
TRP_INDEX_INTERSECT *intersect_trp;
bool can_build_covering= FALSE;
@@ -2902,9 +2900,9 @@ int SQL_SELECT::test_quick_select(THD *thd, key_map keys_to_use,
remove_nonrange_trees(&param, tree);
/* Get best 'range' plan and prepare data for making other plans */
- if ((range_trp= get_key_scans_params(&param, tree,
- only_single_index_range_scan, TRUE,
- best_read_time, FALSE)))
+ if (auto range_trp= get_key_scans_params(&param, tree,
+ only_single_index_range_scan,
+ true, best_read_time))
{
best_trp= range_trp;
best_read_time= best_trp->read_cost;
@@ -5097,9 +5095,6 @@ TABLE_READ_PLAN *get_best_disjunct_quick(PARAM *param, SEL_IMERGE *imerge,
n_child_scans)))
DBUG_RETURN(NULL);
- const bool only_ror_scans_required= !optimizer_flag(param->thd,
- OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION);
-
Json_writer_object trace_best_disjunct(thd);
Json_writer_array to_merge(thd, "indexes_to_merge");
/*
@@ -5115,8 +5110,7 @@ TABLE_READ_PLAN *get_best_disjunct_quick(PARAM *param, SEL_IMERGE *imerge,
"tree in SEL_IMERGE"););
Json_writer_object trace_idx(thd);
if (!(*cur_child= get_key_scans_params(param, *ptree, TRUE, FALSE,
- read_time,
- only_ror_scans_required)))
+ read_time)))
{
/*
One of index scans in this index_merge is more expensive than entire
@@ -5474,9 +5468,12 @@ TABLE_READ_PLAN *merge_same_index_scans(PARAM *param, SEL_IMERGE *imerge,
a random order
2. the functions that estimate the cost of a range scan and an
index merge retrievals are not well calibrated
+
+ As the best range access has been already chosen it does not
+ make sense to evaluate the one obtained from a degenerated
+ index merge.
*/
- trp= get_key_scans_params(param, *imerge->trees, FALSE, TRUE,
- read_time, FALSE);
+ trp= 0;
}
DBUG_RETURN(trp);
@@ -7361,9 +7358,9 @@ TRP_ROR_INTERSECT *get_best_covering_ror_intersect(PARAM *param,
tree make range select for this SEL_TREE
index_read_must_be_used if TRUE, assume 'index only' option will be set
(except for clustered PK indexes)
+ for_range_access if TRUE the function is called to get the best range
+ plan for range access, not for index merge access
read_time don't create read plans with cost > read_time.
- only_ror_scans_required set to TRUE when we are only interested
- in ROR scan
RETURN
Best range read plan
NULL if no plan found or error occurred
@@ -7371,9 +7368,8 @@ TRP_ROR_INTERSECT *get_best_covering_ror_intersect(PARAM *param,
static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
bool index_read_must_be_used,
- bool update_tbl_stats,
- double read_time,
- bool only_ror_scans_required)
+ bool for_range_access,
+ double read_time)
{
uint idx, UNINIT_VAR(best_idx);
SEL_ARG *key_to_read= NULL;
@@ -7401,7 +7397,8 @@ static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
(INDEX_SCAN_INFO **) alloc_root(param->mem_root,
sizeof(INDEX_SCAN_INFO *) * param->keys);
}
- tree->index_scans_end= tree->index_scans;
+ tree->index_scans_end= tree->index_scans;
+
for (idx= 0; idx < param->keys; idx++)
{
SEL_ARG *key= tree->keys[idx];
@@ -7425,10 +7422,15 @@ static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
trace_idx.add("index", param->table->key_info[keynr].name);
found_records= check_quick_select(param, idx, read_index_only, key,
- update_tbl_stats, &mrr_flags,
+ for_range_access, &mrr_flags,
&buf_size, &cost, &is_ror_scan);
- if (only_ror_scans_required && !is_ror_scan)
+
+ if (!for_range_access && !is_ror_scan &&
+ !optimizer_flag(param->thd,OPTIMIZER_SWITCH_INDEX_MERGE_SORT_UNION))
+ {
+ /* The scan is not a ROR-scan, just skip it */
continue;
+ }
if (found_records != HA_POS_ERROR && tree->index_scans &&
(index_scan= (INDEX_SCAN_INFO *)alloc_root(param->mem_root,
@@ -7457,7 +7459,7 @@ static TRP_RANGE *get_key_scans_params(PARAM *param, SEL_TREE *tree,
.add("index_only", read_index_only)
.add("rows", found_records)
.add("cost", cost.total_cost());
- }
+ }
if ((found_records != HA_POS_ERROR) && is_ror_scan)
{
tree->n_ror_scans++;
diff --git a/sql/slave.cc b/sql/slave.cc
index fb26856f811..9b9400bd7bc 100644
--- a/sql/slave.cc
+++ b/sql/slave.cc
@@ -4914,6 +4914,7 @@ connected:
goto err;
goto connected;
}
+ DBUG_EXECUTE_IF("fail_com_register_slave", goto err;);
}
DBUG_PRINT("info",("Starting reading binary log from master"));
diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc
index 2cbbd83ec36..a1d235086db 100644
--- a/sql/sql_alter.cc
+++ b/sql/sql_alter.cc
@@ -71,6 +71,10 @@ bool Alter_info::set_requested_algorithm(const LEX_CSTRING *str)
return false;
}
+void Alter_info::set_requested_algorithm(enum_alter_table_algorithm algo_val)
+{
+ requested_algorithm= algo_val;
+}
bool Alter_info::set_requested_lock(const LEX_CSTRING *str)
{
@@ -88,13 +92,16 @@ bool Alter_info::set_requested_lock(const LEX_CSTRING *str)
return false;
}
-const char* Alter_info::algorithm() const
+const char* Alter_info::algorithm_clause(THD *thd) const
{
- switch (requested_algorithm) {
+ switch (algorithm(thd)) {
case ALTER_TABLE_ALGORITHM_INPLACE:
return "ALGORITHM=INPLACE";
case ALTER_TABLE_ALGORITHM_COPY:
return "ALGORITHM=COPY";
+ case ALTER_TABLE_ALGORITHM_NONE:
+ DBUG_ASSERT(0);
+ /* Fall through */
case ALTER_TABLE_ALGORITHM_DEFAULT:
return "ALGORITHM=DEFAULT";
case ALTER_TABLE_ALGORITHM_NOCOPY:
@@ -125,9 +132,6 @@ const char* Alter_info::lock() const
bool Alter_info::supports_algorithm(THD *thd, enum_alter_inplace_result result,
const Alter_inplace_info *ha_alter_info)
{
- if (requested_algorithm == Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT)
- requested_algorithm = (Alter_info::enum_alter_table_algorithm) thd->variables.alter_algorithm;
-
switch (result) {
case HA_ALTER_INPLACE_EXCLUSIVE_LOCK:
case HA_ALTER_INPLACE_SHARED_LOCK:
@@ -136,16 +140,16 @@ bool Alter_info::supports_algorithm(THD *thd, enum_alter_inplace_result result,
return false;
case HA_ALTER_INPLACE_COPY_NO_LOCK:
case HA_ALTER_INPLACE_COPY_LOCK:
- if (requested_algorithm >= Alter_info::ALTER_TABLE_ALGORITHM_NOCOPY)
+ if (algorithm(thd) >= Alter_info::ALTER_TABLE_ALGORITHM_NOCOPY)
{
- ha_alter_info->report_unsupported_error(algorithm(),
+ ha_alter_info->report_unsupported_error(algorithm_clause(thd),
"ALGORITHM=INPLACE");
return true;
}
return false;
case HA_ALTER_INPLACE_NOCOPY_NO_LOCK:
case HA_ALTER_INPLACE_NOCOPY_LOCK:
- if (requested_algorithm == Alter_info::ALTER_TABLE_ALGORITHM_INSTANT)
+ if (algorithm(thd) == Alter_info::ALTER_TABLE_ALGORITHM_INSTANT)
{
ha_alter_info->report_unsupported_error("ALGORITHM=INSTANT",
"ALGORITHM=NOCOPY");
@@ -153,9 +157,9 @@ bool Alter_info::supports_algorithm(THD *thd, enum_alter_inplace_result result,
}
return false;
case HA_ALTER_INPLACE_NOT_SUPPORTED:
- if (requested_algorithm >= Alter_info::ALTER_TABLE_ALGORITHM_INPLACE)
+ if (algorithm(thd) >= Alter_info::ALTER_TABLE_ALGORITHM_INPLACE)
{
- ha_alter_info->report_unsupported_error(algorithm(),
+ ha_alter_info->report_unsupported_error(algorithm_clause(thd),
"ALGORITHM=COPY");
return true;
}
@@ -176,7 +180,7 @@ bool Alter_info::supports_lock(THD *thd, enum_alter_inplace_result result,
case HA_ALTER_INPLACE_EXCLUSIVE_LOCK:
// If SHARED lock and no particular algorithm was requested, use COPY.
if (requested_lock == Alter_info::ALTER_TABLE_LOCK_SHARED &&
- requested_algorithm == Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT &&
+ algorithm(thd) == Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT &&
thd->variables.alter_algorithm ==
Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT)
return false;
@@ -239,6 +243,14 @@ bool Alter_info::vers_prohibited(THD *thd) const
return false;
}
+Alter_info::enum_alter_table_algorithm
+Alter_info::algorithm(const THD *thd) const
+{
+ if (requested_algorithm == ALTER_TABLE_ALGORITHM_NONE)
+ return (Alter_info::enum_alter_table_algorithm) thd->variables.alter_algorithm;
+ return requested_algorithm;
+}
+
Alter_table_ctx::Alter_table_ctx()
: implicit_default_value_error_field(NULL),
diff --git a/sql/sql_alter.h b/sql/sql_alter.h
index a553c31346a..88873477c7c 100644
--- a/sql/sql_alter.h
+++ b/sql/sql_alter.h
@@ -58,7 +58,10 @@ public:
ALTER_TABLE_ALGORITHM_NOCOPY,
// Instant should allow any operation that changes metadata only.
- ALTER_TABLE_ALGORITHM_INSTANT
+ ALTER_TABLE_ALGORITHM_INSTANT,
+
+ // When there is no specification of algorithm during alter table.
+ ALTER_TABLE_ALGORITHM_NONE
};
@@ -107,8 +110,11 @@ public:
List<const char> partition_names;
// Number of partitions.
uint num_parts;
+private:
// Type of ALTER TABLE algorithm.
enum_alter_table_algorithm requested_algorithm;
+
+public:
// Type of ALTER TABLE lock.
enum_alter_table_lock requested_lock;
@@ -117,7 +123,7 @@ public:
flags(0), partition_flags(0),
keys_onoff(LEAVE_AS_IS),
num_parts(0),
- requested_algorithm(ALTER_TABLE_ALGORITHM_DEFAULT),
+ requested_algorithm(ALTER_TABLE_ALGORITHM_NONE),
requested_lock(ALTER_TABLE_LOCK_DEFAULT)
{}
@@ -134,7 +140,7 @@ public:
keys_onoff= LEAVE_AS_IS;
num_parts= 0;
partition_names.empty();
- requested_algorithm= ALTER_TABLE_ALGORITHM_DEFAULT;
+ requested_algorithm= ALTER_TABLE_ALGORITHM_NONE;
requested_lock= ALTER_TABLE_LOCK_DEFAULT;
}
@@ -182,9 +188,15 @@ public:
bool set_requested_lock(const LEX_CSTRING *str);
/**
+ Set the requested algorithm to the given algorithm value
+ @param algo_value algorithm to be set
+ */
+ void set_requested_algorithm(enum_alter_table_algorithm algo_value);
+
+ /**
Returns the algorithm value in the format "algorithm=value"
*/
- const char* algorithm() const;
+ const char* algorithm_clause(THD *thd) const;
/**
Returns the lock value in the format "lock=value"
@@ -220,6 +232,12 @@ public:
bool supports_lock(THD *thd, enum_alter_inplace_result result,
const Alter_inplace_info *ha_alter_info);
+ /**
+ Return user requested algorithm. If user does not specify
+ algorithm then return alter_algorithm variable value.
+ */
+ enum_alter_table_algorithm algorithm(const THD *thd) const;
+
private:
Alter_info &operator=(const Alter_info &rhs); // not implemented
Alter_info(const Alter_info &rhs); // not implemented
diff --git a/sql/sql_lex.cc b/sql/sql_lex.cc
index 59990e11e71..12c3d0a153d 100644
--- a/sql/sql_lex.cc
+++ b/sql/sql_lex.cc
@@ -1,4 +1,4 @@
-/* Copyright (c) 2000, 2014, Oracle and/or its affiliates.
+/* Copyright (c) 2000, 2019, Oracle and/or its affiliates.
Copyright (c) 2009, 2020, MariaDB Corporation
This program is free software; you can redistribute it and/or modify
@@ -1795,17 +1795,27 @@ static inline uint int_token(const char *str,uint length)
*/
bool Lex_input_stream::consume_comment(int remaining_recursions_permitted)
{
+ // only one level of nested comments are allowed
+ DBUG_ASSERT(remaining_recursions_permitted == 0 ||
+ remaining_recursions_permitted == 1);
uchar c;
while (!eof())
{
c= yyGet();
- if (remaining_recursions_permitted > 0)
+ if (remaining_recursions_permitted == 1)
{
if ((c == '/') && (yyPeek() == '*'))
{
- yySkip(); // Eat asterisk
- consume_comment(remaining_recursions_permitted - 1);
+ yyUnput('('); // Replace nested "/*..." with "(*..."
+ yySkip(); // and skip "("
+
+ yySkip(); /* Eat asterisk */
+ if (consume_comment(0))
+ return true;
+
+ yyUnput(')'); // Replace "...*/" with "...*)"
+ yySkip(); // and skip ")"
continue;
}
}
diff --git a/sql/sql_parse.cc b/sql/sql_parse.cc
index 273e5b79233..872dc8ce840 100644
--- a/sql/sql_parse.cc
+++ b/sql/sql_parse.cc
@@ -2103,7 +2103,7 @@ bool dispatch_command(enum enum_server_command command, THD *thd,
general_log_print(thd, command, "Log: '%s' Pos: %lu", name, pos);
if (nlen < FN_REFLEN)
mysql_binlog_send(thd, thd->strmake(name, nlen), (my_off_t)pos, flags);
- thd->unregister_slave();
+ thd->unregister_slave(); // todo: can be extraneous
/* fake COM_QUIT -- if we get here, the thread needs to terminate */
error = TRUE;
break;
diff --git a/sql/sql_partition.cc b/sql/sql_partition.cc
index c7b1efc89f3..5ce2ba1f407 100644
--- a/sql/sql_partition.cc
+++ b/sql/sql_partition.cc
@@ -5908,7 +5908,7 @@ the generated partition syntax in a correct manner.
*/
if (alter_info->partition_flags != ALTER_PARTITION_INFO ||
!table->part_info ||
- alter_info->requested_algorithm !=
+ alter_info->algorithm(thd) !=
Alter_info::ALTER_TABLE_ALGORITHM_INPLACE ||
!table->part_info->has_same_partitioning(part_info))
{
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index 638f044be77..fcff6b6c3b1 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -10741,6 +10741,7 @@ static bool create_ref_for_key(JOIN *join, JOIN_TAB *j,
uchar *key_buff=j->ref.key_buff, *null_ref_key= 0;
uint null_ref_part= NO_REF_PART;
bool keyuse_uses_no_tables= TRUE;
+ uint not_null_keyparts= 0;
if (ftkey)
{
j->ref.items[0]=((Item_func*)(keyuse->val))->key_item();
@@ -10770,6 +10771,8 @@ static bool create_ref_for_key(JOIN *join, JOIN_TAB *j,
j->ref.items[i]=keyuse->val; // Save for cond removal
j->ref.cond_guards[i]= keyuse->cond_guard;
+ if (!keyuse->val->maybe_null || keyuse->null_rejecting)
+ not_null_keyparts++;
/*
Set ref.null_rejecting to true only if we are going to inject a
"keyuse->val IS NOT NULL" predicate.
@@ -10829,12 +10832,18 @@ static bool create_ref_for_key(JOIN *join, JOIN_TAB *j,
ulong key_flags= j->table->actual_key_flags(keyinfo);
if (j->type == JT_CONST)
j->table->const_table= 1;
- else if (!((keyparts == keyinfo->user_defined_key_parts &&
- ((key_flags & (HA_NOSAME | HA_NULL_PART_KEY)) == HA_NOSAME)) ||
- (keyparts > keyinfo->user_defined_key_parts && // true only for extended keys
- MY_TEST(key_flags & HA_EXT_NOSAME) &&
- keyparts == keyinfo->ext_key_parts)) ||
- null_ref_key)
+ else if (!((keyparts == keyinfo->user_defined_key_parts &&
+ (
+ (key_flags & (HA_NOSAME | HA_NULL_PART_KEY)) == HA_NOSAME ||
+ /* Unique key and all keyparts are NULL rejecting */
+ ((key_flags & HA_NOSAME) && keyparts == not_null_keyparts)
+ )) ||
+ /* true only for extended keys */
+ (keyparts > keyinfo->user_defined_key_parts &&
+ MY_TEST(key_flags & HA_EXT_NOSAME) &&
+ keyparts == keyinfo->ext_key_parts)
+ ) ||
+ null_ref_key)
{
/* Must read with repeat */
j->type= null_ref_key ? JT_REF_OR_NULL : JT_REF;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index b272a0f44b5..1434e0d61d4 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -10108,7 +10108,7 @@ do_continue:;
*/
if (!(alter_info->flags & ~(ALTER_RENAME | ALTER_KEYS_ONOFF)) &&
alter_info->partition_flags == 0 &&
- alter_info->requested_algorithm !=
+ alter_info->algorithm(thd) !=
Alter_info::ALTER_TABLE_ALGORITHM_COPY) // No need to touch frm.
{
bool res;
@@ -10182,7 +10182,7 @@ do_continue:;
"LOCK=DEFAULT");
DBUG_RETURN(true);
}
- else if (alter_info->requested_algorithm !=
+ else if (alter_info->algorithm(thd) !=
Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT)
{
my_error(ER_ALTER_OPERATION_NOT_SUPPORTED_REASON, MYF(0),
@@ -10222,20 +10222,21 @@ do_continue:;
using in-place API.
*/
if ((thd->variables.alter_algorithm == Alter_info::ALTER_TABLE_ALGORITHM_COPY &&
- alter_info->requested_algorithm !=
+ alter_info->algorithm(thd) !=
Alter_info::ALTER_TABLE_ALGORITHM_INPLACE)
|| is_inplace_alter_impossible(table, create_info, alter_info)
|| IF_PARTITIONING((partition_changed &&
!(table->s->db_type()->partition_flags() & HA_USE_AUTO_PARTITION)), 0))
{
- if (alter_info->requested_algorithm ==
+ if (alter_info->algorithm(thd) ==
Alter_info::ALTER_TABLE_ALGORITHM_INPLACE)
{
my_error(ER_ALTER_OPERATION_NOT_SUPPORTED, MYF(0),
"ALGORITHM=INPLACE", "ALGORITHM=COPY");
DBUG_RETURN(true);
}
- alter_info->requested_algorithm= Alter_info::ALTER_TABLE_ALGORITHM_COPY;
+ alter_info->set_requested_algorithm(
+ Alter_info::ALTER_TABLE_ALGORITHM_COPY);
}
/*
@@ -10327,7 +10328,7 @@ do_continue:;
DBUG_RETURN(true);
}
- if (alter_info->requested_algorithm != Alter_info::ALTER_TABLE_ALGORITHM_COPY)
+ if (alter_info->algorithm(thd) != Alter_info::ALTER_TABLE_ALGORITHM_COPY)
{
Alter_inplace_info ha_alter_info(create_info, alter_info,
key_info, key_count,
@@ -10425,7 +10426,7 @@ do_continue:;
// If SHARED lock and no particular algorithm was requested, use COPY.
if (inplace_supported == HA_ALTER_INPLACE_EXCLUSIVE_LOCK &&
alter_info->requested_lock == Alter_info::ALTER_TABLE_LOCK_SHARED &&
- alter_info->requested_algorithm ==
+ alter_info->algorithm(thd) ==
Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT &&
thd->variables.alter_algorithm ==
Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT)
@@ -11368,7 +11369,8 @@ bool mysql_recreate_table(THD *thd, TABLE_LIST *table_list, bool table_copy)
alter_info.flags= (ALTER_CHANGE_COLUMN | ALTER_RECREATE);
if (table_copy)
- alter_info.requested_algorithm= Alter_info::ALTER_TABLE_ALGORITHM_COPY;
+ alter_info.set_requested_algorithm(
+ Alter_info::ALTER_TABLE_ALGORITHM_COPY);
bool res= mysql_alter_table(thd, &null_clex_str, &null_clex_str, &create_info,
table_list, &alter_info, 0,
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index 8d20193e518..b946b8a9ee0 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -7842,8 +7842,8 @@ opt_index_lock_algorithm:
alter_algorithm_option:
ALGORITHM_SYM opt_equal DEFAULT
{
- Lex->alter_info.requested_algorithm=
- Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT;
+ Lex->alter_info.set_requested_algorithm(
+ Alter_info::ALTER_TABLE_ALGORITHM_DEFAULT);
}
| ALGORITHM_SYM opt_equal ident
{
diff --git a/sql/win_tzname_data.h b/sql/win_tzname_data.h
index 28a14ab7c11..03197227f8e 100644
--- a/sql/win_tzname_data.h
+++ b/sql/win_tzname_data.h
@@ -23,13 +23,13 @@
{L"Haiti Standard Time","America/Port-au-Prince"},
{L"Cuba Standard Time","America/Havana"},
{L"US Eastern Standard Time","America/Indianapolis"},
+{L"Turks And Caicos Standard Time","America/Grand_Turk"},
{L"Paraguay Standard Time","America/Asuncion"},
{L"Atlantic Standard Time","America/Halifax"},
{L"Venezuela Standard Time","America/Caracas"},
{L"Central Brazilian Standard Time","America/Cuiaba"},
{L"SA Western Standard Time","America/La_Paz"},
{L"Pacific SA Standard Time","America/Santiago"},
-{L"Turks And Caicos Standard Time","America/Grand_Turk"},
{L"Newfoundland Standard Time","America/St_Johns"},
{L"Tocantins Standard Time","America/Araguaina"},
{L"E. South America Standard Time","America/Sao_Paulo"},
@@ -46,11 +46,11 @@
{L"UTC","Etc/GMT"},
{L"GMT Standard Time","Europe/London"},
{L"Greenwich Standard Time","Atlantic/Reykjavik"},
+{L"Sao Tome Standard Time","Africa/Sao_Tome"},
+{L"Morocco Standard Time","Africa/Casablanca"},
{L"W. Europe Standard Time","Europe/Berlin"},
{L"Central Europe Standard Time","Europe/Budapest"},
{L"Romance Standard Time","Europe/Paris"},
-{L"Morocco Standard Time","Africa/Casablanca"},
-{L"Sao Tome Standard Time","Africa/Sao_Tome"},
{L"Central European Standard Time","Europe/Warsaw"},
{L"W. Central Africa Standard Time","Africa/Lagos"},
{L"Jordan Standard Time","Asia/Amman"},
@@ -81,11 +81,13 @@
{L"Mauritius Standard Time","Indian/Mauritius"},
{L"Saratov Standard Time","Europe/Saratov"},
{L"Georgian Standard Time","Asia/Tbilisi"},
+{L"Volgograd Standard Time","Europe/Volgograd"},
{L"Caucasus Standard Time","Asia/Yerevan"},
{L"Afghanistan Standard Time","Asia/Kabul"},
{L"West Asia Standard Time","Asia/Tashkent"},
{L"Ekaterinburg Standard Time","Asia/Yekaterinburg"},
{L"Pakistan Standard Time","Asia/Karachi"},
+{L"Qyzylorda Standard Time","Asia/Qyzylorda"},
{L"India Standard Time","Asia/Calcutta"},
{L"Sri Lanka Standard Time","Asia/Colombo"},
{L"Nepal Standard Time","Asia/Katmandu"},