1 /* Copyright (c) 2010, 2021, Oracle and/or its affiliates.
2 
3    This program is free software; you can redistribute it and/or modify
4    it under the terms of the GNU General Public License, version 2.0,
5    as published by the Free Software Foundation.
6 
7    This program is also distributed with certain software (including
8    but not limited to OpenSSL) that is licensed under separate terms,
9    as designated in a particular file or component or in included license
10    documentation.  The authors of MySQL hereby grant you an additional
11    permission to link the program and your derivative works with the
12    separately licensed software that they have included with MySQL.
13 
14    Without limiting anything contained in the foregoing, this file,
15    which is part of C Driver for MySQL (Connector/C), is also subject to the
16    Universal FOSS Exception, version 1.0, a copy of which can be found at
17    http://oss.oracle.com/licenses/universal-foss-exception.
18 
19    This program is distributed in the hope that it will be useful,
20    but WITHOUT ANY WARRANTY; without even the implied warranty of
21    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
22    GNU General Public License, version 2.0, for more details.
23 
24    You should have received a copy of the GNU General Public License
25    along with this program; if not, write to the Free Software
26    Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA */
27 
28 #ifndef MYSQLD_INCLUDED
29 #define MYSQLD_INCLUDED
30 
31 #include "my_global.h" /* MYSQL_PLUGIN_IMPORT, FN_REFLEN, FN_EXTLEN */
32 #include "my_bitmap.h"                     /* MY_BITMAP */
33 #include "my_decimal.h"                         /* my_decimal */
34 #include "mysql_com.h"                     /* SERVER_VERSION_LENGTH */
35 #include "my_atomic.h"                     /* my_atomic_add64 */
36 #include "sql_cmd.h"                       /* SQLCOM_END */
37 #include "my_thread_local.h"               /* my_get_thread_local */
38 #include "my_thread.h"                     /* my_thread_attr_t */
39 #include "atomic_class.h"                  /* Atomic_int32 */
40 
41 class THD;
42 struct handlerton;
43 class Time_zone;
44 template <uint default_width> class Bitmap;
45 
46 typedef struct st_mysql_const_lex_string LEX_CSTRING;
47 typedef struct st_mysql_show_var SHOW_VAR;
48 
49 /*
50   This forward declaration is used from C files where the real
51   definition is included before.  Since C does not allow repeated
52   typedef declarations, even when identical, the definition may not be
53   repeated.
54 */
55 #ifndef CHARSET_INFO_DEFINED
56 typedef struct charset_info_st CHARSET_INFO;
57 #endif  /* CHARSET_INFO_DEFINED */
58 
59 #if MAX_INDEXES <= 64
60 typedef Bitmap<64>  key_map;          /* Used for finding keys */
61 #elif MAX_INDEXES > 255
62 #error "MAX_INDEXES values greater than 255 is not supported."
63 #else
64 typedef Bitmap<((MAX_INDEXES+7)/8*8)> key_map; /* Used for finding keys */
65 #endif
66 
67 	/* Bits from testflag */
68 #define TEST_PRINT_CACHED_TABLES 1
69 #define TEST_NO_KEY_GROUP	 2
70 #define TEST_MIT_THREAD		4
71 /*
72   TEST_BLOCKING is made obsolete and is not used any
73   where in the code base and is retained here so that
74   the other bit flag values are not changed.
75 */
76 #define OBSOLETE_TEST_BLOCKING	8
77 #define TEST_KEEP_TMP_TABLES	16
78 #define TEST_READCHECK		64	/**< Force use of readcheck */
79 #define TEST_NO_EXTRA		128
80 #define TEST_CORE_ON_SIGNAL	256	/**< Give core if signal */
81 #define TEST_NO_STACKTRACE	512
82 #define TEST_SIGINT	        1024    /**< Allow sigint on threads */
83 #define TEST_SYNCHRONIZATION    2048    /**< get server to do sleep in
84                                            some places */
85 #define TEST_DO_QUICK_LEAK_CHECK 4096   /**< Do Valgrind leak check for
86                                            each command. */
87 
88 #define SPECIAL_NO_NEW_FUNC	2		/* Skip new functions */
89 #define SPECIAL_SKIP_SHOW_DB    4               /* Don't allow 'show db' */
90 #define SPECIAL_NO_RESOLVE     64		/* Don't use gethostname */
91 #define SPECIAL_NO_HOST_CACHE	512		/* Don't cache hosts */
92 #define SPECIAL_SHORT_LOG_FORMAT 1024
93 
94 /* Function prototypes */
95 #ifndef EMBEDDED_LIBRARY
96 void kill_mysql(void);
97 #endif
98 void refresh_status(THD *thd);
99 bool is_secure_file_path(char *path);
100 int handle_early_options();
101 void adjust_related_options(ulong *requested_open_files);
102 ulong sql_rnd_with_mutex();
103 
104 // These are needed for unit testing.
105 void set_remaining_args(int argc, char **argv);
106 int init_common_variables();
107 void my_init_signals();
108 bool gtid_server_init();
109 void gtid_server_cleanup();
110 const char *fixup_enforce_gtid_consistency_command_line(char *value_arg);
111 
112 extern "C" MYSQL_PLUGIN_IMPORT CHARSET_INFO *system_charset_info;
113 extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *files_charset_info ;
114 extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *national_charset_info;
115 extern MYSQL_PLUGIN_IMPORT CHARSET_INFO *table_alias_charset;
116 
117 enum enum_server_operational_state
118 {
119   SERVER_BOOTING,      /* Server is not operational. It is starting */
120   SERVER_OPERATING,    /* Server is fully initialized and operating */
121   SERVER_SHUTTING_DOWN /* erver is shutting down */
122 };
123 enum_server_operational_state get_server_state();
124 
125 /**
126   Character set of the buildin error messages loaded from errmsg.sys.
127 */
128 extern CHARSET_INFO *error_message_charset_info;
129 
130 extern CHARSET_INFO *character_set_filesystem;
131 
132 extern MY_BITMAP temp_pool;
133 extern bool opt_large_files, server_id_supplied;
134 extern bool opt_update_log, opt_bin_log;
135 extern my_bool opt_log_slave_updates;
136 extern my_bool opt_log_unsafe_statements;
137 extern bool opt_general_log, opt_slow_log, opt_general_log_raw;
138 extern my_bool opt_backup_history_log;
139 extern my_bool opt_backup_progress_log;
140 extern ulonglong log_output_options;
141 extern ulong log_backup_output_options;
142 extern my_bool opt_log_queries_not_using_indexes;
143 extern ulong opt_log_throttle_queries_not_using_indexes;
144 extern bool opt_disable_networking, opt_skip_show_db;
145 extern bool opt_skip_name_resolve;
146 extern my_bool opt_help;
147 extern my_bool opt_verbose;
148 extern bool opt_ignore_builtin_innodb;
149 extern my_bool opt_character_set_client_handshake;
150 extern MYSQL_PLUGIN_IMPORT bool volatile abort_loop;
151 extern my_bool opt_bootstrap, opt_initialize;
152 extern my_bool opt_safe_user_create;
153 extern my_bool opt_safe_show_db, opt_local_infile, opt_myisam_use_mmap;
154 extern my_bool opt_slave_compressed_protocol, use_temp_pool;
155 extern ulong slave_exec_mode_options;
156 extern ulonglong slave_type_conversions_options;
157 extern my_bool read_only, opt_readonly;
158 extern my_bool super_read_only, opt_super_readonly;
159 extern my_bool lower_case_file_system;
160 extern ulonglong slave_rows_search_algorithms_options;
161 extern my_bool opt_require_secure_transport;
162 
163 #ifdef HAVE_REPLICATION
164 extern my_bool opt_slave_preserve_commit_order;
165 #endif
166 
167 #ifndef NDEBUG
168 extern uint slave_rows_last_search_algorithm_used;
169 #endif
170 extern ulong mts_parallel_option;
171 extern my_bool opt_enable_named_pipe, opt_sync_frm, opt_allow_suspicious_udfs;
172 #ifdef _WIN32
173 extern mysql_rwlock_t LOCK_named_pipe_full_access_group;
174 extern char *named_pipe_full_access_group;
175 #endif
176 extern my_bool opt_secure_auth;
177 extern char* opt_secure_file_priv;
178 extern char* opt_secure_backup_file_priv;
179 extern size_t opt_secure_backup_file_priv_len;
180 extern my_bool opt_log_slow_admin_statements, opt_log_slow_slave_statements;
181 extern my_bool sp_automatic_privileges, opt_noacl;
182 extern my_bool opt_old_style_user_limits, trust_function_creators;
183 extern my_bool check_proxy_users, mysql_native_password_proxy_users, sha256_password_proxy_users;
184 extern uint opt_crash_binlog_innodb;
185 extern char *shared_memory_base_name, *mysqld_unix_port;
186 extern my_bool opt_enable_shared_memory;
187 extern char *default_tz_name;
188 extern Time_zone *default_tz;
189 extern char *default_storage_engine;
190 extern char *default_tmp_storage_engine;
191 extern ulong internal_tmp_disk_storage_engine;
192 extern bool opt_endinfo, using_udf_functions;
193 extern my_bool locked_in_memory;
194 extern bool opt_using_transactions;
195 extern ulong max_long_data_size;
196 extern ulong current_pid;
197 extern ulong expire_logs_days;
198 extern my_bool relay_log_recovery;
199 extern uint sync_binlog_period, sync_relaylog_period,
200             sync_relayloginfo_period, sync_masterinfo_period,
201             opt_mts_checkpoint_period, opt_mts_checkpoint_group;
202 extern ulong opt_tc_log_size, tc_log_max_pages_used, tc_log_page_size;
203 extern ulong tc_log_page_waits;
204 extern my_bool relay_log_purge, opt_innodb_safe_binlog, opt_innodb;
205 extern my_bool relay_log_recovery;
206 extern my_bool offline_mode;
207 extern my_bool opt_log_builtin_as_identified_by_password;
208 extern uint test_flags,select_errors,ha_open_options;
209 extern uint protocol_version, mysqld_port, dropping_tables;
210 extern ulong delay_key_write_options;
211 extern ulong opt_log_timestamps;
212 extern const char *timestamp_type_names[];
213 extern char *opt_general_logname, *opt_slow_logname, *opt_bin_logname,
214             *opt_relay_logname;
215 extern char *opt_backup_history_logname, *opt_backup_progress_logname,
216             *opt_backup_settings_name;
217 extern const char *log_output_str;
218 extern const char *log_backup_output_str;
219 extern char *mysql_home_ptr, *pidfile_name_ptr;
220 extern char *default_auth_plugin;
221 extern uint default_password_lifetime;
222 extern char *my_bind_addr_str;
223 extern char glob_hostname[FN_REFLEN], mysql_home[FN_REFLEN];
224 extern char pidfile_name[FN_REFLEN], system_time_zone[30], *opt_init_file;
225 extern char default_logfile_name[FN_REFLEN];
226 extern char *opt_tc_log_file;
227 /*Move UUID_LENGTH from item_strfunc.h*/
228 #define UUID_LENGTH (8+1+4+1+4+1+4+1+12)
229 extern char server_uuid[UUID_LENGTH+1];
230 extern const char *server_uuid_ptr;
231 extern const double log_10[309];
232 extern ulonglong keybuff_size;
233 extern ulonglong thd_startup_options;
234 extern ulong binlog_cache_use, binlog_cache_disk_use;
235 extern ulong binlog_stmt_cache_use, binlog_stmt_cache_disk_use;
236 extern ulong aborted_threads;
237 extern ulong delayed_insert_timeout;
238 extern ulong delayed_insert_limit, delayed_queue_size;
239 extern ulong delayed_insert_threads, delayed_insert_writes;
240 extern ulong delayed_rows_in_use,delayed_insert_errors;
241 extern Atomic_int32 slave_open_temp_tables;
242 extern ulong query_cache_size, query_cache_min_res_unit;
243 extern ulong slow_launch_time;
244 extern ulong table_cache_size, table_def_size;
245 extern ulong table_cache_size_per_instance, table_cache_instances;
246 extern MYSQL_PLUGIN_IMPORT ulong max_connections;
247 extern ulong max_digest_length;
248 extern ulong max_connect_errors, connect_timeout;
249 extern my_bool opt_slave_allow_batching;
250 extern my_bool allow_slave_start;
251 extern LEX_CSTRING reason_slave_blocked;
252 extern ulong slave_trans_retries;
253 extern uint  slave_net_timeout;
254 extern ulong opt_mts_slave_parallel_workers;
255 extern ulonglong opt_mts_pending_jobs_size_max;
256 extern uint max_user_connections;
257 extern ulong rpl_stop_slave_timeout;
258 extern my_bool log_bin_use_v1_row_events;
259 extern ulong what_to_log,flush_time;
260 extern ulong max_prepared_stmt_count, prepared_stmt_count;
261 extern ulong open_files_limit;
262 extern ulong binlog_cache_size, binlog_stmt_cache_size;
263 extern ulonglong max_binlog_cache_size, max_binlog_stmt_cache_size;
264 extern int32 opt_binlog_max_flush_queue_time;
265 extern long opt_binlog_group_commit_sync_delay;
266 extern ulong opt_binlog_group_commit_sync_no_delay_count;
267 extern ulong max_binlog_size, max_relay_log_size;
268 extern ulong slave_max_allowed_packet;
269 extern ulong opt_binlog_rows_event_max_size;
270 extern ulong binlog_checksum_options;
271 extern const char *binlog_checksum_type_names[];
272 extern my_bool opt_master_verify_checksum;
273 extern my_bool opt_slave_sql_verify_checksum;
274 extern uint32 gtid_executed_compression_period;
275 extern my_bool binlog_gtid_simple_recovery;
276 extern ulong binlog_error_action;
277 extern ulong locked_account_connection_count;
278 enum enum_binlog_error_action
279 {
280   /// Ignore the error and let server continue without binlogging
281   IGNORE_ERROR= 0,
282   /// Abort the server
283   ABORT_SERVER= 1
284 };
285 extern const char *binlog_error_action_list[];
286 
287 extern ulong stored_program_cache_size;
288 extern ulong back_log;
289 extern char language[FN_REFLEN];
290 extern "C" MYSQL_PLUGIN_IMPORT ulong server_id;
291 extern time_t server_start_time, flush_status_time;
292 extern char *opt_mysql_tmpdir, mysql_charsets_dir[];
293 extern size_t mysql_unpacked_real_data_home_len;
294 extern MYSQL_PLUGIN_IMPORT MY_TMPDIR mysql_tmpdir_list;
295 extern const char *show_comp_option_name[];
296 extern const char *first_keyword, *binary_keyword;
297 extern MYSQL_PLUGIN_IMPORT const char  *my_localhost;
298 extern const char *myisam_recover_options_str;
299 extern const char *in_left_expr_name, *in_additional_cond, *in_having_cond;
300 extern SHOW_VAR status_vars[];
301 extern struct system_variables max_system_variables;
302 extern struct system_status_var global_status_var;
303 extern struct rand_struct sql_rand;
304 extern const char *opt_date_time_formats[];
305 extern handlerton *myisam_hton;
306 extern handlerton *heap_hton;
307 extern handlerton *innodb_hton;
308 extern uint opt_server_id_bits;
309 extern ulong opt_server_id_mask;
310 #ifdef WITH_NDBCLUSTER_STORAGE_ENGINE
311 /* engine specific hook, to be made generic */
312 extern int(*ndb_wait_setup_func)(ulong);
313 extern ulong opt_ndb_wait_setup;
314 #endif
315 extern const char *load_default_groups[];
316 extern struct my_option my_long_options[];
317 extern struct my_option my_long_early_options[];
318 extern bool mysqld_server_started;
319 #ifdef WITH_WSREP
320 extern int mysqld_server_initialized;
321 #endif /* WITH_WSREP */
322 extern "C" MYSQL_PLUGIN_IMPORT int orig_argc;
323 extern "C" MYSQL_PLUGIN_IMPORT char **orig_argv;
324 extern my_thread_attr_t connection_attrib;
325 extern my_bool old_mode;
326 extern my_bool avoid_temporal_upgrade;
327 extern LEX_STRING opt_init_connect, opt_init_slave;
328 extern char err_shared_dir[];
329 extern my_decimal decimal_zero;
330 #ifndef EMBEDDED_LIBRARY
331 extern ulong connection_errors_internal;
332 extern ulong connection_errors_peer_addr;
333 #endif
334 extern ulong log_warnings;
335 extern bool  opt_log_syslog_enable;
336 extern char *opt_log_syslog_tag;
337 #ifndef _WIN32
338 extern bool  opt_log_syslog_include_pid;
339 extern char *opt_log_syslog_facility;
340 #endif
341 /** The size of the host_cache. */
342 extern uint host_cache_size;
343 extern ulong log_error_verbosity;
344 
345 extern bool opt_keyring_operations;
346 extern char *opt_keyring_migration_user;
347 extern char *opt_keyring_migration_host;
348 extern char *opt_keyring_migration_password;
349 extern char *opt_keyring_migration_socket;
350 extern char *opt_keyring_migration_source;
351 extern char *opt_keyring_migration_destination;
352 extern ulong opt_keyring_migration_port;
353 /**
354   Variable to check if connection related options are set
355   as part of keyring migration.
356 */
357 extern bool migrate_connect_options;
358 
359 /** System variable show_compatibility_56. */
360 extern my_bool show_compatibility_56;
361 
362 #if defined(EMBEDDED_LIBRARY)
363 extern ulong max_allowed_packet;
364 extern ulong net_buffer_length;
365 #endif
366 
367 extern LEX_CSTRING sql_statement_names[(uint) SQLCOM_END + 1];
368 
369 /*
370   THR_MALLOC is a key which will be used to set/get MEM_ROOT** for a thread,
371   using my_set_thread_local()/my_get_thread_local().
372 */
373 extern thread_local_key_t THR_MALLOC;
374 extern bool THR_MALLOC_initialized;
375 
my_thread_get_THR_MALLOC()376 static inline MEM_ROOT ** my_thread_get_THR_MALLOC()
377 {
378   assert(THR_MALLOC_initialized);
379   return (MEM_ROOT**) my_get_thread_local(THR_MALLOC);
380 }
381 
my_thread_set_THR_MALLOC(MEM_ROOT ** hdl)382 static inline int my_thread_set_THR_MALLOC(MEM_ROOT ** hdl)
383 {
384   assert(THR_MALLOC_initialized);
385   return my_set_thread_local(THR_MALLOC, hdl);
386 }
387 
388 /*
389   THR_THD is a key which will be used to set/get THD* for a thread,
390   using my_set_thread_local()/my_get_thread_local().
391 */
392 extern MYSQL_PLUGIN_IMPORT thread_local_key_t THR_THD;
393 extern bool THR_THD_initialized;
394 
my_thread_get_THR_THD()395 static inline THD * my_thread_get_THR_THD()
396 {
397   if (!THR_THD_initialized) return NULL;
398   return (THD*)my_get_thread_local(THR_THD);
399 }
400 
my_thread_set_THR_THD(THD * thd)401 static inline int my_thread_set_THR_THD(THD *thd)
402 {
403   assert(THR_THD_initialized);
404   return my_set_thread_local(THR_THD, thd);
405 }
406 
407 /**
408   Set m_opt_tracking_mode with a user given value associated with sysvar.
409 */
410 void set_mysqld_opt_tracking_mode();
411 
412 #ifdef HAVE_PSI_INTERFACE
413 
414 C_MODE_START
415 
416 extern PSI_mutex_key key_LOCK_tc;
417 
418 #ifdef HAVE_OPENSSL
419 extern PSI_mutex_key key_LOCK_des_key_file;
420 #endif
421 
422 extern PSI_mutex_key key_BINLOG_LOCK_commit;
423 extern PSI_mutex_key key_BINLOG_LOCK_commit_queue;
424 extern PSI_mutex_key key_BINLOG_LOCK_done;
425 extern PSI_mutex_key key_BINLOG_LOCK_flush_queue;
426 extern PSI_mutex_key key_BINLOG_LOCK_index;
427 extern PSI_mutex_key key_BINLOG_LOCK_log;
428 extern PSI_mutex_key key_BINLOG_LOCK_binlog_end_pos;
429 extern PSI_mutex_key key_BINLOG_LOCK_sync;
430 extern PSI_mutex_key key_BINLOG_LOCK_sync_queue;
431 extern PSI_mutex_key key_BINLOG_LOCK_xids;
432 extern PSI_mutex_key
433   key_hash_filo_lock,
434   key_LOCK_crypt, key_LOCK_error_log,
435   key_LOCK_gdl, key_LOCK_global_system_variables,
436   key_LOCK_lock_db, key_LOCK_logger, key_LOCK_manager,
437   key_LOCK_prepared_stmt_count,
438   key_LOCK_server_started, key_LOCK_status,
439   key_LOCK_sql_slave_skip_counter,
440   key_LOCK_slave_net_timeout,
441   key_LOCK_slave_trans_dep_tracker,
442   key_LOCK_table_share, key_LOCK_thd_data, key_LOCK_thd_sysvar,
443   key_LOCK_user_conn, key_LOCK_uuid_generator, key_LOG_LOCK_log,
444   key_master_info_data_lock, key_master_info_run_lock,
445   key_master_info_sleep_lock, key_master_info_thd_lock,
446   key_mutex_slave_reporting_capability_err_lock, key_relay_log_info_data_lock,
447   key_relay_log_info_sleep_lock, key_relay_log_info_thd_lock,
448   key_relay_log_info_log_space_lock, key_relay_log_info_run_lock,
449   key_mutex_slave_parallel_pend_jobs, key_mutex_mts_temp_tables_lock,
450   key_mutex_slave_parallel_worker,
451   key_mutex_slave_parallel_worker_count,
452   key_structure_guard_mutex, key_TABLE_SHARE_LOCK_ha_data,
453   key_LOCK_error_messages,
454   key_LOCK_log_throttle_qni, key_LOCK_query_plan, key_LOCK_thd_query,
455   key_LOCK_cost_const, key_LOCK_current_cond,
456   key_LOCK_keyring_operations;
457 extern PSI_mutex_key key_RELAYLOG_LOCK_commit;
458 extern PSI_mutex_key key_RELAYLOG_LOCK_commit_queue;
459 extern PSI_mutex_key key_RELAYLOG_LOCK_done;
460 extern PSI_mutex_key key_RELAYLOG_LOCK_flush_queue;
461 extern PSI_mutex_key key_RELAYLOG_LOCK_index;
462 extern PSI_mutex_key key_RELAYLOG_LOCK_log;
463 extern PSI_mutex_key key_RELAYLOG_LOCK_sync;
464 extern PSI_mutex_key key_RELAYLOG_LOCK_sync_queue;
465 extern PSI_mutex_key key_RELAYLOG_LOCK_xids;
466 extern PSI_mutex_key key_LOCK_sql_rand;
467 extern PSI_mutex_key key_gtid_ensure_index_mutex;
468 extern PSI_mutex_key key_mts_temp_table_LOCK;
469 extern PSI_mutex_key key_LOCK_reset_gtid_table;
470 extern PSI_mutex_key key_LOCK_compress_gtid_table;
471 extern PSI_mutex_key key_mts_gaq_LOCK;
472 extern PSI_mutex_key key_thd_timer_mutex;
473 extern PSI_mutex_key key_LOCK_offline_mode;
474 extern PSI_mutex_key key_LOCK_default_password_lifetime;
475 
476 #ifdef HAVE_REPLICATION
477 extern PSI_mutex_key key_commit_order_manager_mutex;
478 extern PSI_mutex_key key_mutex_slave_worker_hash;
479 #endif
480 #ifdef WITH_WSREP
481 extern PSI_mutex_key key_LOCK_wsrep_thd;
482 extern PSI_cond_key  key_COND_wsrep_thd;
483 extern PSI_thread_key key_thread_handle_wsrep;
484 #endif /* HAVE_WSREP */
485 
486 extern PSI_rwlock_key key_rwlock_LOCK_grant, key_rwlock_LOCK_logger,
487   key_rwlock_LOCK_sys_init_connect, key_rwlock_LOCK_sys_init_slave,
488   key_rwlock_LOCK_system_variables_hash, key_rwlock_query_cache_query_lock,
489   key_rwlock_global_sid_lock, key_rwlock_gtid_mode_lock,
490   key_rwlock_channel_map_lock, key_rwlock_channel_lock;
491 
492 extern PSI_cond_key key_PAGE_cond, key_COND_active, key_COND_pool;
493 extern PSI_cond_key key_BINLOG_update_cond,
494   key_COND_cache_status_changed, key_COND_manager,
495   key_COND_server_started,
496   key_item_func_sleep_cond, key_master_info_data_cond,
497   key_master_info_start_cond, key_master_info_stop_cond,
498   key_master_info_sleep_cond,
499   key_relay_log_info_data_cond, key_relay_log_info_log_space_cond,
500   key_relay_log_info_start_cond, key_relay_log_info_stop_cond,
501   key_relay_log_info_sleep_cond, key_cond_slave_parallel_pend_jobs,
502   key_cond_slave_parallel_worker, key_cond_mts_gaq,
503   key_TABLE_SHARE_cond, key_user_level_lock_cond;
504 extern PSI_cond_key key_BINLOG_COND_done;
505 extern PSI_cond_key key_RELAYLOG_COND_done;
506 extern PSI_cond_key key_RELAYLOG_update_cond;
507 extern PSI_cond_key key_BINLOG_prep_xids_cond;
508 extern PSI_cond_key key_RELAYLOG_prep_xids_cond;
509 extern PSI_cond_key key_gtid_ensure_index_cond;
510 extern PSI_cond_key key_COND_compress_gtid_table;
511 extern PSI_cond_key key_COND_thr_lock;
512 
513 #ifdef HAVE_REPLICATION
514 extern PSI_cond_key key_cond_slave_worker_hash;
515 extern PSI_cond_key key_commit_order_manager_cond;
516 #endif
517 extern PSI_thread_key key_thread_bootstrap,
518   key_thread_handle_manager, key_thread_main,
519   key_thread_one_connection, key_thread_signal_hand,
520   key_thread_compress_gtid_table, key_thread_parser_service;
521 extern PSI_thread_key key_thread_timer_notifier;
522 
523 extern PSI_file_key key_file_map;
524 extern PSI_file_key key_file_binlog, key_file_binlog_cache,
525   key_file_binlog_index, key_file_binlog_index_cache, key_file_casetest,
526   key_file_dbopt, key_file_des_key_file, key_file_ERRMSG, key_select_to_file,
527   key_file_fileparser, key_file_frm, key_file_global_ddl_log, key_file_load,
528   key_file_loadfile, key_file_log_event_data, key_file_log_event_info,
529   key_file_master_info, key_file_misc, key_file_partition_ddl_log,
530   key_file_pid, key_file_relay_log_info, key_file_send_file, key_file_tclog,
531   key_file_trg, key_file_trn, key_file_init;
532 extern PSI_file_key key_file_general_log, key_file_slow_log;
533 extern PSI_file_key key_file_relaylog, key_file_relaylog_cache, key_file_relaylog_index, key_file_relaylog_index_cache;
534 extern PSI_socket_key key_socket_tcpip, key_socket_unix, key_socket_client_connection;
535 
536 void init_server_psi_keys();
537 
538 C_MODE_END
539 
540 #endif /* HAVE_PSI_INTERFACE */
541 
542 C_MODE_START
543 
544 extern PSI_memory_key key_memory_locked_table_list;
545 extern PSI_memory_key key_memory_locked_thread_list;
546 extern PSI_memory_key key_memory_thd_transactions;
547 extern PSI_memory_key key_memory_delegate;
548 extern PSI_memory_key key_memory_acl_mem;
549 extern PSI_memory_key key_memory_acl_memex;
550 extern PSI_memory_key key_memory_acl_cache;
551 extern PSI_memory_key key_memory_thd_main_mem_root;
552 extern PSI_memory_key key_memory_help;
553 extern PSI_memory_key key_memory_frm;
554 extern PSI_memory_key key_memory_table_share;
555 extern PSI_memory_key key_memory_gdl;
556 extern PSI_memory_key key_memory_table_triggers_list;
557 extern PSI_memory_key key_memory_prepared_statement_map;
558 extern PSI_memory_key key_memory_prepared_statement_main_mem_root;
559 extern PSI_memory_key key_memory_protocol_rset_root;
560 extern PSI_memory_key key_memory_warning_info_warn_root;
561 extern PSI_memory_key key_memory_sp_cache;
562 extern PSI_memory_key key_memory_sp_head_main_root;
563 extern PSI_memory_key key_memory_sp_head_execute_root;
564 extern PSI_memory_key key_memory_sp_head_call_root;
565 extern PSI_memory_key key_memory_table_mapping_root;
566 extern PSI_memory_key key_memory_quick_range_select_root;
567 extern PSI_memory_key key_memory_quick_index_merge_root;
568 extern PSI_memory_key key_memory_quick_ror_intersect_select_root;
569 extern PSI_memory_key key_memory_quick_ror_union_select_root;
570 extern PSI_memory_key key_memory_quick_group_min_max_select_root;
571 extern PSI_memory_key key_memory_test_quick_select_exec;
572 extern PSI_memory_key key_memory_prune_partitions_exec;
573 extern PSI_memory_key key_memory_binlog_recover_exec;
574 extern PSI_memory_key key_memory_blob_mem_storage;
575 
576 extern PSI_memory_key key_memory_Sys_var_charptr_value;
577 extern PSI_memory_key key_memory_THD_db;
578 extern PSI_memory_key key_memory_user_var_entry;
579 extern PSI_memory_key key_memory_user_var_entry_value;
580 extern PSI_memory_key key_memory_Slave_job_group_group_relay_log_name;
581 extern PSI_memory_key key_memory_Relay_log_info_group_relay_log_name;
582 extern PSI_memory_key key_memory_binlog_cache_mngr;
583 extern PSI_memory_key key_memory_Row_data_memory_memory;
584 extern PSI_memory_key key_memory_errmsgs;
585 extern PSI_memory_key key_memory_Event_queue_element_for_exec_names;
586 extern PSI_memory_key key_memory_Event_scheduler_scheduler_param;
587 extern PSI_memory_key key_memory_Gis_read_stream_err_msg;
588 extern PSI_memory_key key_memory_Geometry_objects_data;
589 extern PSI_memory_key key_memory_host_cache_hostname;
590 extern PSI_memory_key key_memory_User_level_lock;
591 extern PSI_memory_key key_memory_Filesort_info_record_pointers;
592 extern PSI_memory_key key_memory_Sort_param_tmp_buffer;
593 extern PSI_memory_key key_memory_Filesort_info_merge;
594 extern PSI_memory_key key_memory_Filesort_buffer_sort_keys;
595 extern PSI_memory_key key_memory_handler_errmsgs;
596 extern PSI_memory_key key_memory_handlerton;
597 extern PSI_memory_key key_memory_XID;
598 extern PSI_memory_key key_memory_MYSQL_LOCK;
599 extern PSI_memory_key key_memory_MYSQL_LOG_name;
600 extern PSI_memory_key key_memory_TC_LOG_MMAP_pages;
601 extern PSI_memory_key key_memory_my_str_malloc;
602 extern PSI_memory_key key_memory_MYSQL_BIN_LOG_basename;
603 extern PSI_memory_key key_memory_MYSQL_BIN_LOG_index;
604 extern PSI_memory_key key_memory_MYSQL_RELAY_LOG_basename;
605 extern PSI_memory_key key_memory_MYSQL_RELAY_LOG_index;
606 extern PSI_memory_key key_memory_rpl_filter;
607 extern PSI_memory_key key_memory_Security_context;
608 extern PSI_memory_key key_memory_NET_buff;
609 extern PSI_memory_key key_memory_NET_compress_packet;
610 extern PSI_memory_key key_memory_my_bitmap_map;
611 extern PSI_memory_key key_memory_QUICK_RANGE_SELECT_mrr_buf_desc;
612 extern PSI_memory_key key_memory_TABLE_RULE_ENT;
613 extern PSI_memory_key key_memory_Mutex_cond_array_Mutex_cond;
614 extern PSI_memory_key key_memory_Owned_gtids_sidno_to_hash;
615 extern PSI_memory_key key_memory_Sid_map_Node;
616 extern PSI_memory_key key_memory_bison_stack;
617 extern PSI_memory_key key_memory_TABLE_sort_io_cache;
618 extern PSI_memory_key key_memory_DATE_TIME_FORMAT;
619 extern PSI_memory_key key_memory_DDL_LOG_MEMORY_ENTRY;
620 extern PSI_memory_key key_memory_ST_SCHEMA_TABLE;
621 extern PSI_memory_key key_memory_ignored_db;
622 extern PSI_memory_key key_memory_SLAVE_INFO;
623 extern PSI_memory_key key_memory_log_event_old;
624 extern PSI_memory_key key_memory_HASH_ROW_ENTRY;
625 extern PSI_memory_key key_memory_table_def_memory;
626 extern PSI_memory_key key_memory_MPVIO_EXT_auth_info;
627 extern PSI_memory_key key_memory_LOG_POS_COORD;
628 extern PSI_memory_key key_memory_XID_STATE;
629 extern PSI_memory_key key_memory_Rpl_info_file_buffer;
630 extern PSI_memory_key key_memory_Rpl_info_table;
631 extern PSI_memory_key key_memory_binlog_pos;
632 extern PSI_memory_key key_memory_db_worker_hash_entry;
633 extern PSI_memory_key key_memory_rpl_slave_command_buffer;
634 extern PSI_memory_key key_memory_binlog_ver_1_event;
635 extern PSI_memory_key key_memory_rpl_slave_check_temp_dir;
636 extern PSI_memory_key key_memory_TABLE;
637 extern PSI_memory_key key_memory_binlog_statement_buffer;
638 extern PSI_memory_key key_memory_user_conn;
639 extern PSI_memory_key key_memory_dboptions_hash;
640 extern PSI_memory_key key_memory_hash_index_key_buffer;
641 extern PSI_memory_key key_memory_THD_handler_tables_hash;
642 extern PSI_memory_key key_memory_JOIN_CACHE;
643 extern PSI_memory_key key_memory_READ_INFO;
644 extern PSI_memory_key key_memory_partition_syntax_buffer;
645 extern PSI_memory_key key_memory_global_system_variables;
646 extern PSI_memory_key key_memory_THD_variables;
647 extern PSI_memory_key key_memory_PROFILE;
648 extern PSI_memory_key key_memory_LOG_name;
649 extern PSI_memory_key key_memory_string_iterator;
650 extern PSI_memory_key key_memory_frm_extra_segment_buff;
651 extern PSI_memory_key key_memory_frm_form_pos;
652 extern PSI_memory_key key_memory_frm_string;
653 extern PSI_memory_key key_memory_Unique_sort_buffer;
654 extern PSI_memory_key key_memory_Unique_merge_buffer;
655 extern PSI_memory_key key_memory_shared_memory_name;
656 extern PSI_memory_key key_memory_opt_bin_logname;
657 extern PSI_memory_key key_memory_Query_cache;
658 extern PSI_memory_key key_memory_READ_RECORD_cache;
659 extern PSI_memory_key key_memory_Quick_ranges;
660 extern PSI_memory_key key_memory_File_query_log_name;
661 extern PSI_memory_key key_memory_Table_trigger_dispatcher;
662 extern PSI_memory_key key_memory_show_slave_status_io_gtid_set;
663 #ifdef WITH_WSREP
664 extern PSI_memory_key key_memory_wsrep;
665 #endif /* WITH_WSREP */
666 extern PSI_memory_key key_memory_write_set_extraction;
667 extern PSI_memory_key key_memory_thd_timer;
668 extern PSI_memory_key key_memory_THD_Session_tracker;
669 extern PSI_memory_key key_memory_THD_Session_sysvar_resource_manager;
670 extern PSI_memory_key key_memory_get_all_tables;
671 extern PSI_memory_key key_memory_fill_schema_schemata;
672 extern PSI_memory_key key_memory_native_functions;
673 extern PSI_memory_key key_memory_JSON;
674 
675 C_MODE_END
676 
677 /*
678   MAINTAINER: Please keep this list in order, to limit merge collisions.
679   Hint: grep PSI_stage_info | sort -u
680 */
681 extern PSI_stage_info stage_after_create;
682 extern PSI_stage_info stage_allocating_local_table;
683 extern PSI_stage_info stage_alter_inplace_prepare;
684 extern PSI_stage_info stage_alter_inplace;
685 extern PSI_stage_info stage_alter_inplace_commit;
686 extern PSI_stage_info stage_changing_master;
687 extern PSI_stage_info stage_checking_master_version;
688 extern PSI_stage_info stage_checking_permissions;
689 extern PSI_stage_info stage_checking_privileges_on_cached_query;
690 extern PSI_stage_info stage_checking_query_cache_for_query;
691 extern PSI_stage_info stage_cleaning_up;
692 extern PSI_stage_info stage_closing_tables;
693 extern PSI_stage_info stage_compressing_gtid_table;
694 extern PSI_stage_info stage_connecting_to_master;
695 extern PSI_stage_info stage_converting_heap_to_ondisk;
696 extern PSI_stage_info stage_copying_to_group_table;
697 extern PSI_stage_info stage_copying_to_tmp_table;
698 extern PSI_stage_info stage_copy_to_tmp_table;
699 extern PSI_stage_info stage_creating_sort_index;
700 extern PSI_stage_info stage_creating_table;
701 extern PSI_stage_info stage_creating_tmp_table;
702 extern PSI_stage_info stage_deleting_from_main_table;
703 extern PSI_stage_info stage_deleting_from_reference_tables;
704 extern PSI_stage_info stage_discard_or_import_tablespace;
705 extern PSI_stage_info stage_end;
706 extern PSI_stage_info stage_executing;
707 extern PSI_stage_info stage_execution_of_init_command;
708 extern PSI_stage_info stage_explaining;
709 extern PSI_stage_info stage_finished_reading_one_binlog_switching_to_next_binlog;
710 extern PSI_stage_info stage_flushing_relay_log_and_master_info_repository;
711 extern PSI_stage_info stage_flushing_relay_log_info_file;
712 extern PSI_stage_info stage_freeing_items;
713 extern PSI_stage_info stage_fulltext_initialization;
714 extern PSI_stage_info stage_got_handler_lock;
715 extern PSI_stage_info stage_got_old_table;
716 extern PSI_stage_info stage_init;
717 extern PSI_stage_info stage_insert;
718 extern PSI_stage_info stage_invalidating_query_cache_entries_table;
719 extern PSI_stage_info stage_invalidating_query_cache_entries_table_list;
720 extern PSI_stage_info stage_killing_slave;
721 extern PSI_stage_info stage_logging_slow_query;
722 extern PSI_stage_info stage_making_temp_file_append_before_load_data;
723 extern PSI_stage_info stage_making_temp_file_create_before_load_data;
724 extern PSI_stage_info stage_manage_keys;
725 extern PSI_stage_info stage_master_has_sent_all_binlog_to_slave;
726 extern PSI_stage_info stage_opening_tables;
727 extern PSI_stage_info stage_optimizing;
728 extern PSI_stage_info stage_preparing;
729 extern PSI_stage_info stage_purging_old_relay_logs;
730 extern PSI_stage_info stage_query_end;
731 extern PSI_stage_info stage_queueing_master_event_to_the_relay_log;
732 extern PSI_stage_info stage_reading_event_from_the_relay_log;
733 extern PSI_stage_info stage_registering_slave_on_master;
734 extern PSI_stage_info stage_removing_duplicates;
735 extern PSI_stage_info stage_removing_tmp_table;
736 extern PSI_stage_info stage_rename;
737 extern PSI_stage_info stage_rename_result_table;
738 extern PSI_stage_info stage_requesting_binlog_dump;
739 extern PSI_stage_info stage_reschedule;
740 extern PSI_stage_info stage_searching_rows_for_update;
741 extern PSI_stage_info stage_sending_binlog_event_to_slave;
742 extern PSI_stage_info stage_sending_cached_result_to_client;
743 extern PSI_stage_info stage_sending_data;
744 extern PSI_stage_info stage_setup;
745 extern PSI_stage_info stage_slave_has_read_all_relay_log;
746 extern PSI_stage_info stage_slave_waiting_event_from_coordinator;
747 extern PSI_stage_info stage_slave_waiting_for_workers_to_process_queue;
748 extern PSI_stage_info stage_slave_waiting_worker_queue;
749 extern PSI_stage_info stage_slave_waiting_worker_to_free_events;
750 extern PSI_stage_info stage_slave_waiting_worker_to_release_partition;
751 extern PSI_stage_info stage_slave_waiting_workers_to_exit;
752 extern PSI_stage_info stage_sorting_for_group;
753 extern PSI_stage_info stage_sorting_for_order;
754 extern PSI_stage_info stage_sorting_result;
755 extern PSI_stage_info stage_sql_thd_waiting_until_delay;
756 extern PSI_stage_info stage_statistics;
757 extern PSI_stage_info stage_storing_result_in_query_cache;
758 extern PSI_stage_info stage_storing_row_into_queue;
759 extern PSI_stage_info stage_system_lock;
760 extern PSI_stage_info stage_update;
761 extern PSI_stage_info stage_updating;
762 extern PSI_stage_info stage_updating_main_table;
763 extern PSI_stage_info stage_updating_reference_tables;
764 extern PSI_stage_info stage_upgrading_lock;
765 extern PSI_stage_info stage_user_sleep;
766 extern PSI_stage_info stage_verifying_table;
767 extern PSI_stage_info stage_waiting_for_gtid_to_be_committed;
768 extern PSI_stage_info stage_waiting_for_handler_insert;
769 extern PSI_stage_info stage_waiting_for_handler_lock;
770 extern PSI_stage_info stage_waiting_for_handler_open;
771 extern PSI_stage_info stage_waiting_for_insert;
772 extern PSI_stage_info stage_waiting_for_master_to_send_event;
773 extern PSI_stage_info stage_waiting_for_master_update;
774 extern PSI_stage_info stage_waiting_for_relay_log_space;
775 extern PSI_stage_info stage_waiting_for_slave_mutex_on_exit;
776 extern PSI_stage_info stage_waiting_for_slave_thread_to_start;
777 extern PSI_stage_info stage_waiting_for_query_cache_lock;
778 extern PSI_stage_info stage_waiting_for_table_flush;
779 extern PSI_stage_info stage_waiting_for_the_next_event_in_relay_log;
780 extern PSI_stage_info stage_waiting_for_the_slave_thread_to_advance_position;
781 extern PSI_stage_info stage_waiting_to_finalize_termination;
782 extern PSI_stage_info stage_worker_waiting_for_its_turn_to_commit;
783 extern PSI_stage_info stage_worker_waiting_for_commit_parent;
784 extern PSI_stage_info stage_suspending;
785 extern PSI_stage_info stage_starting;
786 extern PSI_stage_info stage_waiting_for_no_channel_reference;
787 #ifdef HAVE_PSI_STATEMENT_INTERFACE
788 /**
789   Statement instrumentation keys (sql).
790   The last entry, at [SQLCOM_END], is for parsing errors.
791 */
792 extern PSI_statement_info sql_statement_info[(uint) SQLCOM_END + 1];
793 
794 /**
795   Statement instrumentation keys (com).
796   The last entry, at [COM_END], is for packet errors.
797 */
798 extern PSI_statement_info com_statement_info[(uint) COM_END + 1];
799 
800 /**
801   Statement instrumentation key for replication.
802 */
803 extern PSI_statement_info stmt_info_rpl;
804 
805 void init_sql_statement_info();
806 void init_com_statement_info();
807 #endif /* HAVE_PSI_STATEMENT_INTERFACE */
808 
809 #ifndef _WIN32
810 extern my_thread_t signal_thread;
811 #endif
812 
813 #ifdef HAVE_OPENSSL
814 extern struct st_VioSSLFd * ssl_acceptor_fd;
815 #endif /* HAVE_OPENSSL */
816 
817 /*
818   The following variables were under INNODB_COMPABILITY_HOOKS
819  */
820 extern my_bool opt_large_pages;
821 extern uint opt_large_page_size;
822 extern char lc_messages_dir[FN_REFLEN];
823 extern char *lc_messages_dir_ptr;
824 extern const char *log_error_dest;
825 extern MYSQL_PLUGIN_IMPORT char reg_ext[FN_EXTLEN];
826 extern MYSQL_PLUGIN_IMPORT uint reg_ext_length;
827 extern MYSQL_PLUGIN_IMPORT uint lower_case_table_names;
828 extern MYSQL_PLUGIN_IMPORT bool mysqld_embedded;
829 
830 extern long tc_heuristic_recover;
831 
832 extern ulong specialflag;
833 extern size_t mysql_data_home_len;
834 extern size_t mysql_real_data_home_len;
835 extern const char *mysql_real_data_home_ptr;
836 extern MYSQL_PLUGIN_IMPORT char  *mysql_data_home;
837 extern "C" MYSQL_PLUGIN_IMPORT char server_version[SERVER_VERSION_LENGTH];
838 extern MYSQL_PLUGIN_IMPORT char mysql_real_data_home[];
839 extern char mysql_unpacked_real_data_home[];
840 extern MYSQL_PLUGIN_IMPORT struct system_variables global_system_variables;
841 extern char default_logfile_name[FN_REFLEN];
842 
843 #define mysql_tmpdir (my_tmpdir(&mysql_tmpdir_list))
844 
845 extern MYSQL_PLUGIN_IMPORT const key_map key_map_empty;
846 extern MYSQL_PLUGIN_IMPORT key_map key_map_full;          /* Should be threaded as const */
847 
848 /*
849   Server mutex locks and condition variables.
850  */
851 extern mysql_mutex_t
852        LOCK_item_func_sleep, LOCK_status,
853        LOCK_uuid_generator,
854        LOCK_crypt, LOCK_timezone,
855        LOCK_slave_list, LOCK_manager,
856        LOCK_global_system_variables, LOCK_user_conn, LOCK_log_throttle_qni,
857        LOCK_prepared_stmt_count, LOCK_error_messages,
858        LOCK_sql_slave_skip_counter, LOCK_slave_net_timeout,
859        LOCK_slave_trans_dep_tracker,
860        LOCK_offline_mode, LOCK_default_password_lifetime;
861 #ifdef HAVE_OPENSSL
862 extern char* des_key_file;
863 extern mysql_mutex_t LOCK_des_key_file;
864 #endif
865 extern mysql_mutex_t LOCK_server_started;
866 extern mysql_cond_t COND_server_started;
867 extern mysql_mutex_t LOCK_reset_gtid_table;
868 extern mysql_mutex_t LOCK_compress_gtid_table;
869 extern mysql_cond_t COND_compress_gtid_table;
870 extern mysql_rwlock_t LOCK_sys_init_connect, LOCK_sys_init_slave;
871 extern mysql_rwlock_t LOCK_system_variables_hash;
872 extern mysql_cond_t COND_manager;
873 extern int32 thread_running;
874 extern mysql_mutex_t LOCK_keyring_operations;
875 
876 extern char *opt_ssl_ca, *opt_ssl_capath, *opt_ssl_cert, *opt_ssl_cipher,
877             *opt_ssl_key, *opt_ssl_crl, *opt_ssl_crlpath, *opt_tls_version;
878 
879 
880 extern char *opt_disabled_storage_engines;
881 /**
882   only options that need special treatment in get_one_option() deserve
883   to be listed below
884 */
885 enum options_mysqld
886 {
887   OPT_to_set_the_start_number=256,
888   OPT_BIND_ADDRESS,
889   OPT_BINLOG_CHECKSUM,
890   OPT_BINLOG_DO_DB,
891   OPT_BINLOG_FORMAT,
892   OPT_BINLOG_MAX_FLUSH_QUEUE_TIME,
893   OPT_BINLOG_IGNORE_DB,
894   OPT_BIN_LOG,
895   OPT_BOOTSTRAP,
896   OPT_CONSOLE,
897   OPT_DEBUG_SYNC_TIMEOUT,
898   OPT_DELAY_KEY_WRITE_ALL,
899   OPT_ISAM_LOG,
900   OPT_IGNORE_DB_DIRECTORY,
901   OPT_KEY_BUFFER_SIZE,
902   OPT_KEY_CACHE_AGE_THRESHOLD,
903   OPT_KEY_CACHE_BLOCK_SIZE,
904   OPT_KEY_CACHE_DIVISION_LIMIT,
905   OPT_LC_MESSAGES_DIRECTORY,
906   OPT_LOWER_CASE_TABLE_NAMES,
907   OPT_MASTER_RETRY_COUNT,
908   OPT_MASTER_VERIFY_CHECKSUM,
909   OPT_POOL_OF_THREADS,
910   OPT_REPLICATE_DO_DB,
911   OPT_REPLICATE_DO_TABLE,
912   OPT_REPLICATE_IGNORE_DB,
913   OPT_REPLICATE_IGNORE_TABLE,
914   OPT_REPLICATE_REWRITE_DB,
915   OPT_REPLICATE_WILD_DO_TABLE,
916   OPT_REPLICATE_WILD_IGNORE_TABLE,
917   OPT_SERVER_ID,
918   OPT_SKIP_HOST_CACHE,
919   OPT_SKIP_LOCK,
920   OPT_SKIP_NEW,
921   OPT_SKIP_RESOLVE,
922   OPT_SKIP_STACK_TRACE,
923   OPT_SKIP_SYMLINKS,
924   OPT_SLAVE_SQL_VERIFY_CHECKSUM,
925   OPT_SSL_CA,
926   OPT_SSL_CAPATH,
927   OPT_SSL_CERT,
928   OPT_SSL_CIPHER,
929   OPT_TLS_VERSION,
930   OPT_SSL_KEY,
931   OPT_UPDATE_LOG,
932   OPT_WANT_CORE,
933   OPT_LOG_ERROR,
934 #ifdef WITH_WSREP
935   OPT_WSREP_PROVIDER,
936   OPT_WSREP_PROVIDER_OPTIONS,
937   OPT_WSREP_CLUSTER_ADDRESS,
938   OPT_WSREP_START_POSITION,
939   OPT_WSREP_SST_AUTH,
940   OPT_WSREP_RECOVER,
941 #endif /* WITH_WSREP */
942   OPT_MAX_LONG_DATA_SIZE,
943   OPT_EARLY_PLUGIN_LOAD,
944   OPT_PLUGIN_LOAD,
945   OPT_PLUGIN_LOAD_ADD,
946   OPT_SSL_CRL,
947   OPT_SSL_CRLPATH,
948   OPT_PFS_INSTRUMENT,
949   OPT_DEFAULT_AUTH,
950   OPT_SECURE_AUTH,
951   OPT_THREAD_CACHE_SIZE,
952   OPT_HOST_CACHE_SIZE,
953   OPT_TABLE_DEFINITION_CACHE,
954   OPT_MDL_CACHE_SIZE,
955   OPT_MDL_HASH_INSTANCES,
956   OPT_SKIP_INNODB,
957   OPT_AVOID_TEMPORAL_UPGRADE,
958   OPT_SHOW_OLD_TEMPORALS,
959   OPT_ENFORCE_GTID_CONSISTENCY,
960   OPT_TRANSACTION_READ_ONLY,
961   OPT_TRANSACTION_ISOLATION,
962   OPT_KEYRING_MIGRATION_SOURCE,
963   OPT_KEYRING_MIGRATION_DESTINATION,
964   OPT_KEYRING_MIGRATION_USER,
965   OPT_KEYRING_MIGRATION_HOST,
966   OPT_KEYRING_MIGRATION_PASSWORD,
967   OPT_KEYRING_MIGRATION_SOCKET,
968   OPT_KEYRING_MIGRATION_PORT,
969   OPT_NAMED_PIPE_FULL_ACCESS_GROUP
970 };
971 
972 
973 /**
974    Query type constants (usable as bitmap flags).
975 */
976 enum enum_query_type
977 {
978   /// Nothing specific, ordinary SQL query.
979   QT_ORDINARY= 0,
980   /// In utf8.
981   QT_TO_SYSTEM_CHARSET= (1 << 0),
982   /// Without character set introducers.
983   QT_WITHOUT_INTRODUCERS= (1 << 1),
984   /// When printing a SELECT, add its number (select_lex->number)
985   QT_SHOW_SELECT_NUMBER= (1 << 2),
986   /// Don't print a database if it's equal to the connection's database
987   QT_NO_DEFAULT_DB= (1 << 3),
988   /// When printing a derived table, don't print its expression, only alias
989   QT_DERIVED_TABLE_ONLY_ALIAS= (1 << 4),
990   /// Print in charset of Item::print() argument (typically thd->charset()).
991   QT_TO_ARGUMENT_CHARSET= (1 << 5),
992   /// Print identifiers without database's name
993   QT_NO_DB= (1 << 6),
994   /// Print identifiers without table's name
995   QT_NO_TABLE= (1 << 7),
996   /**
997     Change all Item_basic_constant to ? (used by query rewrite to compute
998     digest.)  Un-resolved hints will also be printed in this format.
999   */
1000   QT_NORMALIZED_FORMAT= (1 << 8),
1001   /**
1002     If an expression is constant, print the expression, not the value
1003     it evaluates to. Should be used for error messages, so that they
1004     don't reveal values.
1005   */
1006   QT_NO_DATA_EXPANSION= (1 << 9),
1007 };
1008 
1009 /* query_id */
1010 typedef int64 query_id_t;
1011 extern query_id_t global_query_id;
1012 
1013 /* increment query_id and return it.  */
next_query_id()1014 inline MY_ATTRIBUTE((warn_unused_result)) query_id_t next_query_id()
1015 {
1016   query_id_t id= my_atomic_add64(&global_query_id, 1);
1017   return (id+1);
1018 }
1019 
1020 /*
1021   TODO: Replace this with an inline function.
1022  */
1023 #ifndef EMBEDDED_LIBRARY
1024 extern "C" void unireg_abort(int exit_code) MY_ATTRIBUTE((noreturn));
1025 #else
1026 extern "C" void unireg_clear(int exit_code);
1027 #define unireg_abort(exit_code) do { unireg_clear(exit_code); DBUG_RETURN(exit_code); } while(0)
1028 #endif
1029 
1030 #if defined(MYSQL_DYNAMIC_PLUGIN) && defined(_WIN32)
1031 extern "C" THD *_current_thd_noinline();
1032 #define _current_thd() _current_thd_noinline()
1033 #else
_current_thd(void)1034 static inline THD *_current_thd(void)
1035 {
1036   return my_thread_get_THR_THD();
1037 }
1038 #endif
1039 #define current_thd _current_thd()
1040 
1041 #define ER(X)         ER_THD(current_thd,X)
1042 
1043 #ifdef WITH_WSREP
1044 extern "C" void *start_wsrep_THD(void*);
1045 typedef void (*wsrep_thd_processor_fun)(THD *);
1046 #endif /* WITH_WSREP */
1047 #ifdef _WIN32
1048 bool update_named_pipe_full_access_group(const char *new_group_name);
1049 #endif
1050 
1051 #endif /* MYSQLD_INCLUDED */
1052