summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
Diffstat (limited to 'sql')
-rw-r--r--sql/CMakeLists.txt1
-rw-r--r--sql/handler.cc3
-rw-r--r--sql/log.cc3
-rw-r--r--sql/mysql_upgrade_service.cc4
-rw-r--r--sql/mysqld.cc8
-rw-r--r--sql/service_wsrep.cc8
-rw-r--r--sql/sql_alter.cc11
-rw-r--r--sql/sql_plugin_services.ic3
-rw-r--r--sql/sql_select.cc24
-rw-r--r--sql/sql_table.cc15
-rw-r--r--sql/sql_tvc.cc8
-rw-r--r--sql/sql_yacc.yy1
-rw-r--r--sql/wsrep_dummy.cc4
-rw-r--r--sql/wsrep_mysqld.cc20
-rw-r--r--sql/wsrep_mysqld.h2
-rw-r--r--sql/wsrep_sst.cc5
-rw-r--r--sql/wsrep_thd.h2
17 files changed, 68 insertions, 54 deletions
diff --git a/sql/CMakeLists.txt b/sql/CMakeLists.txt
index 642a931c0b3..c26d0450229 100644
--- a/sql/CMakeLists.txt
+++ b/sql/CMakeLists.txt
@@ -386,6 +386,7 @@ ADD_CUSTOM_TARGET(
${CMAKE_CURRENT_BINARY_DIR}/yy_mariadb.cc
${CMAKE_CURRENT_BINARY_DIR}/yy_oracle.cc
)
+ADD_DEPENDENCIES(sql GenServerSource)
IF(WIN32 OR HAVE_DLOPEN AND NOT DISABLE_SHARED)
ADD_LIBRARY(udf_example MODULE udf_example.c udf_example.def)
diff --git a/sql/handler.cc b/sql/handler.cc
index c0e330d22ec..3c75eb23088 100644
--- a/sql/handler.cc
+++ b/sql/handler.cc
@@ -7996,8 +7996,7 @@ bool Table_scope_and_contents_source_st::vers_check_system_fields(
{
List_iterator<Create_field> dup_it(alter_info->create_list);
for (Create_field *dup= dup_it++; !is_dup && dup != f; dup= dup_it++)
- is_dup= my_strcasecmp(default_charset_info,
- dup->field_name.str, f->field_name.str) == 0;
+ is_dup= Lex_ident(dup->field_name).streq(f->field_name);
}
if (!(f->flags & VERS_UPDATE_UNVERSIONED_FLAG) && !is_dup)
diff --git a/sql/log.cc b/sql/log.cc
index dadb0b6f5b0..0aec4144656 100644
--- a/sql/log.cc
+++ b/sql/log.cc
@@ -7971,6 +7971,8 @@ MYSQL_BIN_LOG::queue_for_group_commit(group_commit_entry *orig_entry)
cur= entry->thd->wait_for_commit_ptr;
}
+ result= orig_queue == NULL;
+
#ifdef WITH_WSREP
if (wsrep_is_active(entry->thd) &&
wsrep_run_commit_hook(entry->thd, entry->all))
@@ -7994,7 +7996,6 @@ MYSQL_BIN_LOG::queue_for_group_commit(group_commit_entry *orig_entry)
DBUG_PRINT("info", ("Queued for group commit as %s",
(orig_queue == NULL) ? "leader" : "participant"));
- result= orig_queue == NULL;
end:
if (backup_lock_released)
diff --git a/sql/mysql_upgrade_service.cc b/sql/mysql_upgrade_service.cc
index 19dbf93c7ce..7438ab131ea 100644
--- a/sql/mysql_upgrade_service.cc
+++ b/sql/mysql_upgrade_service.cc
@@ -549,8 +549,8 @@ int main(int argc, char **argv)
if (WaitForSingleObject(mysqld_process, 0) != WAIT_TIMEOUT)
die("mysqld.exe did not start");
- if (run_tool(P_WAIT, mysqladmin_path, "--protocol=pipe",
- socket_param, "ping", NULL) == 0)
+ if (run_tool(P_WAIT, mysqladmin_path, "--protocol=pipe", socket_param,
+ "ping", "--no-beep", NULL) == 0)
{
break;
}
diff --git a/sql/mysqld.cc b/sql/mysqld.cc
index e7a40b6eaa4..5775902c476 100644
--- a/sql/mysqld.cc
+++ b/sql/mysqld.cc
@@ -1339,12 +1339,13 @@ struct my_rnd_struct sql_rand; ///< used by sql_class.cc:THD::THD()
#ifndef EMBEDDED_LIBRARY
MYSQL_SOCKET unix_sock, base_ip_sock, extra_ip_sock;
+C_MODE_START
+#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
/**
Error reporter that buffer log messages.
@param level log message level
@param format log message format string
*/
-C_MODE_START
static void buffered_option_error_reporter(enum loglevel level,
const char *format, ...)
{
@@ -1356,6 +1357,7 @@ static void buffered_option_error_reporter(enum loglevel level,
va_end(args);
buffered_logs.buffer(level, buffer);
}
+#endif
/**
@@ -5287,7 +5289,7 @@ int mysqld_main(int argc, char **argv)
Initialize the array of performance schema instrument configurations.
*/
init_pfs_instrument_array();
-#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
+
/*
Logs generated while parsing the command line
options are buffered and printed later.
@@ -5295,7 +5297,7 @@ int mysqld_main(int argc, char **argv)
buffered_logs.init();
my_getopt_error_reporter= buffered_option_error_reporter;
my_charset_error_reporter= buffered_option_error_reporter;
-#ifdef WITH_PERFSCHEMA_STORAGE_ENGINE
+
pfs_param.m_pfs_instrument= const_cast<char*>("");
#endif /* WITH_PERFSCHEMA_STORAGE_ENGINE */
my_timer_init(&sys_timer_info);
diff --git a/sql/service_wsrep.cc b/sql/service_wsrep.cc
index c4951f6d200..b32309642af 100644
--- a/sql/service_wsrep.cc
+++ b/sql/service_wsrep.cc
@@ -417,3 +417,11 @@ extern "C" void wsrep_report_bf_lock_wait(const THD *thd,
wsrep_thd_query(thd));
}
}
+
+extern "C" void wsrep_thd_set_PA_unsafe(THD *thd)
+{
+ if (thd && thd->wsrep_cs().mark_transaction_pa_unsafe())
+ {
+ WSREP_DEBUG("session does not have active transaction, can not mark as PA unsafe");
+ }
+}
diff --git a/sql/sql_alter.cc b/sql/sql_alter.cc
index 8562643df97..65f5f347a0a 100644
--- a/sql/sql_alter.cc
+++ b/sql/sql_alter.cc
@@ -503,7 +503,11 @@ bool Sql_cmd_alter_table::execute(THD *thd)
lex->name.str ? lex->name.str
: first_table->table_name.str,
first_table, &alter_info, &keys,
- used_engine ? &create_info : nullptr);
+ used_engine ? &create_info : nullptr)
+ {
+ WSREP_WARN("ALTER TABLE isolation failure");
+ DBUG_RETURN(TRUE);
+ }
thd->variables.auto_increment_offset = 1;
thd->variables.auto_increment_increment = 1;
@@ -545,11 +549,6 @@ bool Sql_cmd_alter_table::execute(THD *thd)
lex->ignore, lex->if_exists());
DBUG_RETURN(result);
-#ifdef WITH_WSREP
-wsrep_error_label:
- WSREP_WARN("ALTER TABLE isolation failure");
- DBUG_RETURN(TRUE);
-#endif
}
bool Sql_cmd_discard_import_tablespace::execute(THD *thd)
diff --git a/sql/sql_plugin_services.ic b/sql/sql_plugin_services.ic
index 8f2296160e6..c6f07158003 100644
--- a/sql/sql_plugin_services.ic
+++ b/sql/sql_plugin_services.ic
@@ -180,7 +180,8 @@ static struct wsrep_service_st wsrep_handler = {
wsrep_thd_set_wsrep_aborter,
wsrep_report_bf_lock_wait,
wsrep_thd_kill_LOCK,
- wsrep_thd_kill_UNLOCK
+ wsrep_thd_kill_UNLOCK,
+ wsrep_thd_set_PA_unsafe
};
static struct thd_specifics_service_st thd_specifics_handler=
diff --git a/sql/sql_select.cc b/sql/sql_select.cc
index f3ccf56c204..cb391314603 100644
--- a/sql/sql_select.cc
+++ b/sql/sql_select.cc
@@ -11500,16 +11500,20 @@ make_join_select(JOIN *join,SQL_SELECT *select,COND *cond)
trace_const_cond.add("condition_on_constant_tables", const_cond);
if (const_cond->is_expensive())
{
- trace_const_cond.add("evalualted", "false")
+ trace_const_cond.add("evaluated", "false")
.add("cause", "expensive cond");
}
else
{
- const bool const_cond_result = const_cond->val_int() != 0;
+ bool const_cond_result;
+ {
+ Json_writer_array a(thd, "computing_condition");
+ const_cond_result= const_cond->val_int() != 0;
+ }
if (!const_cond_result)
{
DBUG_PRINT("info",("Found impossible WHERE condition"));
- trace_const_cond.add("evalualted", "true")
+ trace_const_cond.add("evaluated", "true")
.add("found", "impossible where");
join->exec_const_cond= NULL;
DBUG_RETURN(1);
@@ -19331,6 +19335,8 @@ bool Create_tmp_table::finalize(THD *thd,
MEM_CHECK_DEFINED(table->record[0], table->s->reclength);
MEM_CHECK_DEFINED(share->default_values, table->s->reclength);
+ empty_record(table);
+ table->status= STATUS_NO_RECORD;
thd->mem_root= mem_root_save;
DBUG_RETURN(false);
@@ -20530,7 +20536,9 @@ bool instantiate_tmp_table(TABLE *table, KEY *keyinfo,
if (create_internal_tmp_table(table, keyinfo, start_recinfo, recinfo,
options))
return TRUE;
- MEM_CHECK_DEFINED(table->record[0], table->s->reclength);
+ // Make empty record so random data is not written to disk
+ empty_record(table);
+ table->status= STATUS_NO_RECORD;
}
if (open_tmp_table(table))
return TRUE;
@@ -24029,7 +24037,15 @@ check_reverse_order:
}
}
else if (select && select->quick)
+ {
+ /* Cancel "Range checked for each record" */
+ if (tab->use_quick == 2)
+ {
+ tab->use_quick= 1;
+ tab->read_first_record= join_init_read_record;
+ }
select->quick->need_sorted_output();
+ }
if (tab->type == JT_EQ_REF)
tab->read_record.unlock_row= join_read_key_unlock_row;
diff --git a/sql/sql_table.cc b/sql/sql_table.cc
index 42effe31465..6d8ceb348dc 100644
--- a/sql/sql_table.cc
+++ b/sql/sql_table.cc
@@ -12231,8 +12231,14 @@ bool Sql_cmd_create_table_like::execute(THD *thd)
(!thd->is_current_stmt_binlog_format_row() ||
!create_info.tmp_table()))
{
- WSREP_TO_ISOLATION_BEGIN_CREATE(create_table->db.str, create_table->table_name.str,
- create_table, &create_info);
+#ifdef WITH_WSREP
+ WSREP_TO_ISOLATION_BEGIN_ALTER(create_table->db.str, create_table->table_name.str,
+ first_table, &alter_info, NULL, &create_info)
+ {
+ WSREP_WARN("CREATE TABLE isolation failure");
+ DBUG_RETURN(true);
+ }
+#endif /* WITH_WSREP */
}
/* Regular CREATE TABLE */
res= mysql_create_table(thd, create_table, &create_info, &alter_info);
@@ -12254,9 +12260,4 @@ bool Sql_cmd_create_table_like::execute(THD *thd)
end_with_restore_list:
DBUG_RETURN(res);
-
-#ifdef WITH_WSREP
-wsrep_error_label:
- DBUG_RETURN(true);
-#endif
}
diff --git a/sql/sql_tvc.cc b/sql/sql_tvc.cc
index 6984fdd6bcf..9b9b07d55cd 100644
--- a/sql/sql_tvc.cc
+++ b/sql/sql_tvc.cc
@@ -570,7 +570,10 @@ bool Item_func_in::create_value_list_for_tvc(THD *thd,
if (is_list_of_rows)
{
- Item_row *row_list= (Item_row *)(args[i]);
+ Item_row *row_list= (Item_row *)(args[i]->build_clone(thd));
+
+ if (!row_list)
+ return true;
for (uint j=0; j < row_list->cols(); j++)
{
@@ -592,7 +595,8 @@ bool Item_func_in::create_value_list_for_tvc(THD *thd,
sprintf(col_name, "_col_%i", 1);
args[i]->set_name(thd, col_name, strlen(col_name), thd->charset());
}
- if (tvc_value->push_back(args[i]->real_item()))
+ Item *arg_clone= args[i]->build_clone(thd);
+ if (!arg_clone || tvc_value->push_back(arg_clone))
return true;
}
diff --git a/sql/sql_yacc.yy b/sql/sql_yacc.yy
index eae83f3ee18..93663e32158 100644
--- a/sql/sql_yacc.yy
+++ b/sql/sql_yacc.yy
@@ -6032,6 +6032,7 @@ field_type_or_serial:
Lex->last_field->set_handler(&type_handler_ulonglong);
Lex->last_field->flags|= AUTO_INCREMENT_FLAG | NOT_NULL_FLAG
| UNSIGNED_FLAG | UNIQUE_KEY_FLAG;
+ Lex->alter_info.flags|= ALTER_ADD_INDEX;
}
opt_serial_attribute
;
diff --git a/sql/wsrep_dummy.cc b/sql/wsrep_dummy.cc
index 68cc3cf4ae4..ac14fc4597a 100644
--- a/sql/wsrep_dummy.cc
+++ b/sql/wsrep_dummy.cc
@@ -154,3 +154,7 @@ bool wsrep_thd_set_wsrep_aborter(THD*, THD*)
void wsrep_report_bf_lock_wait(const THD*,
unsigned long long)
{}
+
+void wsrep_thd_set_PA_unsafe(THD*)
+{}
+
diff --git a/sql/wsrep_mysqld.cc b/sql/wsrep_mysqld.cc
index 9502309de36..31265a8b689 100644
--- a/sql/wsrep_mysqld.cc
+++ b/sql/wsrep_mysqld.cc
@@ -293,7 +293,7 @@ void WSREP_LOG(void (*fun)(const char* fmt, ...), const char* fmt, ...)
char msg[128] = {'\0'};
va_list arglist;
va_start(arglist, fmt);
- int n= vsnprintf(msg, sizeof(msg) - 1, fmt, arglist);
+ int n= vsnprintf(msg, sizeof(msg), fmt, arglist);
va_end(arglist);
if (n < 0)
{
@@ -1490,7 +1490,7 @@ static bool wsrep_prepare_keys_for_isolation(THD* thd,
goto err;
}
- if (alter_info && (alter_info->flags & (ALTER_ADD_FOREIGN_KEY)))
+ if (alter_info)
{
if (!wsrep_prepare_keys_for_alter_add_fk(table_list->db.str, alter_info, ka))
goto err;
@@ -1623,7 +1623,7 @@ wsrep::key_array wsrep_prepare_keys_for_toi(const char *db,
ret.push_back(wsrep_prepare_key_for_toi(table->db.str, table->table_name.str,
wsrep::key::exclusive));
}
- if (alter_info && (alter_info->flags & ALTER_ADD_FOREIGN_KEY))
+ if (alter_info)
{
wsrep::key_array fk(wsrep_prepare_keys_for_alter_add_fk(table_list->db.str, alter_info));
if (!fk.empty())
@@ -2850,20 +2850,6 @@ void wsrep_wait_appliers_close(THD *thd)
*/
}
-void
-wsrep_last_committed_id(wsrep_gtid_t* gtid)
-{
- wsrep::gtid ret= Wsrep_server_state::instance().last_committed_gtid();
- memcpy(gtid->uuid.data, ret.id().data(), sizeof(gtid->uuid.data));
- gtid->seqno= ret.seqno().get();
-}
-
-void
-wsrep_node_uuid(wsrep_uuid_t& uuid)
-{
- uuid= node_uuid;
-}
-
int wsrep_must_ignore_error(THD* thd)
{
const int error= thd->get_stmt_da()->sql_errno();
diff --git a/sql/wsrep_mysqld.h b/sql/wsrep_mysqld.h
index 4ca180213a5..79ec6463ce3 100644
--- a/sql/wsrep_mysqld.h
+++ b/sql/wsrep_mysqld.h
@@ -214,7 +214,6 @@ extern bool wsrep_must_sync_wait (THD* thd, uint mask= WSREP_SYNC_WAIT_BEFORE_RE
extern bool wsrep_sync_wait (THD* thd, uint mask= WSREP_SYNC_WAIT_BEFORE_READ);
extern enum wsrep::provider::status
wsrep_sync_wait_upto (THD* thd, wsrep_gtid_t* upto, int timeout);
-extern void wsrep_last_committed_id (wsrep_gtid_t* gtid);
extern int wsrep_check_opts();
extern void wsrep_prepend_PATH (const char* path);
extern bool wsrep_append_fk_parent_table(THD* thd, TABLE_LIST* table, wsrep::key_array* keys);
@@ -394,7 +393,6 @@ bool wsrep_node_is_synced();
void wsrep_init_SR();
void wsrep_verify_SE_checkpoint(const wsrep_uuid_t& uuid, wsrep_seqno_t seqno);
int wsrep_replay_from_SR_store(THD*, const wsrep_trx_meta_t&);
-void wsrep_node_uuid(wsrep_uuid_t&);
class Log_event;
int wsrep_ignored_error_code(Log_event* ev, int error);
diff --git a/sql/wsrep_sst.cc b/sql/wsrep_sst.cc
index 862a446c70f..2d6d8bc4165 100644
--- a/sql/wsrep_sst.cc
+++ b/sql/wsrep_sst.cc
@@ -1896,11 +1896,6 @@ int wsrep_sst_donate(const std::string& msg,
const wsrep::gtid& current_gtid,
const bool bypass)
{
- /* This will be reset when sync callback is called.
- * Should we set wsrep_ready to FALSE here too? */
-
- wsrep_config_state->set(wsrep::server_state::s_donor);
-
const char* method= msg.data();
size_t method_len= strlen (method);
diff --git a/sql/wsrep_thd.h b/sql/wsrep_thd.h
index 9d8e4493b34..73c949cb6d5 100644
--- a/sql/wsrep_thd.h
+++ b/sql/wsrep_thd.h
@@ -90,8 +90,6 @@ void wsrep_create_rollbacker();
bool wsrep_bf_abort(THD* bf_thd, THD* victim_thd);
int wsrep_abort_thd(THD *bf_thd_ptr, THD *victim_thd_ptr, my_bool signal);
-extern void wsrep_thd_set_PA_safe(void *thd_ptr, my_bool safe);
-
/*
Helper methods to deal with thread local storage.
The purpose of these methods is to hide the details of thread