1 /* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
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 This program is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License, version 2.0, for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with this program; if not, write to the Free Software
21 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */
22
23 #include <mysql/components/component_implementation.h>
24 #include <mysql/components/minimal_chassis.h>
25 #include <mysql/components/my_service.h>
26 #include <mysql/components/services/dynamic_loader_scheme_file.h>
27 #include <mysql/components/services/mysql_cond_service.h>
28 #include <mysql/components/services/mysql_mutex_service.h>
29 #include <mysql/components/services/mysql_psi_system_service.h>
30 #include <mysql/components/services/mysql_runtime_error_service.h>
31 #include <mysql/components/services/mysql_rwlock_service.h>
32
33 // pfs services
34 #include "storage/perfschema/pfs.h"
35 #include "storage/perfschema/pfs_plugin_table.h"
36
37 #include <stddef.h>
38 #include <new>
39 #include <stdexcept> // std::exception subclasses
40
41 #include "audit_api_connection_service_imp.h"
42 #include "audit_api_message_service_imp.h"
43 #include "component_status_var_service_imp.h"
44 #include "component_sys_var_service_imp.h"
45 #include "dynamic_loader_path_filter_imp.h"
46 #include "host_application_signal_imp.h"
47 #include "keyring_iterator_service_imp.h"
48 #include "log_builtins_filter_imp.h"
49 #include "log_builtins_imp.h"
50 #include "my_inttypes.h"
51 #include "mysql_backup_lock_imp.h"
52 #include "mysql_clone_protocol_imp.h"
53 #include "mysql_connection_attributes_iterator_imp.h"
54 #include "mysql_current_thread_reader_imp.h"
55 #include "mysql_ongoing_transaction_query_imp.h"
56 #include "mysql_page_track_imp.h"
57 #include "mysql_runtime_error_imp.h"
58 #include "mysql_server_runnable_imp.h"
59 #include "mysql_string_service_imp.h"
60 #include "mysqld_error.h"
61 #include "persistent_dynamic_loader_imp.h"
62 #include "security_context_imp.h"
63 #include "sql/auth/dynamic_privileges_impl.h"
64 #include "sql/log.h"
65 #include "sql/mysqld.h" // srv_registry
66 #include "sql/server_component/mysql_admin_session_imp.h"
67 #include "sql/udf_registration_imp.h"
68 #include "storage/perfschema/pfs_services.h"
69 #include "system_variable_source_imp.h"
70 #include "udf_metadata_imp.h"
71
72 // Must come after sql/log.h.
73 #include "mysql/components/services/log_builtins.h"
74
75 /* Implementation located in the mysql_server component. */
76 extern SERVICE_TYPE(mysql_cond_v1)
77 SERVICE_IMPLEMENTATION(mysql_server, mysql_cond_v1);
78 extern SERVICE_TYPE(mysql_mutex_v1)
79 SERVICE_IMPLEMENTATION(mysql_server, mysql_mutex_v1);
80 extern SERVICE_TYPE(mysql_rwlock_v1)
81 SERVICE_IMPLEMENTATION(mysql_server, mysql_rwlock_v1);
82 extern SERVICE_TYPE(mysql_psi_system_v1)
83 SERVICE_IMPLEMENTATION(mysql_server, mysql_psi_system_v1);
84
85 extern REQUIRES_SERVICE_PLACEHOLDER(mysql_rwlock_v1);
86 extern REQUIRES_SERVICE_PLACEHOLDER(mysql_psi_system_v1);
87
88 BEGIN_SERVICE_IMPLEMENTATION(mysql_server_path_filter,
89 dynamic_loader_scheme_file)
90 mysql_dynamic_loader_scheme_file_path_filter_imp::load,
91 mysql_dynamic_loader_scheme_file_path_filter_imp::unload
92 END_SERVICE_IMPLEMENTATION();
93
94 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, persistent_dynamic_loader)
95 mysql_persistent_dynamic_loader_imp::load,
96 mysql_persistent_dynamic_loader_imp::unload END_SERVICE_IMPLEMENTATION();
97
98 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, dynamic_privilege_register)
99 dynamic_privilege_services_impl::register_privilege,
100 dynamic_privilege_services_impl::unregister_privilege
101 END_SERVICE_IMPLEMENTATION();
102
103 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, global_grants_check)
104 dynamic_privilege_services_impl::has_global_grant END_SERVICE_IMPLEMENTATION();
105
106 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_string_factory)
107 mysql_string_imp::create,
108 mysql_string_imp::destroy END_SERVICE_IMPLEMENTATION();
109
110 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_string_case)
111 mysql_string_imp::tolower,
112 mysql_string_imp::toupper END_SERVICE_IMPLEMENTATION();
113
114 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_string_converter)
115 mysql_string_imp::convert_from_buffer,
116 mysql_string_imp::convert_to_buffer END_SERVICE_IMPLEMENTATION();
117
118 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_string_character_access)
119 mysql_string_imp::get_char,
120 mysql_string_imp::get_char_length END_SERVICE_IMPLEMENTATION();
121
122 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_string_byte_access)
123 mysql_string_imp::get_byte,
124 mysql_string_imp::get_byte_length END_SERVICE_IMPLEMENTATION();
125
126 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_string_iterator)
127 mysql_string_imp::iterator_create, mysql_string_imp::iterator_get_next,
128 mysql_string_imp::iterator_destroy END_SERVICE_IMPLEMENTATION();
129
130 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_string_ctype)
131 mysql_string_imp::is_upper, mysql_string_imp::is_lower,
132 mysql_string_imp::is_digit END_SERVICE_IMPLEMENTATION();
133
134 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, log_builtins)
135 log_builtins_imp::wellknown_by_type, log_builtins_imp::wellknown_by_name,
136 log_builtins_imp::wellknown_get_type, log_builtins_imp::wellknown_get_name,
137
138 log_builtins_imp::item_inconsistent, log_builtins_imp::item_generic_type,
139 log_builtins_imp::item_string_class, log_builtins_imp::item_numeric_class,
140
141 log_builtins_imp::item_set_int, log_builtins_imp::item_set_float,
142 log_builtins_imp::item_set_lexstring, log_builtins_imp::item_set_cstring,
143
144 log_builtins_imp::item_set_with_key, log_builtins_imp::item_set,
145
146 log_builtins_imp::line_item_set_with_key, log_builtins_imp::line_item_set,
147
148 log_builtins_imp::line_init, log_builtins_imp::line_exit,
149 log_builtins_imp::line_item_count,
150
151 log_builtins_imp::line_item_types_seen,
152
153 log_builtins_imp::line_item_iter_acquire,
154 log_builtins_imp::line_item_iter_release,
155 log_builtins_imp::line_item_iter_first,
156 log_builtins_imp::line_item_iter_next,
157 log_builtins_imp::line_item_iter_current,
158
159 log_builtins_imp::line_submit,
160
161 log_builtins_imp::message,
162
163 log_builtins_imp::sanitize,
164
165 log_builtins_imp::errmsg_by_errcode, log_builtins_imp::errcode_by_errsymbol,
166
167 log_builtins_imp::label_from_prio,
168
169 log_builtins_imp::open_errstream, log_builtins_imp::write_errstream,
170 log_builtins_imp::dedicated_errstream,
171 log_builtins_imp::close_errstream END_SERVICE_IMPLEMENTATION();
172
173 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, log_builtins_filter)
174 log_builtins_filter_imp::filter_ruleset_new,
175 log_builtins_filter_imp::filter_ruleset_lock,
176 log_builtins_filter_imp::filter_ruleset_unlock,
177 log_builtins_filter_imp::filter_ruleset_drop,
178 log_builtins_filter_imp::filter_ruleset_free,
179 log_builtins_filter_imp::filter_ruleset_move,
180 log_builtins_filter_imp::filter_rule_init,
181 log_builtins_filter_imp::filter_run END_SERVICE_IMPLEMENTATION();
182
183 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, log_builtins_filter_debug)
184 log_builtins_filter_debug_imp::filter_debug_ruleset_get
185 END_SERVICE_IMPLEMENTATION();
186
187 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, log_builtins_string)
188 log_builtins_string_imp::malloc, log_builtins_string_imp::strndup,
189 log_builtins_string_imp::free,
190
191 log_builtins_string_imp::length, log_builtins_string_imp::find_first,
192 log_builtins_string_imp::find_last,
193
194 log_builtins_string_imp::compare,
195
196 log_builtins_string_imp::substitutev,
197 log_builtins_string_imp::substitute END_SERVICE_IMPLEMENTATION();
198
199 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, log_builtins_tmp)
200 log_builtins_tmp_imp::notify_client END_SERVICE_IMPLEMENTATION();
201
202 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, log_builtins_syseventlog)
203 log_builtins_syseventlog_imp::open, log_builtins_syseventlog_imp::write,
204 log_builtins_syseventlog_imp::close END_SERVICE_IMPLEMENTATION();
205
206 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, udf_registration)
207 mysql_udf_registration_imp::udf_register,
208 mysql_udf_registration_imp::udf_unregister END_SERVICE_IMPLEMENTATION();
209
210 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, udf_registration_aggregate)
211 mysql_udf_registration_imp::udf_register_aggregate,
212 mysql_udf_registration_imp::udf_unregister END_SERVICE_IMPLEMENTATION();
213
214 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_udf_metadata)
215 mysql_udf_metadata_imp::argument_get, mysql_udf_metadata_imp::result_get,
216 mysql_udf_metadata_imp::argument_set,
217 mysql_udf_metadata_imp::result_set END_SERVICE_IMPLEMENTATION();
218
219 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, component_sys_variable_register)
220 mysql_component_sys_variable_imp::register_variable,
221 mysql_component_sys_variable_imp::get_variable END_SERVICE_IMPLEMENTATION();
222
223 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_connection_attributes_iterator)
224 mysql_connection_attributes_iterator_imp::init,
225 mysql_connection_attributes_iterator_imp::deinit,
226 mysql_connection_attributes_iterator_imp::get END_SERVICE_IMPLEMENTATION();
227
228 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, component_sys_variable_unregister)
229 mysql_component_sys_variable_imp::unregister_variable,
230 END_SERVICE_IMPLEMENTATION();
231
232 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, status_variable_registration)
233 mysql_status_variable_registration_imp::register_variable,
234 mysql_status_variable_registration_imp::unregister_variable
235 END_SERVICE_IMPLEMENTATION();
236
237 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, system_variable_source)
238 mysql_system_variable_source_imp::get END_SERVICE_IMPLEMENTATION();
239
240 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_backup_lock)
241 mysql_acquire_backup_lock,
242 mysql_release_backup_lock END_SERVICE_IMPLEMENTATION();
243
244 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, clone_protocol)
245 mysql_clone_start_statement, mysql_clone_finish_statement,
246 mysql_clone_get_charsets, mysql_clone_validate_charsets,
247 mysql_clone_get_configs, mysql_clone_validate_configs, mysql_clone_connect,
248 mysql_clone_send_command, mysql_clone_get_response, mysql_clone_kill,
249 mysql_clone_disconnect, mysql_clone_get_error, mysql_clone_get_command,
250 mysql_clone_send_response,
251 mysql_clone_send_error END_SERVICE_IMPLEMENTATION();
252
253 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_thd_security_context)
254 mysql_security_context_imp::get,
255 mysql_security_context_imp::set END_SERVICE_IMPLEMENTATION();
256
257 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_security_context_factory)
258 mysql_security_context_imp::create, mysql_security_context_imp::destroy,
259 mysql_security_context_imp::copy END_SERVICE_IMPLEMENTATION();
260
261 BEGIN_SERVICE_IMPLEMENTATION(mysql_server,
262 mysql_account_database_security_context_lookup)
263 mysql_security_context_imp::lookup END_SERVICE_IMPLEMENTATION();
264
265 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_security_context_options)
266 mysql_security_context_imp::get,
267 mysql_security_context_imp::set END_SERVICE_IMPLEMENTATION();
268
269 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_ongoing_transactions_query)
270 mysql_ongoing_transactions_query_imp::get_ongoing_server_transactions
271 END_SERVICE_IMPLEMENTATION();
272
273 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, host_application_signal)
274 mysql_component_host_application_signal_imp::signal
275 END_SERVICE_IMPLEMENTATION();
276
277 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_audit_api_message)
278 mysql_audit_api_message_imp::emit END_SERVICE_IMPLEMENTATION();
279
280 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_page_track)
281 Page_track_implementation::start, Page_track_implementation::stop,
282 Page_track_implementation::purge, Page_track_implementation::get_page_ids,
283 Page_track_implementation::get_num_page_ids,
284 Page_track_implementation::get_status END_SERVICE_IMPLEMENTATION();
285
286 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_runtime_error)
287 mysql_server_runtime_error_imp::emit END_SERVICE_IMPLEMENTATION();
288
289 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_current_thread_reader)
290 mysql_component_mysql_current_thread_reader_imp::get
291 END_SERVICE_IMPLEMENTATION();
292
293 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_keyring_iterator)
294 mysql_keyring_iterator_imp::init, mysql_keyring_iterator_imp::deinit,
295 mysql_keyring_iterator_imp::get END_SERVICE_IMPLEMENTATION();
296
297 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_admin_session)
298 mysql_component_mysql_admin_session_imp::open END_SERVICE_IMPLEMENTATION();
299
300 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_server_runnable)
301 mysql_server_runnable_imp::run END_SERVICE_IMPLEMENTATION();
302
303 BEGIN_SERVICE_IMPLEMENTATION(mysql_server, mysql_audit_api_connection)
304 mysql_audit_api_connection_imp::emit END_SERVICE_IMPLEMENTATION();
305
306 BEGIN_SERVICE_IMPLEMENTATION(mysql_server,
307 mysql_audit_api_connection_with_error)
308 mysql_audit_api_connection_with_error_imp::emit END_SERVICE_IMPLEMENTATION();
309
310 BEGIN_COMPONENT_PROVIDES(mysql_server)
311 PROVIDES_SERVICE(mysql_server_path_filter, dynamic_loader_scheme_file),
312 PROVIDES_SERVICE(mysql_server, persistent_dynamic_loader),
313 PROVIDES_SERVICE(mysql_server, dynamic_privilege_register),
314 PROVIDES_SERVICE(mysql_server, global_grants_check),
315 PROVIDES_SERVICE(mysql_server, mysql_string_factory),
316 PROVIDES_SERVICE(mysql_server, mysql_string_case),
317 PROVIDES_SERVICE(mysql_server, mysql_string_converter),
318 PROVIDES_SERVICE(mysql_server, mysql_string_character_access),
319 PROVIDES_SERVICE(mysql_server, mysql_string_byte_access),
320 PROVIDES_SERVICE(mysql_server, mysql_string_iterator),
321 PROVIDES_SERVICE(mysql_server, mysql_string_ctype),
322 PROVIDES_SERVICE(mysql_server, log_builtins),
323 PROVIDES_SERVICE(mysql_server, log_builtins_filter),
324 PROVIDES_SERVICE(mysql_server, log_builtins_filter_debug),
325 PROVIDES_SERVICE(mysql_server, log_builtins_string),
326 PROVIDES_SERVICE(mysql_server, log_builtins_tmp),
327 PROVIDES_SERVICE(mysql_server, log_builtins_syseventlog),
328 PROVIDES_SERVICE(mysql_server, udf_registration),
329 PROVIDES_SERVICE(mysql_server, udf_registration_aggregate),
330 PROVIDES_SERVICE(mysql_server, mysql_udf_metadata),
331 PROVIDES_SERVICE(mysql_server, component_sys_variable_register),
332 PROVIDES_SERVICE(mysql_server, component_sys_variable_unregister),
333 PROVIDES_SERVICE(mysql_server, mysql_cond_v1),
334 PROVIDES_SERVICE(mysql_server, mysql_mutex_v1),
335 PROVIDES_SERVICE(mysql_server, mysql_rwlock_v1),
336 PROVIDES_SERVICE(mysql_server, status_variable_registration),
337 PROVIDES_SERVICE(mysql_server, system_variable_source),
338 PROVIDES_SERVICE(mysql_server, mysql_backup_lock),
339 PROVIDES_SERVICE(mysql_server, clone_protocol),
340 PROVIDES_SERVICE(mysql_server, mysql_thd_security_context),
341 PROVIDES_SERVICE(mysql_server, mysql_security_context_factory),
342 PROVIDES_SERVICE(mysql_server,
343 mysql_account_database_security_context_lookup),
344 PROVIDES_SERVICE(mysql_server, mysql_security_context_options),
345 PROVIDES_SERVICE(mysql_server, mysql_ongoing_transactions_query),
346 PROVIDES_SERVICE(mysql_server, host_application_signal),
347 PROVIDES_SERVICE(mysql_server, mysql_audit_api_message),
348 PROVIDES_SERVICE(mysql_server, mysql_page_track),
349 PROVIDES_SERVICE(mysql_server, mysql_runtime_error),
350 PROVIDES_SERVICE(mysql_server, mysql_current_thread_reader),
351 PROVIDES_SERVICE(mysql_server, mysql_keyring_iterator),
352 PROVIDES_SERVICE(mysql_server, mysql_admin_session),
353 PROVIDES_SERVICE(mysql_server, mysql_connection_attributes_iterator),
354 PROVIDES_SERVICE(mysql_server, mysql_server_runnable),
355 PROVIDES_SERVICE(mysql_server, mysql_audit_api_connection),
356 PROVIDES_SERVICE(mysql_server, mysql_audit_api_connection_with_error),
357 PROVIDES_SERVICE(mysql_server, mysql_psi_system_v1),
358 PROVIDES_SERVICE(performance_schema, psi_cond_v1),
359 PROVIDES_SERVICE(performance_schema, psi_error_v1),
360 PROVIDES_SERVICE(performance_schema, psi_file_v2),
361 PROVIDES_SERVICE(performance_schema, psi_idle_v1),
362 PROVIDES_SERVICE(performance_schema, psi_mdl_v1),
363 PROVIDES_SERVICE(performance_schema, psi_memory_v1),
364 PROVIDES_SERVICE(performance_schema, psi_mutex_v1),
365 /* Obsolete: PROVIDES_SERVICE(performance_schema, psi_rwlock_v1), */
366 PROVIDES_SERVICE(performance_schema, psi_rwlock_v2),
367 PROVIDES_SERVICE(performance_schema, psi_socket_v1),
368 PROVIDES_SERVICE(performance_schema, psi_stage_v1),
369 /* Deprecated, use psi_statement_v2. */
370 PROVIDES_SERVICE(performance_schema, psi_statement_v1),
371 PROVIDES_SERVICE(performance_schema, psi_statement_v2),
372 PROVIDES_SERVICE(performance_schema, psi_system_v1),
373 PROVIDES_SERVICE(performance_schema, psi_table_v1),
374 /* Obsolete: PROVIDES_SERVICE(performance_schema, psi_thread_v1), */
375 /* Obsolete: PROVIDES_SERVICE(performance_schema, psi_thread_v2), */
376 PROVIDES_SERVICE(performance_schema, psi_thread_v3),
377 PROVIDES_SERVICE(performance_schema, psi_transaction_v1),
378 /* Deprecated, use pfs_plugin_table_v1. */
379 PROVIDES_SERVICE(performance_schema, pfs_plugin_table),
380 PROVIDES_SERVICE(performance_schema, pfs_plugin_table_v1),
381 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_tiny_v1),
382 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_small_v1),
383 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_medium_v1),
384 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_integer_v1),
385 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_bigint_v1),
386 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_decimal_v1),
387 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_float_v1),
388 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_double_v1),
389 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_string_v1),
390 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_blob_v1),
391 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_enum_v1),
392 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_date_v1),
393 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_time_v1),
394 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_datetime_v1),
395 /* Deprecated, use pfs_plugin_column_timestamp_v2. */
396 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_timestamp_v1),
397 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_timestamp_v2),
398 PROVIDES_SERVICE(performance_schema, pfs_plugin_column_year_v1),
399 PROVIDES_SERVICE(performance_schema, psi_tls_channel_v1),
400 END_COMPONENT_PROVIDES();
401
402 static BEGIN_COMPONENT_REQUIRES(mysql_server) END_COMPONENT_REQUIRES();
403
404 #ifndef WITH_MYSQL_COMPONENTS_TEST_DRIVER
405 /*
406 These symbols are present in minimal chassis library. We defined again
407 for minimal chassis test driver, because we are not supposed to link
408 the minchassis to component_mysql_server
409 On windows we see these symbol issue, On other OSs we are seeing ODR
410 violation error(i.e ASAN error). Hence we added WIN define.
411 */
412 #ifdef _WIN32
413 REQUIRES_SERVICE_PLACEHOLDER(mysql_rwlock_v1);
414 REQUIRES_SERVICE_PLACEHOLDER(mysql_psi_system_v1);
415 REQUIRES_SERVICE_PLACEHOLDER(mysql_runtime_error);
mysql_components_handle_std_exception(const char *)416 void mysql_components_handle_std_exception(const char *) {}
417 #endif
418 #endif
419
mysql_server_init()420 static mysql_service_status_t mysql_server_init() {
421 #ifndef WITH_MYSQL_COMPONENTS_TEST_DRIVER
422 /*
423 Changing minimal_chassis service implementations to mysql_server service
424 implementations
425 */
426 mysql_service_mysql_rwlock_v1 = &imp_mysql_server_mysql_rwlock_v1;
427 mysql_service_mysql_psi_system_v1 = &imp_mysql_server_mysql_psi_system_v1;
428 mysql_service_mysql_runtime_error = &imp_mysql_server_mysql_runtime_error;
429 #endif
430 return false;
431 }
432
mysql_server_deinit()433 static mysql_service_status_t mysql_server_deinit() { return false; }
434
435 /*
436 This wrapper function is created to have the conditional compilation for
437 mysqld server code(i.e sql_main) and the component_mysql_server used for
438 minimal chassis test driver.
439 */
initialize_minimal_chassis(SERVICE_TYPE_NO_CONST (registry)** registry)440 bool initialize_minimal_chassis(SERVICE_TYPE_NO_CONST(registry) * *registry) {
441 #ifndef WITH_MYSQL_COMPONENTS_TEST_DRIVER
442 /*
443 In case of minimal chassis test driver we just need to update the
444 registry with the mysql_service_registry reference. Because we already
445 initialized the minimal chassis in the test binary.
446 */
447 *registry =
448 const_cast<SERVICE_TYPE_NO_CONST(registry) *>(mysql_service_registry);
449 #else
450 /* Normal server code path. Hence we need to initialize minimal chassis */
451 if (minimal_chassis_init(registry, &COMPONENT_REF(mysql_server))) {
452 return true;
453 }
454 #endif
455 return false;
456 }
457
deinitialize_minimal_chassis(SERVICE_TYPE_NO_CONST (registry)* registry MY_ATTRIBUTE ((unused)))458 bool deinitialize_minimal_chassis(SERVICE_TYPE_NO_CONST(registry) *
459 registry MY_ATTRIBUTE((unused))) {
460 #ifdef WITH_MYSQL_COMPONENTS_TEST_DRIVER
461 /* Normal server code path. Hence we need to deinitialize minimal chassis */
462 if (minimal_chassis_deinit(registry, &COMPONENT_REF(mysql_server))) {
463 return true;
464 }
465 #endif
466 return false;
467 }
468
469 BEGIN_COMPONENT_METADATA(mysql_server)
470 METADATA("mysql.author", "Oracle Corporation"),
471 METADATA("mysql.license", "GPL"), END_COMPONENT_METADATA();
472
473 DECLARE_COMPONENT(mysql_server, "mysql:core")
474 mysql_server_init, mysql_server_deinit END_DECLARE_COMPONENT();
475
476 /* Below library header code is needed when component_mysql_server.so is
477 created. And it is not needed when the code is part of mysqld executable.
478 Hence WITH_MYSQL_COMPONENTS_TEST_DRIVER is used to handle the
479 conditional compilation. */
480 #ifndef WITH_MYSQL_COMPONENTS_TEST_DRIVER
481 /* components contained in this library.
482 for now assume that each library will have exactly one component. */
483 DECLARE_LIBRARY_COMPONENTS &COMPONENT_REF(mysql_server)
484 END_DECLARE_LIBRARY_COMPONENTS
485 #endif
486