/** * Copyright (c) 2021 OceanBase * OceanBase CE is licensed under Mulan PubL v2. * You can use this software according to the terms and conditions of the Mulan PubL v2. * You may obtain a copy of Mulan PubL v2 at: * http://license.coscl.org.cn/MulanPubL-2.0 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. * See the Mulan PubL v2 for more details. */ #include "lib/string/ob_string.h" #include "lib/hash/ob_hashmap.h" #include "sql/engine/ob_exec_context.h" #include "pl/sys_package/ob_dbms_upgrade.h" #include "pl/sys_package/ob_dbms_stats.h" #include "pl/sys_package/ob_dbms_scheduler_mysql.h" #include "pl/sys_package/ob_dbms_application.h" #include "pl/sys_package/ob_dbms_session.h" #include "pl/sys_package/ob_dbms_monitor.h" #include "pl/sys_package/ob_dbms_sql.h" #include "pl/sys_package/ob_dbms_user_define_rule.h" #ifdef INTERFACE_DEF INTERFACE_DEF(INTERFACE_START, "TEST", (void*)(ObPLInterfaceImpl::call)) /*************************.. add interface here ..*****************************/ // start of __dbms_upgrade INTERFACE_DEF(INTERFACE_DBMS_UPGRADE_SINGLE, "UPGRADE_SINGLE", (void*)(ObDBMSUpgrade::upgrade_single)) INTERFACE_DEF(INTERFACE_DBMS_UPGRADE_ALL, "UPGRADE_ALL", (void*)(ObDBMSUpgrade::upgrade_all)) // end of __dbms_upgrade // start of dbms_application_info INTERFACE_DEF(INTERFACE_DBMS_READ_CLIENT_INFO, "READ_CLIENT_INFO", (void *)(ObDBMSAppInfo::read_client_info)) INTERFACE_DEF(INTERFACE_DBMS_READ_MODULE, "READ_MODULE", (void *)(ObDBMSAppInfo::read_module)) INTERFACE_DEF(INTERFACE_DBMS_SET_ACTION, "SET_ACTION", (void *)(ObDBMSAppInfo::set_action)) INTERFACE_DEF(INTERFACE_DBMS_SET_CLIENT_INFO, "SET_CLIENT_INFO", (void *)(ObDBMSAppInfo::set_client_info)) INTERFACE_DEF(INTERFACE_DBMS_SET_MODULE, "SET_MODULE", (void *)(ObDBMSAppInfo::set_module)) // end of dbms_application_info // start of dbms_monitor INTERFACE_DEF(INTERFACE_DBMS_SESSION_TRACE_ENABLE, "OB_SESSION_TRACE_ENABLE", (void*)(ObDBMSMonitor::session_trace_enable)) INTERFACE_DEF(INTERFACE_DBMS_SESSION_TRACE_DISABLE, "OB_SESSION_TRACE_DISABLE", (void*)(ObDBMSMonitor::session_trace_disable)) INTERFACE_DEF(INTERFACE_DBMS_CLIENT_ID_TRACE_ENABLE, "OB_CLIENT_ID_TRACE_ENABLE", (void*)(ObDBMSMonitor::client_id_trace_enable)) INTERFACE_DEF(INTERFACE_DBMS_CLIENT_ID_TRACE_DISABLE, "OB_CLIENT_ID_TRACE_DISABLE", (void*)(ObDBMSMonitor::client_id_trace_disable)) INTERFACE_DEF(INTERFACE_DBMS_MOD_ACT_TRACE_ENABLE, "OB_MOD_ACT_TRACE_ENABLE", (void*)(ObDBMSMonitor::mod_act_trace_enable)) INTERFACE_DEF(INTERFACE_DBMS_MOD_ACT_TRACE_DISABLE, "OB_MOD_ACT_TRACE_DISABLE", (void*)(ObDBMSMonitor::mod_act_trace_disable)) INTERFACE_DEF(INTERFACE_DBMS_TENANT_TRACE_ENABLE, "OB_TENANT_TRACE_ENABLE", (void*)(ObDBMSMonitor::tenant_trace_enable)) INTERFACE_DEF(INTERFACE_DBMS_TENANT_TRACE_DISABLE, "OB_TENANT_TRACE_DISABLE", (void*)(ObDBMSMonitor::tenant_trace_disable)) // end of dbms_monitor //start of dbms_stat INTERFACE_DEF(INTERFACE_DBMS_STATS_GATHER_TABLE_STATS, "GATHER_TABLE_STATS", (void*)(ObDbmsStats::gather_table_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_GATHER_SCHEMA_STATS, "GATHER_SCHEMA_STATS", (void*)(ObDbmsStats::gather_schema_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_SET_TABLE_STATS, "SET_TABLE_STATS", (void*)(ObDbmsStats::set_table_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_SET_COLUMN_STATS, "SET_COLUMN_STATS", (void*)(ObDbmsStats::set_column_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_DELETE_TABLE_STATS, "DELETE_TABLE_STATS", (void*)(ObDbmsStats::delete_table_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_DELETE_COLUMN_STATS, "DELETE_COLUMN_STATS", (void*)(ObDbmsStats::delete_column_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_DELETE_SCHEMA_STATS, "DELETE_SCHEMA_STATS", (void*)(ObDbmsStats::delete_schema_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_FLUSH_DATABASE_MONITORING_INFO, "FLUSH_DATABASE_MONITORING_INFO", (void*)(ObDbmsStats::flush_database_monitoring_info)) INTERFACE_DEF(INTERFACE_DBMS_STATS_CREATE_STAT_TABLE, "CREATE_STAT_TABLE", (void*)(ObDbmsStats::create_stat_table)) INTERFACE_DEF(INTERFACE_DBMS_STATS_DROP_STAT_TABLE, "DROP_STAT_TABLE", (void*)(ObDbmsStats::drop_stat_table)) INTERFACE_DEF(INTERFACE_DBMS_STATS_EXPORT_TABLE_STATS, "EXPORT_TABLE_STATS", (void*)(ObDbmsStats::export_table_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_EXPORT_COLUMN_STATS, "EXPORT_COLUMN_STATS", (void*)(ObDbmsStats::export_column_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_EXPORT_SCHEMA_STATS, "EXPORT_SCHEMA_STATS", (void*)(ObDbmsStats::export_schema_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_IMPORT_TABLE_STATS, "IMPORT_TABLE_STATS", (void*)(ObDbmsStats::import_table_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_IMPORT_COLUMN_STATS, "IMPORT_COLUMN_STATS", (void*)(ObDbmsStats::import_column_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_IMPORT_SCHEMA_STATS, "IMPORT_SCHEMA_STATS", (void*)(ObDbmsStats::import_schema_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_LOCK_TABLE_STATS, "LOCK_TABLE_STATS", (void*)(ObDbmsStats::lock_table_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_LOCK_PARTITION_STATS, "LOCK_PARTITION_STATS", (void*)(ObDbmsStats::lock_partition_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_LOCK_SCHEMA_STATS, "LOCK_SCHEMA_STATS", (void*)(ObDbmsStats::lock_schema_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_UNLOCK_TABLE_STATS, "UNLOCK_TABLE_STATS", (void*)(ObDbmsStats::unlock_table_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_UNLOCK_PARTITION_STATS, "UNLOCK_PARTITION_STATS", (void*)(ObDbmsStats::unlock_partition_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_UNLOCK_SCHEMA_STATS, "UNLOCK_SCHEMA_STATS", (void*)(ObDbmsStats::unlock_schema_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_GATHER_DATABASE_STATS_JOB_PROC, "GATHER_DATABASE_STATS_JOB_PROC", (void*)(ObDbmsStats::gather_database_stats_job_proc)) INTERFACE_DEF(INTERFACE_DBMS_STATS_RESTORE_TABLE_STATS, "RESTORE_TABLE_STATS", (void*)(ObDbmsStats::restore_table_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_RESTORE_SCHEMA_STATS, "RESTORE_SCHEMA_STATS", (void*)(ObDbmsStats::restore_schema_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_PURGE_STATS, "PURGE_STATS", (void*)(ObDbmsStats::purge_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_ALTER_STATS_HISTORY_RETENTION, "ALTER_STATS_HISTORY_RETENTION", (void*)(ObDbmsStats::alter_stats_history_retention)) INTERFACE_DEF(INTERFACE_DBMS_STATS_GET_STATS_HISTORY_AVAILABILITY, "GET_STATS_HISTORY_AVAILABILITY", (void*)(ObDbmsStats::get_stats_history_availability)) INTERFACE_DEF(INTERFACE_DBMS_STATS_GET_STATS_HISTORY_RETENTION, "GET_STATS_HISTORY_RETENTION", (void*)(ObDbmsStats::get_stats_history_retention)) INTERFACE_DEF(INTERFACE_DBMS_RESET_GLOBAL_PREF_DEFAULTS, "RESET_GLOBAL_PREF_DEFAULTS", (void*)(ObDbmsStats::reset_global_pref_defaults)) INTERFACE_DEF(INTERFACE_DBMS_SET_GLOBAL_PREFS, "SET_GLOBAL_PREFS", (void*)(ObDbmsStats::set_global_prefs)) INTERFACE_DEF(INTERFACE_DBMS_SET_SCHEMA_PREFS, "SET_SCHEMA_PREFS", (void*)(ObDbmsStats::set_schema_prefs)) INTERFACE_DEF(INTERFACE_DBMS_SET_TABLE_PREFS, "SET_TABLE_PREFS", (void*)(ObDbmsStats::set_table_prefs)) INTERFACE_DEF(INTERFACE_DBMS_GET_PREFS, "GET_PREFS", (void*)(ObDbmsStats::get_prefs)) INTERFACE_DEF(INTERFACE_DBMS_DELETE_SCHEMA_PREFS, "DELETE_SCHEMA_PREFS", (void*)(ObDbmsStats::delete_schema_prefs)) INTERFACE_DEF(INTERFACE_DBMS_DELETE_TABLE_PREFS, "DELETE_TABLE_PREFS", (void*)(ObDbmsStats::delete_table_prefs)) INTERFACE_DEF(INTERFACE_DBMS_STATS_GATHER_INDEX_STATS, "GATHER_INDEX_STATS", (void*)(ObDbmsStats::gather_index_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_DELETE_INDEX_STATS, "DELETE_INDEX_STATS", (void*)(ObDbmsStats::delete_index_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_SET_INDEX_STATS, "SET_INDEX_STATS", (void*)(ObDbmsStats::set_index_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_EXPORT_INDEX_STATS, "EXPORT_INDEX_STATS", (void*)(ObDbmsStats::export_index_stats)) INTERFACE_DEF(INTERFACE_DBMS_STATS_IMPORT_INDEX_STATS, "IMPORT_INDEX_STATS", (void*)(ObDbmsStats::import_index_stats)) //end of dbms_stat //start of dbms_scheduler_mysql #define DEFINE_DBMS_SCHEDULER_MYSQL_INTERFACE(symbol, func) \ INTERFACE_DEF(INTERFACE_##symbol, #symbol, (void*)(func)) DEFINE_DBMS_SCHEDULER_MYSQL_INTERFACE(DBMS_SCHEDULER_MYSQL_CREATE_JOB, ObDBMSSchedulerMysql::create_job) DEFINE_DBMS_SCHEDULER_MYSQL_INTERFACE(DBMS_SCHEDULER_MYSQL_DISABLE, ObDBMSSchedulerMysql::disable) DEFINE_DBMS_SCHEDULER_MYSQL_INTERFACE(DBMS_SCHEDULER_MYSQL_ENABLE, ObDBMSSchedulerMysql::enable) DEFINE_DBMS_SCHEDULER_MYSQL_INTERFACE(DBMS_SCHEDULER_MYSQL_SET_ATTRIBUTE, ObDBMSSchedulerMysql::set_attribute) #undef DEFINE_DBMS_SCHEDULER_MYSQL_INTERFACE //end of dbms_scheduler_mysql // start of dbms_udr INTERFACE_DEF(INTERFACE_DBMS_UDR_CREATE_RULE, "CREATE_RULE", (void *)(ObDBMSUserDefineRule::create_rule)) INTERFACE_DEF(INTERFACE_DBMS_UDR_REMOVE_RULE, "REMOVE_RULE", (void *)(ObDBMSUserDefineRule::remove_rule)) INTERFACE_DEF(INTERFACE_DBMS_UDR_ENABLE_RULE, "ENABLE_RULE", (void *)(ObDBMSUserDefineRule::enable_rule)) INTERFACE_DEF(INTERFACE_DBMS_UDR_DISABLE_RULE, "DISABLE_RULE", (void *)(ObDBMSUserDefineRule::disable_rule)) // end of dbms_udr /****************************************************************************/ INTERFACE_DEF(INTERFACE_END, "INVALID", (void*)(NULL)) #endif #ifndef OCEANBASE_SRC_PL_OB_PL_INTERFACE_PRAGMA_H_ #define OCEANBASE_SRC_PL_OB_PL_INTERFACE_PRAGMA_H_ namespace oceanbase { namespace pl { enum ObPLInterfaceType { #define INTERFACE_DEF(type, name, entry) type, #include "pl/ob_pl_interface_pragma.h" #undef INTERFACE_DEF }; class ObPLInterfaceService { public: ObPLInterfaceService() {} virtual ~ObPLInterfaceService() {} void *get_entry(common::ObString &name) const; int init(); private: ObPLInterfaceType get_type(common::ObString &name) const; private: typedef common::hash::ObHashMap InterfaceMap; InterfaceMap interface_map_; }; class ObPLInterfaceImpl { public: ObPLInterfaceImpl() {} virtual ~ObPLInterfaceImpl() {} public: static int call(sql::ObExecContext &ctx, sql::ParamStore ¶ms, common::ObObj &result); virtual int check_params() = 0; }; } } #endif /* OCEANBASE_SRC_PL_OB_PL_INTERFACE_PRAGMA_H_ */