diff options
Diffstat (limited to 'sql')
-rw-r--r-- | sql/CMakeLists.txt | 1 | ||||
-rw-r--r-- | sql/handler.cc | 3 | ||||
-rw-r--r-- | sql/log.cc | 3 | ||||
-rw-r--r-- | sql/mysql_upgrade_service.cc | 4 | ||||
-rw-r--r-- | sql/mysqld.cc | 8 | ||||
-rw-r--r-- | sql/service_wsrep.cc | 8 | ||||
-rw-r--r-- | sql/sql_alter.cc | 11 | ||||
-rw-r--r-- | sql/sql_plugin_services.ic | 3 | ||||
-rw-r--r-- | sql/sql_select.cc | 24 | ||||
-rw-r--r-- | sql/sql_table.cc | 15 | ||||
-rw-r--r-- | sql/sql_tvc.cc | 8 | ||||
-rw-r--r-- | sql/sql_yacc.yy | 1 | ||||
-rw-r--r-- | sql/wsrep_dummy.cc | 4 | ||||
-rw-r--r-- | sql/wsrep_mysqld.cc | 20 | ||||
-rw-r--r-- | sql/wsrep_mysqld.h | 2 | ||||
-rw-r--r-- | sql/wsrep_sst.cc | 5 | ||||
-rw-r--r-- | sql/wsrep_thd.h | 2 |
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 |